
도커 컴포즈(Docker Compose)는 여러 컨테이너를 정의하고 관리할 수 있는 도구입니다. 이 포스트에서는 도커 컴포즈 정의 파일을 작성하는 방법과 아파치 및 워드프레스를 컨테이너로 실행하는 예제를 살펴보겠습니다.
도커 컴포즈 정의 파일 구성
도커 컴포즈는 YAML 형식으로 작성된 정의 파일을 사용하여 컨테이너를 실행합니다. 이 정의 파일은 반드시 필요하며, 일반적으로 docker-compose.yml라는 이름으로 저장됩니다. 파일의 확장자는 .yml입니다.
기본 구조
도커 컴포즈 정의 파일의 기본 구조는 다음과 같습니다:
version: "3.8"
services:
서비스명:
image: 이미지명
ports:
- 호스트포트:컨테이너포트
restart: 항상/재시작 정책아파치 컨테이너 생성
아파치 웹 서버를 실행하는 도커 컴포즈 정의 파일의 예시는 다음과 같습니다:
version: "3.8"
services:
apaex111:
image: httpd
ports:
- 8080:80
restart: always
volumes:
- ./html:/usr/local/apache2/htdocs
environment:
- APACHE_LOG_LEVEL=warn위의 예시에서 apaex111이라는 서비스는 httpd 이미지를 사용하며, 호스트의 8080 포트를 컨테이너의 80 포트에 매핑합니다. 컨테이너가 종료되면 항상 재시작됩니다.
도커 명령어 예시
위의 도커 컴포즈 파일을 사용하는 대신, 다음과 같은 명령어로 아파치 컨테이너를 실행할 수 있습니다:
docker run --name apaex111 -d -p 8080:80 httpd워드프레스 컨테이너 생성
워드프레스를 실행하기 위한 도커 컴포즈 정의 파일 예시는 다음과 같습니다:
version: "3.8"
services:
wordpressex001:
depends_on:
- mysqlex001
image: wordpress
networks:
- wordpressnet001
volumes:
- wordpressvol001:/var/www/html
ports:
- 8085:80
restart: always
environment:
- WORDPRESS_DB_HOST=mysqlex001
- WORDPRESS_DB_NAME=wordpressdb001
- WORDPRESS_DB_USER=wordpress
- WORDPRESS_DB_PASSWORD=wordpresspasswd이 예시에서 wordpressex001 서비스는 mysqlex001 서비스에 의존하며, wordpress 이미지를 사용합니다. 또한, wordpressnet001이라는 네트워크에 연결되고, wordpressvol001이라는 볼륨을 /var/www/html에 마운트합니다.
도커 명령어 예시
워드프레스를 도커 명령어로 실행하려면 다음과 같이 입력합니다:
docker run --name wordpressex001 -dit --net=wordpressnet001 -p 8085:80 \
-e WORDPRESS_DB_HOST=mysqlex001 \
-e WORDPRESS_DB_NAME=wordpressdb001 \
-e WORDPRESS_DB_USER=wordpress \
-e WORDPRESS_DB_PASSWORD=wordpresspasswd wordpress도커 컴포즈 정의 파일 작성 방법
도커 컴포즈 정의 파일은 YAML 포맷을 따르며, 다음과 같은 규칙을 준수해야 합니다:
YAML 작성 규칙
- 주요 항목 기입: version, services, networks, volumes을 차례로 기입합니다
- 들여쓰기 규칙: 탭 대신 공백을 사용하여 들여쓰기를 합니다. 각 단계마다 공백의 수를 배수로 늘려야 합니다
- 주석 사용:
#기호를 사용하여 주석을 추가할 수 있습니다 - 문자열 감싸기: 문자열은 홑따옴표(
') 또는 쌍따옴표(")로 감싸야 합니다
도커 컴포즈 주요 항목
| 항목 | 설명 | 예시 |
|---|---|---|
| services | 컨테이너를 정의합니다 | web:, database: |
| networks | 네트워크를 정의합니다 | frontend:, backend: |
| volumes | 볼륨을 정의합니다 | db_data:, web_data: |
도커 컴포즈 services 기본 항목
| 항목 | 설명 | 예시 |
|---|---|---|
| image | 사용할 이미지를 지정합니다 | nginx:latest |
| networks | 접속할 네트워크를 지정합니다 | - frontend |
| volumes | 스토리지 마운트를 지정합니다 | - ./data:/app/data |
| ports | 포트 설정을 지정합니다 | - "8080:80" |
| environment | 환경변수를 설정합니다 | NODE_ENV=production |
| depends_on | 다른 서비스에 대한 의존관계를 정의합니다 | - database |
| restart | 컨테이너 종료 시 재시작 여부를 설정합니다 | always |
도커 컴포즈 실행 후 수정
도커 컴포즈로 실행된 컨테이너는 도커 엔진에서 수정이 가능합니다. 하지만 엔진에서 수정하더라도 도커 컴포즈 정의 파일에는 반영되지 않으니 유의해야 합니다.
실행 중인 컨테이너 수정 방법
# 컨테이너 내부 접근
docker exec -it wordpress_wordpressex001_1 /bin/bash
# 설정 파일 수정
docker exec -it wordpress_wordpressex001_1 vi /var/www/html/wp-config.php
# 컨테이너 재시작
docker-compose restart wordpressex001전체 예시
아래는 MySQL과 워드프레스를 포함한 전체 도커 컴포즈 정의 파일입니다:
version: "3.8"
services:
mysqlex001:
image: mysql:8.4
networks:
- wordpressnet001
volumes:
- mysqlvol001:/var/lib/mysql
restart: always
environment:
- MYSQL_ROOT_PASSWORD=rootpasswd
- MYSQL_DATABASE=wordpressdb001
- MYSQL_USER=wordpress
- MYSQL_PASSWORD=wordpresspasswd
command: >
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
--default-authentication-plugin=mysql_native_password
wordpressex001:
depends_on:
- mysqlex001
image: wordpress
networks:
- wordpressnet001
volumes:
- wordpressvol001:/var/www/html
ports:
- 8085:80
restart: always
environment:
- WORDPRESS_DB_HOST=mysqlex001
- WORDPRESS_DB_NAME=wordpressdb001
- WORDPRESS_DB_USER=wordpress
- WORDPRESS_DB_PASSWORD=wordpresspasswd
- WORDPRESS_TABLE_PREFIX=wp_
networks:
wordpressnet001:
driver: bridge
volumes:
mysqlvol001:
wordpressvol001:이 정의 파일을 사용하여 MySQL과 워드프레스 컨테이너를 동시에 실행할 수 있습니다.
실행 및 관리 명령어
# 서비스 시작
docker-compose up -d
# 서비스 상태 확인
docker-compose ps
# 로그 확인
docker-compose logs -f
# 서비스 중지 및 제거
docker-compose down
# 볼륨까지 함께 제거
docker-compose down -v고급 설정 예시
version: "3.8"
services:
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./ssl:/etc/nginx/ssl:ro
depends_on:
- wordpressex001
networks:
- wordpressnet001
wordpressex001:
depends_on:
- mysqlex001
- redis
image: wordpress:php8.2-apache
networks:
- wordpressnet001
volumes:
- wordpressvol001:/var/www/html
- ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
restart: unless-stopped
environment:
- WORDPRESS_DB_HOST=mysqlex001
- WORDPRESS_DB_NAME=wordpressdb001
- WORDPRESS_DB_USER=wordpress
- WORDPRESS_DB_PASSWORD=wordpresspasswd
- WORDPRESS_CONFIG_EXTRA=|
define('WP_REDIS_HOST', 'redis');
define('WP_REDIS_PORT', 6379);
mysqlex001:
image: mysql:8.4
networks:
- wordpressnet001
volumes:
- mysqlvol001:/var/lib/mysql
- ./mysql.cnf:/etc/mysql/conf.d/custom.cnf:ro
restart: unless-stopped
environment:
- MYSQL_ROOT_PASSWORD=rootpasswd
- MYSQL_DATABASE=wordpressdb001
- MYSQL_USER=wordpress
- MYSQL_PASSWORD=wordpresspasswd
redis:
image: redis:7-alpine
networks:
- wordpressnet001
volumes:
- redisvol001:/data
restart: unless-stopped
command: redis-server --appendonly yes
networks:
wordpressnet001:
driver: bridge
volumes:
mysqlvol001:
wordpressvol001:
redisvol001:이러한 설정을 통해 Nginx 리버스 프록시, Redis 캐시, 그리고 커스텀 설정이 포함된 완전한 워드프레스 환경을 구축할 수 있습니다.
'IT기술 > 도커 (docker)' 카테고리의 다른 글
| Docker Compose 명령어 완벽 가이드: 다중 컨테이너 관리의 핵심 (12) | 2025.07.20 |
|---|---|
| Docker Compose 설치와 실행 완벽 가이드: 다중 컨테이너 관리의 시작 (0) | 2025.07.16 |
| Docker Compose 완벽 가이드: 다중 컨테이너 시스템의 효율적 관리 (0) | 2025.07.15 |
| Docker Hub 완벽 가이드: 이미지 관리와 배포의 중심 플랫폼 (2) | 2025.07.14 |
| Docker 컨테이너 개조 완벽 가이드: 실행 중인 컨테이너 커스터마이징 방법 (14) | 2025.07.12 |