🔍 Docker란?
- django, db, web server 등 다양한 어플리케이션을 컨테이너 환경에서 테스트 및 배포할 수 있는 소프트웨어 플랫폼.
- 컨테이너 환경은 가상 머신(Virtual machine)에서 사용되는 가상 환경과 비슷하지만 다른 구조를 가지고 있다.
- docker를 사용할 경우 다양한 어플리케이션을 쉽고 빠르게 배포 가능.
- 컨테이너는 각각 독립적인 환경에서 구동되기 때문에 안정적인 운영이 가능하다.
- docker 이미지를 통해 동일한 환경을 가진 컨테이너를 쉽게 생성하고 관리할 수 있다.
- docker 컨테이너는 docker 이미지를 기반으로 생성된다.
- 이미지는 docker 컨테이너가 생성될 때 실행되는 실행파일, 설정 등을 가지고 있다.
🔍 docker로 컨테이너 생성&활용
- docker 패키지 설치
sudo apt install docker.io -y
- docker 설치 확인
sudo docker --version
- docker 컨테이너 생성하기
sudo docker run -d -p 80:80 httpd:latest
# run : 이미지를 사용해 컨테이너를 실행시킵니다.
# -d : 컨테이너를 데몬(백그라운드)으로 실행시킵니다.
# 80:80 : 80번 포트로 접속했을 때 컨테이너에 접근할 수 있도록 포트포워딩 설정을 해줍니다.
# httpd:latest : httpd의 가장 최신 이미지를 사용해 컨테이너를 생성합니다.
- 실행중인 컨테이너 확인하기
sudo docker ps # 실행중인 컨테이너 목록 확인하기
# CONTAINER ID : 컨테이너가 가지고 있는 고유한 id
# IMAGE : 컨테이너가 생성될 때 사용된 이미지
# COMMAND : 컨테이너가 생성될 때 실행되는 명령어
# CREATED : 생성 후 경과 시간
# STATUS : 컨테이너 상태
# PORTS : 사용중인 포트
sudo docker ps -a
# -a : 중지된 컨테이너 목록까지 포함해서 모두 확인하기
- 다운받은 이미지 확인하기
sudo docker images
# REPOSITORY : 이미지 저장소 이름
# TAG : 이미지 버전
# IMAGE ID : 이미지의 고유한 id
# CREATED : 이미지 생성일(마지막 업데이트 일)
# SIZE : 이미지 용량
- 컨테이너 내부로 들어가기
sudo docker exec -it $container_id /bin/bash
# $containser_id : sudo docker ps를 쳤을 때 확인되는 container_id를 입력합니다.
# /bin/bash : 컨테이너에 접속할 때 사용되는 쉘을 입력합니다.
# 이미지에 따라 /bin/bash라는 쉘이 존재하지 않을 수 있는데, 이 경우에는 /bin/sh를 사용해 접속합니다.
🔍 docker-compose
- docker 2개 이상의 컨테이너를 더욱 간편하게 관리하기 위해 사용되는 툴.
- docker-compose를 사용할 때에는 docker-compose.yml (혹은 .yaml)이라는 파일에 컨테이너에서 사용 될 이미지, 옵션 등을 작성한 후 사용하게 된다.
- docker 명령어만 사용할 때보다 여러 컨테이너를 더 간편하고 직관적인 컨테이너 관리 가능.
- 실행할 때 사용자가 작성한 docker-compose.yml 파일의 내용에 맞게 컨테이너를 설정하고 실행한다.(파일이 존재하는 경로 확인)
- docker-compose 설치하기
sudo mkdir -p /usr/lib/docker/cli-plugins
# /usr/lib/docker 경로에 cli-plugins라는 디렉토리를 생성합니다.
# -p : 만약 상위 디렉토리가 없다면 함께 생성합니다.
sudo curl -SL https://github.com/docker/compose/releases/download/v2.11.2/docker-compose-linux-x86_64 -o /usr/lib/docker/cli-plugins/docker-compose
# github에 release 된 docker-compose 파일을 /usr/lib/docker/cli-plugins/ 경로에 다운로드 받습니다.
# v2.11.2는 docker-compose의 버전이며, 최신 버전은 여기서 확인 가능합니다.
sudo chmod +x /usr/lib/docker/cli-plugins/docker-compose
# 다운받은 docker-compose 파일에 실행 권한을 부여해 줍니다.
sudo docker compose version
# docker-compose가 정상적으로 설치되었는지 확인합니다.
# Docker Compose version v2.11.2 정상적으로 설치 된 경우 버전이 출력됩니다.
- docker 컨테이너 삭제하기
sudo docker ps -a # docker에 존재하는 컨테이너 목록을 확인합니다.
# CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# 54445308314d httpd:latest "httpd-foreground" 23 hours ago Up 23 hours 0.0.0.0:80->80/tcp, :::80->80/tcp sweet_engelbart
sudo docker rm -f $container_id # 컨테이너의 실행중 여부와 관계 없이 강제로 삭제합니다.
- docker-compose.yml 작성해보기
vi docker-compose.yml
version: '3.8' # docker-compose.yml에 사용될 문법 버전을 정의합니다.
services:
example: # 서비스 이름을 지정합니다. 서비스 이름은 컨테이너끼리 통신할 때 사용됩니다.
container_name: example # 컨테이너 이름을 지정합니다.
image: 'httpd:latest' # 컨테이너를 생성할 때 사용될 이미지를 지정합니다.
restart: always # 컨테이너가 종료됐을 때 다시 실행시켜 줍니다.
- 컨테이너 실행
# docker compose 명령어는 docker-compose.yml 파일이 존재하는 자리에서 실행해야 합니다.
sudo docker compose up -d
# up : docker-compose.yml 파일을 읽어 정의된 서비스들을 실행시킵니다.
# -d : 컨테이너를 데몬(백그라운드)으로 실행시킵니다.
- 컨테이너 중지 📌
❗️ stop 명령어 : 컨테이너를 완전히 삭제시키는 것이 아닌 중지 상태로 만드는 것-> docker compose start 명령어로 다시 실행
❗️ down 명령어 : 해당 컨테이너 자체가 삭제됨. docker compose up 명령어로 컨테이너를 다시 생성해야함!!!
🔍 컨테이너 포트 포워딩 설정하기
- 포트 포워딩(port forwarding)
- vi docker-compose.yml
version: '3.8' # docker-compose.yml에 사용될 문법 버전을 정의합니다.
services:
example: # 서비스 이름을 지정합니다. 서비스 이름은 컨테이너끼리 통신할 때 사용됩니다.
container_name: example # 컨테이너 이름을 지정합니다.
image: 'httpd:latest' # 컨테이너를 생성할 때 사용될 이미지를 지정합니다.
ports: # 포트포워딩을 설정해줍니다.
- 80:80 # 외부에서 80 포트로 접속했을 때 컨테이너의 80 포트로 연결해줍니다.
restart: always # 컨테이너가 종료됐을 때 다시 실행시켜 줍니다.
- 컨테이너 실행
sudo docker compose restart
- 컨테이너 로그 확인 : 컨테이너가 정상적으로 동작하는지 확인할 수 있다.
'Tools > Docker' 카테고리의 다른 글
Docker 명령어 정리 (0) | 2022.11.17 |
---|---|
Docker | 3주차 서비스 배포하기 (2) (0) | 2022.11.13 |
Docker | 3주차 서비스 배포하기 (1) (0) | 2022.11.12 |
Docker | 2주차 Docker 설치&활용 (2) (0) | 2022.11.11 |
Docker | 1주차 Linux의 특징과 이해 (0) | 2022.11.10 |