이번에는 Docker-Compose에 대해 정리하려고 합니다.
도커 컴포즈란?
도커 컴포즈는 여러 도커 컨테이너들을 정의하고 동시에 실행할 수 있도록 하는 도구입니다. 이를 통해서 단일 애플리케이션을 구성하는 여러 컨테이너를 정의하고 한 번에 실행할 수 있도록 관리합니다.
도커 컴포즈를 왜 사용할까?
도커 컴포즈를 사용하는 이유는 다음과 같습니다.
- 복잡한 애플리케이션 구성을 위한 컨테이너 관리
- 컨테이너, 서비스, 백과 프론트간의 의존성 관리
- 배포 용이성
도커 컴포즈 설치
apt-get install docker-compose
# 또는
sudo apt-get install docker-compose
# 네트워크 설치
docker network create nat
설치가 완료되면 잘 설치했는지 확인합니다.
docker-compose -v
도커 컴포즈 파일 문법 사용법(docker-compose.yml)
도커 컴포즈 파일은 애플리케이션의 필요한 상태, 컨테이너가 실행 중일 때 어떤 상태여야하는지 기술하는 파일이다. docker container run 명령으로 실행해야할 컨테이너 명령어들을 모여놓은 단순한 형식의 파일(.yml)입니다.
도커는 docker-compose.yml에 작성된 내용을 통해 container들을 실행합니다.
YML 또는 YAML 파일을 사용하는 이유 : YAML 문법은 들여쓰기를 통해 간단하게 작성할 수 있으며, JSON형식으로 변환하기 쉬워서 사용합니다.
도커 컴포즈 파일은 다음과 같은 세 개의 최상위 문(statement)으로 구성됩니다.
- version : 도커 컴포즈 파일 형식의 버전을 가리킵니다.
- service : 애플리케이션을 구성하는 모든 컨테이너에 대한 정보들을 열거하는 부분입니다.
- networks : 서비스 컨테이너가 연결된 모든 도커 네트워크를 열거하는 부분입니다.
이에 대해 자세하게 설명해드리겠습니다.
version
version: '3.8' # Compose 파일 버전
Docker Compose 파일의 버전을 지정합니다. 이는 Compose 파일의 형식을 정의하며, 사용할 수 있는 기능과 옵션을 결정합니다.
service
도커 컨테이너 생성할 때 사용하는 태그
services:
container_name:
image: image_name:latest
image : 컨테이너를 생성할 때 사용하는 Docker hub 또는 로컬 image를 지정합니다.
services:
container_name:
build:
context: . #Dockerfile Directory
dockerfile: Dockerfile
build : 로컬 디렉토리에서 Docker 이미지 빌드하며, 'context'는 Dockrefile의 디렉토리입니다.
services:
container_name:
port:
- "80:80"
ports : 호스트와 컨테이너간의 포트 매핑을 지정합니다
services:
container_name:
enviorment:
a : b
enviroment : 컨테이너에서 사용할 환경 변수를 설정합니다. 변수 a에 b의 값을 설정합니다.
services:
container_name:
command: ["python", "-m", "flask", "run"]
command: 컨테이너가 시작될 때 실행할 명령어를 지정합니다.
services:
container_name:
depends_on:
- db
depends_on : 서비스가 시작되기 전에 시작되어야 할 다른 서비스를 지정합니다.
healthcheck: 추후 추가 예정
restart : 추후 추가 예정
labels : 추후 추가 예정
networks : 추후 추가 예정
network
networks:
network_name:
external:
name: nat
external : 외부 네트워크 참조합니다.
예시
도커 컴포즈를 사용하면 정리가 잘되어서 시각적으로 잘 확인할 수 있습니다.
docker container run -p 8020:80 --name todo-web --network nat todo-list
위의 명령어를 아래와 같이 작성해서 실행할 수 있습니다.
# docker-compose.yml
version: '3.7'
services:
todo-web:
image: todo-list
ports:
- "8020:80"
networks:
- app-net
networks:
app-net:
external:
name: nat
docker-compose.yml 파일을 만들고 명령어를 실행합니다.
docker-compose up
이를 통해 다중 컨테이너 애플리케이션을 손쉽게 정의하고 관리할 수 있습니다. 개발 환경을 환경을 최소화합니다.
도커 컴포즈 명령어
docker-compose up
docker-compose up -d
docker-compose up: 포어그라운드에서 모든 로그를 출력하며 실행합니다.
docker-compose up -d: 백그라운드에서 (detach 모드로) 실행합니다.
docker-compose down
docker-compose down: 실행 중인 컨테이너, 네트워크, 볼륨, 이미지 등을 중지하고 제거합니다.
docker-compose stop
docker-compose stop : 실행 중인 컨테이너, 네트워크, 볼륨, 이미지 등을 중지합니다.
docker-compose scale container_name=3
docker-compose scale web=숫자 : 특정 서비스의 컨테이너 수를 조정합니다
Reference : https://docs.docker.com/compose/
'Program > Docker' 카테고리의 다른 글
[Docker] Docker Container SSH 접속하는 방법 (0) | 2024.05.03 |
---|---|
[Docker] Dockerfile 명령어 모음집 (1) | 2024.04.19 |
[Docker] Container 내부에서 GPU 사용하는 방법 (0) | 2024.04.10 |
[Docker] Docker와 Google Cloud를 이용해 Flask Web서버 배포하기 (1) | 2024.04.07 |