소리소문 없이... 사랑도 명예도 이름도 남김 없이...
DexCore.net

Docker

[Docker] 도커 컴포즈(Docker compose) 란?

탑~! 2025. 2. 19. 10:28

[참고 사이트]​

- [Docker] 도커 컴포즈(Docker compose) - 개념 정리 및 사용법

1. 도커 컴포즈란?

(1) 정의

도커 컴포즈는 단일 서버에서 여러개의 컨테이너를 하나의 서비스로 정의해 컨테이너의 묶음으로 관리할 수 있는 작업 환경을 제공하는 관리 도구입니다.

(2) 도커 컴포즈를 사용하는 이유

여러 개의 컨테이너가 하나의 어플리케이션으로 동작할 때 도커 컴포즈를 사용하지 않는다면, 이를 테스트하려면 각 컨테이너를 하나씩 생성해야 합니다. 예를 들면, 웹 어플리케이션을 테스트하려면 웹 서버 컨테이너, 데이터베이스 컨테이너 두 개의 컨테이너를 각각 생성해야 합니다.

즉, 아래와 같이 두개의 run 명령어를 입력해야합니다.

$ docker run --name wordpress_db -d mysql:8 $ docker run -d -p 8080:80 --link wordpress_db:mysql --name seunghwan_wordpress wordpress:latest

위의 예제를 실행하면 wordpress와 mysql 컨테이너를 생성합니다. 이처럼 여러 개의 컨테이너로 구성된 어플리케이션을 구축하기 위해 run 명령어를 여러 번 사용할 수 있지만 각 컨테이너가 제대로 동작하는지 확인하는 테스트 단계에서는 이런식으로 일일히 여러개의 컨테이너를 실행하기는 번거롭습니다.

매번 run 명령어에 옵션을 설정해 CLI로 컨테이너를 생성하기보다는 여러 개의 컨테이너를 하나의 서비스로 정리해 컨테이너 묶음으로 관리할 수 있다면 좀 더 편리할 것입니다. 이를 위해 도커 컴포즈는 컨테이너를 이용한 서비스의 개발과 CI를 위해 여러 개의 컨테이너를 하나의 프로젝트로서 다룰 수 있는 작업 환경을 제공합니다.

도커 컴포즈는 여러 개의 컨테이너의 옵션과 환경을 정의한 파일을 읽어 컨테이너를 순차적으로 생성하는 방식으로 동작합니다. 도커 컴포즈의 설정 파일은 도커 엔진의 run 명령어의 옵션을 그대로 사용할 수 있으며, 각 컨테이너의 의존성, 네트워크, 볼륨 등을 함께 정의할 수 있습니다. 또한 스웜모드의 서비스와 유사하게 설정 파일에 정의된 서비스의 컨테이너 수를 유동적으로 조절할 수 있으며 컨테이너의 서비스 디스커버리도 자동으로 이뤄집니다. 그래서 컨테이너의 수가 많아지고, 정의해야 할 옵션이 많아진다면 도커 컴포즈를 사용하는 것이 좋습니다.

(3) 도커 컴포즈 설치

- 윈도우와 맥의 경우 Docker Desktop를 설치할 때 같이 설치됩니다. 리눅스에 경우 따로 설치해야 합니다.

- 윈도우의 경우 ('[Docker] 윈도우에 Docker 설치(Home 포함)' 포스트를 참조하세요.

- 리눅스의 경우 '[Docker] 리눅스에 Docker 설치' 포스트를 참조하세요.

2. docker-compose.yml 작성 및 활용

도커 컴포즈의 사용법을 알아보기 위해 아래의 도커 run 명령어를 docker-compose.yml 파일로 변환하고 컨테이너를 생성해보겠습니다.

먼저, 아래의 명령어는 CLI에서 docker run 명령어를 이용해서 mysql을 만들고, wordpress를 생성해서 mysql을 연결하는 명령어입니다.

(1) docker run 명령어로 컨테이너 생성

$ docker run -d --name wordpress_db \ --network seunghwan_network \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=seosh817 \ -e MYSQL_DATABASE=seosh817 \ -e MYSQL_USER=seosh817 \ -e MYSQL_PASSWORD=seosh817 \ -v mysql:/var/lib/mysql \ --restart unless-stopped \ mysql:8 $ docker run -d --name seunghwan_wordpress \ --network seunghwan_network \ -p 8080:80 \ --link wordpress_db:mysql \ -e WORDPRESS_DB_HOST=db:3306 \ -e WORDPRESS_DB_USER=seosh817 \ -e WORDPRESS_DB_PASSWORD=seosh817 \ -e WORDPRESS_DB_NAME=seosh817 \ --restart unless-stopped \ wordpress:latest

(2) docker-compose.yml로 도커 컴포즈 프로젝트 실행

위에서 docker run 명령어로 컨테이너를 실행하던 것을 docker compose.yml로 변경해 보겠습니다.

version: '3.9' services: db: image: mysql:8 volumes: - db:/var/lib/mysql restart: unless-stopped environment: - MYSQL_ROOT_PASSWORD=seosh817 - MYSQL_DATABASE=seosh817 - MYSQL_USER=seosh817 - MYSQL_PASSWORD=seosh817 networks: - wordpress wordpress: depends_on: - db image: wordpress:latest ports: - "8000:80" restart: unless-stopped environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: seosh817 WORDPRESS_DB_PASSWORD: seosh817 WORDPRESS_DB_NAME: seosh817 networks: - wordpress volumes: db: {} networks: wordpress: {}

* yaml 파일에서 들여쓰기를 할 때 탭(Tab)은 도커 컴포즈가 인식하지 못하므로 2개의 공백(Space)을 사용해서 하위 항목을 구분해야 합니다.

 

도커 컴포즈를 사용하려면 컨테이너 설정을 저장해 놓은 yaml 파일이 필요합니다. 그러므로 기존에 사용하던 run 명령어를 yaml 파일로 변환하는 것이 도커 컴포즈 사용법의 대부분입니다.

 

위의 docker-compose.yml 파일을 보면 서비스로 db, wordpress 두개가 존재합니다.

그리고 볼륨으로 db, 네트워크로 wordpress를 생성하고 서비스에서 해당 볼륨과 네트워크를 사용하는 구조로 되어있습니다.

 

어떠한 설정도 하지 않으면 도커 컴포즈는 현재 디렉토리의 docker-compose.yml 파일을 읽어 로컬의 도커 엔진에게 컨테이너 생성을 요청합니다. docker compse up 명령어로 도커 컴포즈 프로젝트를 실행할 수 있습니다. docker-compose.yml을 읽어 컨테이너를 생성해 보겠습니다.

docker ps 명령어로 mysql과 wordpress 컨테이너가 docker-compose.yml에 명시된대로 생성된 것을 확인할 수 있습니다.

또한, 도커 docker-compose ps 명령어로 컴포즈 프로젝트를 확인할 수 있습니다.

 

 

출처 : https://blog.naver.com/islove8587/223443298412

 

728x90
반응형