1. version : docker compose 버전, 버전 별로 차이가 있으므로 버전을 정이해주는 것이 좋음.
version: "3"
2. image : 로컬에 이미지가 없다면 docker hub에서 다운로드하여 베이스 이미지로 사용.
services: # 컨테이너의 서비스라는것을 정의
nginx: # [이미지명]:
image: centos:7 # image: [이미지명]:[태그명]
3. build : 이미지를 정의할때 dockerfile을 사용하여 빌드할 수 있음.
# dockerfile이 같은 디렉토리 내에 있으면
# docker-compose.yml
services:
nginx:
build: .
# dockerfile이 다른 디렉토리에 있다면
services:
nginx:
build:
context: /mnt/backup ## Dockerfile이 있는 경로 (절대경로 또는 상대경로)
dockerfile: Dockerfile-agent ## 파일명이 Dockerfile이 아닐 경우 파일명 기입
# dockerfile내에 이미지 정의
# Dockerfile
FROM centos:7
4. command : container가 실행 될 때 수행할 명령어. docker run에서 마지막에 붙는 command와 같음.
# centos의 실행 시킬 프로세스가 없다면 스스로 소명 하므로 계속 떠 있어야 할 조건을 만들어 주어야 함.
services: # 컨테이너의 서비스라는것을 정의
nginx: # [이미지명]:
image: centos:7 # image: [이미지명]:[태그명]
command: tail -f /dev/null # 계속 컨테이너가 떠 있어야 할 조건
# 만약 도커파일을 통해 빌드를 진행 한다면 도커파일내에 CMD 보다 우선 하며 오버라이드 한다.
5. ports : 서비스 포트
# docker-compose.yml
version: "3"
services:
nginx:
build: .
ports:
- "8080:8080"
#또는
- target: 8080 ## 컨테이너 내부 포트
published: 8080 ## 호스트OS에서 공개할 포트
protocol: tcp ## 포트 프로토콜
6. expose: 컨테이너 내부 포트만 정의(컨테이너 - 컨테이너 간 통신)
# docker-compose.yml
version: "3"
services:
nginx:
build: .
expose:
- "8080"
7. depends_on : 서비스 간 종속성 순서
# 하기 예로 redis가 먼저 실행 되고 nginx가 실행 된다.
# docker-comse.yml
version: "3"
services:
nginx:
build: .
depends_on:
- redis
redis:
image: redis
8. environment, env_file : dockerfile의 env 명령과 같이 컨테이너의 환경 변수를 지정
# docker-compose.yml
environment:
- RACK_ENV=devlopment
- SHOW=true
#또는
environment:
RACK_ENV: devlopment
SHOW: 'true'
env_file: .env
#또는
env_file:
- ./common.env
- ./apps/web.env
9. container_name : 컨테이너 이름 지정
# docker-compose.yml
# container_name: [사용할 컨테이너명]
container_name: nginx
10. volumes, volumes_from : dockerfile에서 사용되던 volume과 같이 컨테이너에 볼륨을 마운트
# docker-compose.yml
volumes:
- /var/log/test:/var/log
- ~/configs:/etc/configs/:ro
#또는아래와 같이 log라는 컨테이너로 마운트
volumes_from:
- log
11. devices : 호스트의 장치를 컨테이너에서 사용할 수 있도록 연결
devices:
- "/dev/ttyUSB0:/dev/ttyUSB0"
12. healthcheck : 서비스의 상태를 체크
# 컨테이너가 시작하고 40초 후부터 1분 30 초마다 웹 서버가 10초 이내에
# 기본 페이지를 제공하는 확인
# 실패시 3번 재시도 함
#
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 1m30s
timeout: 10s
retries: 3
start_period: 40s
13. links : docker run의 --link와 같으며 container 끼리 연결 할때 사용. 현재는 network로 대체되어 lagacy.
# [service:alias] 형태로 사용가능
services:
web:
links:
- db
- db:database
- redis
14. network : docker run의 --net 과 같음. docker-compose에서 network를 생성 할 수도 있고 다른container에 생성된 네트워크를 공유 할 수도 있음. docker-compose에 의해 생성된 네트워크는 삭제시에 같이 삭제 됨.
# mynetwork를 bridge 형태로 생성하고 nginx와 centos7을 같은 네트워크로 묶어줌.
version: "3"
services:
nginx:
image: nginx:latest
ports:
- "8080:80"
depends_on:
- centos7
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 1m30s
timeout: 10s
retries: 3
start_period: 40s
networks:
- mynetwork
centos7:
image: ansible/centos7-ansible:latest
command: tail -f /dev/null
networks:
- mynetwork
networks:
mynetwork:
driver: bridge
15. extra_hosts : 컨테이너 내부 /etc/hosts 에 호스트 정보를 추가한다.
version: "3"
services:
nginx:
image: nginx:latest
...
extra_hosts:
- "plo:1.1.1.1"
- "plo2:1.1.1.2"
# 실제 컨테이너 /etc/hosts
1.1.1.1 plo
1.1.1.2 plo2
16. dns : 컨테이너의 커스텀 dns 설정
dns:
- 8.8.8.8
- 8.8.4.4
17. ipam : 생성 될 network의 ip 설정 정보
# subnet 입력시 배열 주의
# "ERROR: Invalid subnet : invalid CIDR address:" <<- 에러 날 수 있음.
networks:
mynetwork:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.28.0.0/16
ip_range: 172.28.0.0/16
gateway: 172.28.0.1
- docker-compose command
# 실행
$ docker-compose up
# 백그라운드 실행
$ docker-compose up -d
# docker compose 파일이 다른 경로에 있을때
$ docker-compose -f <PATH> up -d
# docker compose에 정의되어 이는 서비스 컨테이너를 한번에 정지시키고 컨테이너를 삭제
$ docker-compose -f <PATH> down
# down시 컨테이너 확인
$ docker-compose -f <PATH> ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# 중지
$ docker-compose -f <PATH> stop
# 중지 되어 있는 컨테이너를 다시 올려줌
$ docker-compose -f <PATH> start
# 실행 + 빌드
$ docker-compose up --build
# 로그
# -f 옵션: 실시간 보기
# 특정 service의 로그를 볼수도 있음.
$ docker-compose -f <PATH> logs -f <service_name>
# 실행 중인 컨테이너를 대상으로 명령어를 날릴때
$ docker-compose exec <service_name> <명령어>
$ docker-compose exec centos7 /bin/bash # docker exec -it centos7 /bin/bash 와 같음.
# 실행 중인 컨테이너에 단발성으로 명령어를 날릴때
$ docker-compose run <service_name> <명령어>
# docker compose 설정을 확인 및 검증
$ docker-compose -f <PATH> config
# 실행중인 컨테이너의 프로세스 표시
$ docker-compose top
'Micro Service Architecture > Docker' 카테고리의 다른 글
21. Docker Network - Bridge (네트워크 공유) (0) | 2021.03.24 |
---|---|
20. Docker Network - Bridge (기본) (0) | 2021.03.24 |
18. [docker] Bash Completion (0) | 2021.03.16 |
17. [docker] Private Registry(Harbor) 설치 및 Portainer 연동 (0) | 2021.03.16 |
16. [docker] Portainer 설치 (0) | 2021.03.16 |