docker-compose.yml 작성법 알아보기
공식문서에 더 자세한 내용이 존재(https://docs.docker.com/compose/compose-file/)
Top-level keys that define a section in the configuration file such as build
, deploy
, depends_on
, networks
, and so on, are listed with the options that support them as sub-topics. This maps to the <key>: <option>: <value> indent structure of the Compose file.
기본구조
Docker Compose는 기본적으로 docker-compose.yml
파일을 설정 파일로 사용하는데 일반적으로 프로젝트 최상위 디렉토리에 위치시킨다.
기본적인 구조는 아래와 같다.
version: "3.8"
services:
redis:
# 레디스 설정
db:
# 데이터베이스 설정
web:
# 웹 애플리케이션 설정
networks:
# 네트워크 설정
volumnes:
#볼륨 설정
Docker Compose 설정파일에서 서비스는 독립된 컨테이너에서 돌아가는 애플리케이션의 구성요소를 뜻하다.
예시 파일을 살펴보자.
version: "3.8"
services:
redis:
image: redis:alpine
ports:
- "6379"
networks:
- frontend
deploy:
replicas: 2
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
db:
image: postgres:9.4
volumes:
- db-data:/var/lib/postgresql/data
networks:
- backend
deploy:
placement:
max_replicas_per_node: 1
constraints:
- "node.role==manager"
vote:
image: dockersamples/examplevotingapp_vote:before
ports:
- "5000:80"
networks:
- frontend
depends_on:
- redis
deploy:
replicas: 2
update_config:
parallelism: 2
restart_policy:
condition: on-failure
...
networks:
frontend:
backend:
volumnes:
db-data:
위 설정파일에서 서비스(services)영역에 대한 설정을 자세히 알아보자.
build
build 항목은 해당 서비스 이미지를 빌드하기 위한 Dockfile이 위치하는 경로를 지정하기 위해 사용한다.
docker-compose.yml 파일과 동일한 디렉토리에 위치한 Dockerfile을 사용해서 빌드할 경우
services:
web:
build: .
특정한 경로의 파일(Dockerfile-example)로 빌드하거나 인자를 넘길 경우
services:
web:
build:
context: ./docker
dockerfile: Dockerfile-example
image
데이터베이스나 캐시와 같으 애플리케이션은 이미지 저장소(repoitory)로 부터 이미지를 내려받아서 사용하는 것이 일반적이다.(우리가 따로 빌드를 하지 않으니..) image 항목은 이미지 저장소로부터 내려받을 이미지의 이름과 태그를 명시하는데 사용된다.
services:
db:
image: mysql:5.7
redis:
image: redis
ports
ports항목으 호스트와 컨테이너의 포트를 맵핑시켜주는데 사용이되다. 바인드가 필요한 호스트 포트와 컨테이너 포트를 지정해준다.
services:
redis:
ports:
- "1234:6379"
mysql:
ports:
- "3306:3306"
docker 커맨드 중 -p
옵션과 동일한 기능을 하는듯
volumnes
volumnes항목은 볼륨 설정을 위해 사용된다. 마운트(mount)가 필요한 호스트의 경로와 컨테이너의 경로를 명시해준다.
services:
db:
volumnes:
- db_data:/var/lib/mysql
depends_on
depends_on 항목은 서비스 간 의존 관계를 지정하기 위해 사용된다. 워드프레스 애플리케이션을 올리기전에 데이터베이스가 먼저 올라가야 한다면 아래와 같이 설정을 해야한다.
services:
db:
...
wordpress:
depends_on:
- db
docker 컨테이너 커맨드 중 --link
옵션과 동일한 기능을 하는듯
environment
environment는 환경 변수를 설정하기 위해 사용된다.
services:
db:
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_PASSWORD: wordpress
docker 컨테이너 커맨드 중 --e
옵션과 동일한 기능을 하는듯
기존에 wordpress 컨테이너를 올리기 위한 명령어
$ docker run -d -p 8080:80 \
--link mysql:mysql \
-e WORDPRESS_DB_HOST=mysql \
-e WORDPRESS_DB_NAME=wp \
-e WORDPRESS_DB_USER=wp \
-e WORDPRESS_DB_PASSWORD=wp \
wordpress
는 docker-compose로 작성하면 아래와 같다.
version: '2'
services:
db:
image: mysql:5.7
volumnes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABSE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
volumnes:
- wp_data:/var/www/html
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_PASSWORD: wordpress
volumnes:
db_data:
wp_data:
아래의 블로그를 참고하였습니다.
https://docs.docker.com/compose/compose-file/
'프로그래밍 노트 > 도커' 카테고리의 다른 글
[docker] COPY failed: Forbidden path outside the build context 오류 해결법 (0) | 2020.12.09 |
---|---|
[docker] Dockerfile 작성하기_1(이미지 만들고 배포하기) (0) | 2020.10.19 |
[docker] docker compose 커맨드 (1) | 2020.10.09 |
[docker] 도커 컨테이너(container) 실행하기 (0) | 2020.10.06 |
[docker] 도커(docker) 기본 명령어 (0) | 2020.10.03 |