- 도커 컴포즈 작성 예시
Mariadb과 WordPress를 도커 컴포즈로 만들어보자.
#vi docker-compose.yml
version: '2'
services:
db:
image: mariadb:10.5
volumes:
- ./mysql:/var/lib/mysql
restart: always #도커가 죽이면 자동으로 재실행
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
image: wordpress:latest
volumes:
- ./wp:/var/www/html
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
실행 # docker-compose up
중지 # docker-compose down
컴포즈 문법
=======================================================
version: '3' 버전에 따라 지원하는 도커 엔진 버전도 다르다.
=======================================================
=======================================================
service: 실행할 컨테이너 정의. docker run --name django와 같다고 할수있다.
service:
diango:
…
=======================================================
image: 컨테이너에 사용할 이미지 이름과 태그. 태그를 생략하면 자동으로 latest. 이미지가 없으면 자동으로 pull
service:
django:
image: django-sample
=======================================================
ports: 컨테이너와 연결할 포트(들). (호스트포트):(컨테이너 포트)
services:
django:
...
ports:
- "8000:8000"
=======================================================
environment: 컨테이너에서 사용할 환경변수(들). {환경변수이름}:{값}
services:
mysql:
...
environment:
- MYSQL_ROOT_PASSWORD=somewordpress: '3'
=======================================================
volumes: 마운트하려는 디렉터리(들). {호스트 디렉터리}:{컨테이너 디렉터리}
services:
django:
...
volumes:
- ./app:/app
=======================================================
restart: 재시작 정책. 종류: "no", always, on-failure, unless-stopped
services:
django:
restart: always
=======================================================
build: 이미지를 자체 빌드 후 사용. image 속성 대신 사용. 여기에 사용할 별도의 도커 파일이 필요함
django:
build:
context: .
dockerfile: ./compose/django/Dockerfile-dev
=======================================================
command : 도커 실행 후 도커내에 실행할 명령어
version: '2'
services:
app:
image: php:7
volumes:
- ./hello.php:/app/hello.php
command: "php /app/hello.php"
=========================================================================================
Container_name: 생략 시 자동으로 부여. "디렉터리명_서비스명_n". Docker run의 --name옵션과 동일
Ports: 서비스 내부 포트와 외부 호스트 포트를 지정하여 바인드. 외부 노출 포트 지정. Docker run의 -p 옵션과 동일.
Expose: 호스트 운영체제와 직접 연결하는 포트를 구성하지 않고, 서비스만 포트를 노출. 필요 시 링크로 연결된 서비스와 서비스 간의 통신만 사용
Networks: 최상위 레벨의 networks에 정의된 네트워크 이름을 작성. Docker run의 --net(--network) 옵션과 동일
Volumes: 서비스 내부 디렉터리와 호스트 디렉터리를 연결하여 데이터 지속성 설정. Docker run의 -v(--volume) 옵션과 동일
Environment: 서비스 내부 환경 변수 설정. 환경 변수가 많은 경우에는 파일(*.env)로 만들어 env_file 옵션에 파일명을 지정(env_file: ./envfile.env). Docker run의 -e 옵션과 동일
Command: 서비스가 구동 이후 실행할 명령어 작성. Docker run의 마지막에 작성되는 명령어.
Restart: 서비스 재시작 옵션지정(no: 수동 재시작, always: 컨테이너 수동 제어를 제외하고 항상 재시작, on-failure: 오류가 있을 시 재시작). Docker run의 --restart 옵션과 동일
Depends_on: 서비스 간의 종속성을 의미하며 먼저 실행해야 하는 서비스를 지정하여 순서 지정. 이 옵션에 지정된 서비스가 먼저 시작됨.
명령어 | 도커 명령 | 도커 컴포즈 옵션 |
컨테이너(서비스)명 | --name | container_name: |
포트 연결 | -p | ports: |
네트워크 구성 | --net | networks: |
재시작 | --restart | restart: |
볼륨 | -v (--volume) | volumes: |
환경 변수 | -e | environment: |
컨테이너 간 연결 | --link 컨테이너명:서비스명 | depends_on: |
이미지 | 이미지명 | image: |
=========================================================================================
version: "3.9"
services:
mydb:
image: mysql:5.7
container_name: mysql_app
volumes:
- db_data:/var/lib/mysql
myweb:
depends_on:
- mydb
image: wordpress:latest
container_name: wordpress_app
volumes:
- web_data:/var/www/html
volumes:
db_data: {} # { } 생략 가능, 도커가 관리하는 볼륨 생성을 의미
web_data: {}
=========================================================================================
version: "3.9"
services:
myweb:
depends_on:
-mydb
image: wordpress:latest
container_name: wordpress_app
volumes:
- web_data:/var/www/html
- /home/kevin/my_wp/myweb-log:/var/log
=========================================================================================
version: "3.9"
services:
# 첫 번째 서비스 정의
mydb:
# 도커 허브에서 제공하는 mysql:8.0 이미지 선택.
image: mysql:8.0
# 서비스 컨테이너 이름 지정.
container_name: mysql_app
# 최상위 레벨에 정의 mydb_data 볼륨 지정
volumes:
- mydb_data:/var/lib/mysql
# 수동 제어를 제외한 컨테이너 종료 시 자동 재시작
restart: always
# 호스트 운영체제와 컨테이너의 3306 포트를 바인드한다.
# workbench 같은 클라이언트 도구와 연결하기 위해 필요하다.
prots:
- "3306:3306"
# 최상위 레벨에 정의한 backend-net을 기본 네트워크로 지정한다.
networks:
- backend-net
# 서비스가 사용할 환경 변수를 지정한다.
environment:
MYSQL_ROOT_PASSWORD: Admin123!
MYSQL_DATABASE: TESTDB
MYSQL_USER: usertest
MYSQL_PASSWORD: usertestAdmin123!
# 두 번째 서비스를 작성한다.
myweb:
# myweb 서비스가 실행되기 전에 mydb 서비스를 먼저 실행하는 의존성을 설정한다.
depends_on:
- mydb
# wordpress:5.7 이미지를 지정한다.
image: wordpress:5.7
# 서비스 컨테이너 이름을 지정한다.
container_name: wordpress_app
# 호스트 운영체제의 8888 포트와 컨테이너의 80 포트를 바인드한다.
ports:
- "8888:80"
# backend-net으로 mydb 서비스와 동일 네트워크로 지정하고,
# 외부 연결을 위한 네트워크를 위해 fronetend-net 지정을 가정한다.
# docker network connect ~ 명령으로 두 번째 네트워크를 추가하는 것과 같다.
networks:
- backend-net
- frontend-net
# 컨테이너 데이터 지속성을 위해 도커 볼륨 기법과 바인드 마운트 기법을 사용한다.
volumes:
- myweb_data:/var/www/html
- ${PWD}/myweb-log:/var/log
# 수동 제어를 제외한 컨테이너 종료 시 자동 재시작한다.
restart: always
# 서비스가 사용할 환경 변수를 저장한다.
environment:
WORDPRESS_DB_HOST: mydb:3306
WORDPRESS_DB_USER: usertest
WORDPRESS_DB_PASSWORD: usertestAdmin123!
WORDPRESS_DB_NAME: TESTDB
# 도커 컴포즈 애플리케이션이 사용할 네트워크 생성. docker network create와 동일하다.
networks:
frontend-net: {}
backend-net: {}
# 도커 컴포즈 애플리케이션이 사용할 볼륨 생성. docker volume create와 동일하다.
volumes:
mydb_data: {}
myweb_data: {}
=========================================================================================
version: '3.8'
services:
server_web:
image: httpd:2
servcer_db:
image: redis:6-alpine
=========================================================================================
version: '3'
services:
pyfla_app1:
build: ./pyfla_app1
ports:
- "5001:5000"
pyfla_app2:
build: ./pyfla_app2
ports:
- "5002:5000"
pyfla_app3:
build: ./pyfla_app3
ports:
- "5003:5000"
nginx:
build: ./nginx_alb
ports:
- "8080:80"
depends_on:
- pyfla_app1
- pyfla_app2
- pyfla_app3
'IT > 기타' 카테고리의 다른 글
Docker (nginx+tomcat+mysql) - 1 (0) | 2025.02.17 |
---|---|
Docker 설치 방법(yum) (0) | 2025.02.17 |
Docker-compose 설치 방법 (0) | 2025.02.17 |
Dockerfile 작성 예시 - 2 (0) | 2025.02.17 |
Dockerfile 작성 예시 (0) | 2025.02.17 |