320x100
320x100

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

 

12. Docker Compose

기존에 Docker 컨테이너간에 서로 역할이 분리되어 하나의 서비스를 위해서 Docker 컨테이너를 몇개 생성하려 한다면 아래와 같이 입력해야 한다 그리고 컨테이너가 서로 연동이 되어야 한다면 컨

kin3303.tistory.com

 

Docker 명령어 RUN / CMD / Entry Point의 차이점에 대해서

RUN / CMD / Entry Point 차이점 RUN RUN 명령어를 사용하면 명령을 실행한 결과가 새로운 Layer로 저장됩니다. 그리고 이 Layer는 베이스 이미지에 추가됩니다. RUN 명령어는 주로 새로운 패키지를 설치하거

show-me-the-money.tistory.com

 

 

 

300x250
728x90