- 도커 컴포즈를 활용한 다중 컨테이너 관리2025년 07월 29일 17시 46분 19초에 업로드 된 글입니다.작성자: DandyNow728x90반응형
도커 컴포즈를 활용한 다중 컨테이너 관리
1. 도커 컴포즈(Docker Compose) 개요
1-1. 도커 컴포즈란?
도커 컴포즈는 다중 컨테이너로 구성된 도커 애플리케이션을 정의하고 실행하기 위한 도구이다. 이 도구는
compose.yml또는docker-compose.yml파일을 사용하여 애플리케이션의 모든 서비스를 구성하며, 단일 명령어를 통해 전체 애플리케이션 스택의 라이프사이클을 관리하는 것을 가능하게 한다. 이는 복잡한 마이크로서비스 아키텍처 환경에서 여러 컨테이너 간의 상호 의존성을 효율적으로 관리하는 데 필수적인 기능을 제공한다.1-2. 주요 기능
도커 컴포즈는 다음과 같은 주요 기능을 제공한다.
- 서비스 정의: 애플리케이션을 구성하는 각 컨테이너(서비스)의 이미지, 포트, 환경 변수, 볼륨 등을 명확하게 정의한다.
- 네트워크 관리: 서비스 간의 통신을 위한 가상 네트워크를 자동으로 생성하고 관리한다. 서비스는 서비스 이름으로 서로 통신할 수 있다.
- 볼륨 관리: 컨테이너의 데이터를 호스트 시스템에 지속적으로 저장하거나 컨테이너 간에 공유할 수 있도록 볼륨을 정의한다.
2.
compose.yml파일 분석2-1. 파일 구조
compose.yml파일은 도커 컴포즈 애플리케이션의 모든 설정을 담고 있는 YAML 형식의 파일이다. 본 실습에서는services섹션을 사용하여 세 가지 서비스를 정의하고 있다.services: my-mysql-db: image: mysql environment: MYSQL_ROOT_PASSWORD: root volumes: - ./mysql_data:/var/lib/mysql ports: - 4306:3306 my-redis-cache: image: redis ports: - 6379:6379 my-nginx-server: build: . ports: - 80:802-2.
my-mysql-db서비스 구성my-mysql-db서비스는 MySQL 데이터베이스 컨테이너를 나타낸다.image:mysql공식 이미지를 사용함을 명시하고 있다.environment: 컨테이너 내부에서 사용할 환경 변수를 설정한다.MYSQL_ROOT_PASSWORD: root는 MySQLroot사용자의 비밀번호를root로 설정한다.volumes: 데이터 지속성을 위해 호스트 시스템의./mysql_data디렉토리를 컨테이너 내부의/var/lib/mysql경로에 마운트한다.volumes: - ./mysql_data:/var/lib/mysql이 설정은 컨테이너가 중지되거나 제거되어도 데이터가 손실되지 않고 호스트 시스템에 보존됨을 의미한다.
ports: 호스트 시스템의 4306번 포트를 컨테이너의 3306번 포트에 연결한다. 이를 통해 호스트에서localhost:4306으로 MySQL 데이터베이스에 접근할 수 있다.
2-3.
my-redis-cache서비스 구성my-redis-cache서비스는 Redis 캐시 컨테이너를 정의한다.image:redis공식 이미지를 사용한다.ports: 호스트 시스템의 6379번 포트를 컨테이너의 6379번 포트에 연결한다.
2-4.
my-nginx-server서비스 구성my-nginx-server서비스는 Nginx 웹 서버 컨테이너를 정의한다.build: 현재 디렉토리(.)에 존재하는Dockerfile을 사용하여 이미지를 빌드한다. 이는 사용자 정의 이미지를 생성할 때 사용된다.FROM nginx COPY ./ /usr/share/nginx/htmlports: 호스트 시스템의 80번 포트를 컨테이너의 80번 포트에 연결한다. 이를 통해 웹 브라우저에서localhost:80으로 Nginx 서버에 접근할 수 있다.
3. 다중 컨테이너 구동 및 관리
3-1. 애플리케이션 스택 구동
compose.yml파일에 정의된 모든 서비스를 동시에 구동하기 위해서는docker compose up명령어를 사용한다.-d옵션은 컨테이너를 백그라운드에서 실행하도록 한다.docker compose up -d명령어docker compose up -d이 명령어를 실행하면
compose.yml파일에 명시된 이미지 빌드 및 컨테이너 생성이 자동으로 이루어지고, 모든 서비스가 백그라운드에서 시작된다.docker compose up -d명령어를 사용할 때--build옵션을 명시적으로 붙이지 않았는데,compose.yml파일에서 서비스에build지시어가 포함되어 있다면,docker compose up명령어는 해당 서비스의 이미지를 자동으로 빌드하는 동작을 수행한다. 이는 도커 컴포즈가build지시어를 감지하고 필요한 경우 이미지를 빌드하거나 재빌드하는 지능적인 메커니즘을 가지고 있기 때문이다. 예를 들어, 사용자님의compose.yml파일에서my-nginx-server서비스는 다음과 같이build: .을 명시하고 있다. 이 설정은 도커 컴포즈에게my-nginx-server이미지를 현재 디렉토리(compose-practice/)의Dockerfile을 기반으로 빌드해야 한다고 지시하는 것이다. 따라서docker compose up을 실행하면, 도커 컴포즈는my-nginx-server서비스에 대한 이미지가 최신 상태인지 확인하고, 필요한 경우 자동으로 빌드를 수행한다.--build옵션은 이미지가 존재하더라도 강제로 재빌드를 수행하고자 할 때 사용된다. 이는Dockerfile내용이 변경되었거나, 빌드 컨텍스트에 포함된 파일들이 수정되어 최신 변경 사항을 이미지에 반영하고 싶을 때 유용하다. 하지만 초기 구동 시나 변경 사항이 없는 경우에는--build를 생략해도 무방하다.구동 결과 확인
docker compose ps명령어를 사용하여 현재 실행 중인 도커 컴포즈 서비스들의 상태를 확인할 수 있다.docker compose ps명령어 실행 결과는 다음과 같이 각 서비스의 이름, 이미지, 명령어, 생성 시간, 상태, 그리고 포트 매핑 정보를 명확하게 보여준다.
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS compose-practice-my-mysql-db-1 mysql "docker-entrypoint.s…" my-mysql-db 32 seconds ago Up 28 seconds 0.0.0.0:4306->3306/tcp, [::]:4306->3306/tcp compose-practice-my-nginx-server-1 compose-practice-my-nginx-server "/docker-entrypoint.…" my-nginx-server 32 seconds ago Up 28 seconds 0.0.0.0:80->80/tcp, [::]:80->80/tcp compose-practice-my-redis-cache-1 redis "docker-entrypoint.s…" my-redis-cache 32 seconds ago Up 28 seconds 0.0.0.0:6379->6379/tcp, [::]:6379->6379/tcp이 출력을 통해
my-mysql-db,my-nginx-server,my-redis-cache세 가지 서비스가 모두Up상태로 정상적으로 실행되고 있음을 확인할 수 있다.
3-2. 애플리케이션 스택 중단 및 제거
실행 중인 도커 컴포즈 서비스를 중단하고 제거하기 위해서는
docker compose down명령어를 사용한다.docker compose down명령어docker compose down이 명령어는
compose.yml파일에 정의된 모든 컨테이너, 네트워크 및 볼륨(별도로 정의된 명시적 볼륨 제외)을 중지하고 제거한다.[+] Running 4/4 ✔ Container compose-practice-my-redis-cache-1 Removed 0.6s ✔ Container compose-practice-my-nginx-server-1 Removed 0.7s ✔ Container compose-practice-my-mysql-db-1 Removed 2.0s ✔ Network compose-practice_default Removed 0.4sdocker compose ps명령어로 다시 확인하면, 실행 중인 서비스가 없음을 확인할 수 있다.docker compose psNAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
4. 결론
도커 컴포즈는 복잡한 다중 컨테이너 애플리케이션 환경을 효율적으로 관리할 수 있는 강력한 도구이다.
compose.yml파일을 통해 서비스 간의 의존성, 네트워크 설정, 볼륨 등을 선언적으로 정의함으로써, 개발 및 배포 과정을 간소화하고 반복 가능성을 높일 수 있다. 이는 특히 여러 개의 컨테이너가 상호 작용하는 현대적인 애플리케이션 아키텍처에서 개발 생산성을 크게 향상시키는 데 기여한다.728x90반응형'DevOps > Docker' 카테고리의 다른 글
Mac에서 도커 볼륨(Volume) 생성 및 관리: 영속적인 데이터 저장소 구축 🐳 (0) 2025.10.03 Docker Compose를 활용한 서비스 구축 (4) 2025.07.24 Docker Compose 기본 사용법 (1) 2025.07.24 Docker 빌드 시간 단축 및 개발 효율 극대화: 캐싱과 볼륨 활용 팁 (1) 2025.07.24 도커(Docker)로 Nginx 웹 서버 컨테이너 만들기 (3) 2025.07.21 다음글이 없습니다.이전글이 없습니다.댓글