YAML 문법 작성법
: 도커 컴포즈 파일은 yaml 포맷으로 작성
ㆍYaml 파일 작성법
: https://2mukee.tistory.com/232
도커 컴포즈 최상위 Key
ㆍversion
: 도커 파일의 버전을 나타내는 Key (필수요소)
: 3이상 작성하는 것을 권장
ㆍservices
: 도커 컴포즈를 통해 실행시킬 서비스 정의 (필수요소)
: 서비스안에 컨테이너를 정의
ㆍnetworks
: 브릿지, 컨테이너 등 컴포즈 내에서 사용될 네트워크 인터페이스 정의
services키의 하위 key
ㆍimage <필수요소>
: 컨테이너의 기반이 되는 베이스 이미지
: 로컬에 이미지가 없으면 원격저장소에서 pull 수행
webserver1:
image:centos
webserver2:
image:node:14.17.6
ㆍbuild <image가 없으면 필수요소>
: 컨테이너의 기반이 되는 베이스 이미지를 빌드할 Dockerfile
: Dockerfile의 경로를 입력
# docker-compose.yml 파일 사용시
services:
webapp:
build:./compose-dir
# 다른 대체 yaml 파일 사용시
services:
webapp:
build:
context:./compose-dir
dockerfile: hello
# 도커 파일 내부에 파라미터가 있는 경우
## Dockerifle
ARG build_no
RUN echo "Build number: $build_no"
## docker-compose.yml
services:
webapp:
build:
context:./compose-dir
args:
- build_no
ㆍcommand
: 컨테이너 내에서 동작할 커맨드 지정
: 도커 파일 내부에 CMD가 이미 있는경우 이를 Override
webserver:
image: centos
command: node app.js
ㆍentrypoint
: 컨테이너 내에서 동작하는 엔트리 포인트 지정
※ 엔트리포인트
: 제어가 운영체제에서 프로그램으로 이동하는 것
: 컴포즈 파일이나 도커 파일에 작성시 고정적인 명령어로 작동
: 지정한 명령이 언제나 실행되기 때문에 특정 루틴을 실행해야할 경우 유용하게 사용가능
ㆍlinks
: 해당 컨테이너를 다른 서비스들과 연결
: 해당 컨테이너의 /etc/hosts 파일에 내용이 추가되어 다른 컨테이너에 접근 가능
: depends_on과 같은 방식으로 서비스 간 종속성 표현
: 명시한 서비스 부터 실행
ㆍextra_links
: compose 외부에 있는 서비스나 컨테이너와 연결
ㆍextra_hosts
: 컨테이너의 /etc/hosts에 외부 호스트 정보 추가
ㆍports
: 호스트OS와 컨테이너간의 포트포워딩 설정
: 호스트와 통신하는 포트
ㆍexpose
: 호스트에는 노출하지 않고 연결된 서비스끼리만 접근 가능한 포트 입력
ㆍvolumes
: 현재 디렉터리를 볼륨으로 마운트 할 때 컨테이너에서 사용할 경로
: 호스트OS의 디렉터리를 컨테이너에 마운트
: type / source / target 등의 속성을 가짐
: readonly, ready write 등 지정 가능
ㆍvolumes_from
: 다른 서비스나 컨테이너의 전체 볼륨을 마운트
ㆍdepends_on
: 서비스 간의 종속성
: 지정한 서비스가 실행된 후 해당 서비스 실행
ㆍdeploy
: 도커 스웜에서 사용되는 어려 옵션들을 정의
ㆍsecrets
: 패스워드 등의 정보 저장
: 도커 컴포즈 3.1이상 버전에서 사용가능
: CLI에서 sercret 오브젝트 생성 필요
version: "3.1"
services:
psql:
image: postgres
secrets:
- psql_user
- psql_password
environment:
POSTGRES_PASSWORD_FILE: /run/secrets/psql_password
POSTGRES_USER_FILE: /run/secrets/psql_user
secrets:
psql_user:
external: true
psql_password:
external: true
ㆍenvironment
: 컨테이너 내 환경변수 지정
ㆍenv_file
: 환경변수가 저장된 파일을 가져와 환경변수로 지정
ㆍdevices
: 호스트의 장치와 컨테이너를 연결
ㆍdns
: 컨테이너에서 사용할 DNS 서버 지정
ㆍdns_search
: 컨테이너에서 사용할 DNS 검색 도메인 지정
ㆍnetwork-mode
: 컨테이너의 네트워크 모드 설정
# Docker 네트워크 브리지에 새 네트워크를 생성
network_mode: "bridge"
# 컨테이너 안에서 호스트의 네트워크를 그대로 사용
network_mode: "host"
# 네트워크를 사용안함
network_mode: "none"
# 다른 서비스의 네트워크를 함께 사용
network_mode: "service:[service name]"
# 다른 컨테이너의 네트워크를 함께 사용
network_mode: "container:[container name/id]"
ㆍhealthcheck
: 서비스의 상태 체크
: (예시) 컨테이너가 시작되고 언제부터 일정한 간격으로 웹 서버가 페이지를 제공하는지 등 확인
: interval / timeout / retries / start_period 등 속성을 가짐
networks 키의 하위 key
ㆍdriver
: 네트워크 인터페이스의 모드 설정
: bridge / overlay / host / none
Docker compose 예시
version: '3.8'
services:
main:
image: 2mukee/mh_main_image:1.61
ports:
- 443:17260
depends_on:
- db
db:
image: 2mukee/mh_db_image:1.20
expose:
- 27107:27107
- 27106:27106
api:
image: 2mukee/mh_api_image:1.31
depends_on:
- main
- db
env_file:
- ./mh-db.env
Refference
'Container > Docker Compose' 카테고리의 다른 글
도커 컴포즈와 스택의 차이 (0) | 2021.11.05 |
---|---|
다시 정리해보는 Docker - Docker Compose 편 (0) | 2021.10.19 |
Yaml 작성법 (0) | 2021.09.21 |
yml / yaml 기초 및 작성법 (0) | 2021.09.19 |
서버 재부팅 시 도커 컨테이너가 자동으로 실행되게 만들기 (0) | 2021.09.09 |