본문 바로가기

Docker

[ Docker ] Docker Compose 작성

0. Docker Compose란?

# 여러개의 컨테이너가 하나의 응용 프로그램으로 동작할 때
# 도커 컴포즈를 사용하면 두 개 이상의 컨테이너를 순서를 진행하여 한번에 실행할 수 있음
# 도커 컴포즈 내부 문법이 탭을 인식 못하므로 2개의 공백으로 하위 항목을 구분

# docker compose 내 모든 컨테이너 실행
docker-compose up

# docker compose 내 모든 컨테이너 종료
docker-compose down

# ==================================================
# Docker Compose 파일은 아래와 같이 생성
# ==================================================
# docker-compose.yml

version: "3.8"

services:
  app:
    image: node:12-alpine
    command: sh -c "yarn install && yarn run dev"
    ports:
      - 3000:3000
    working_dir: /app
    volumes:
      - ./:/app
    environment:
      MYSQL_HOST: mysql
      MYSQL_USER: root
      MYSQL_PASSWORD: secret
      MYSQL_DB: todos

  mysql:
    image: mysql:5.7
    volumes:
      - todo-mysql-data:/var/lib/mysql
    environment: 
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: todos

  web:
    bulid:
	context: [ docker file이 있는 경로]
	dockerfile: [ docker file 명(디폴트 DockerFile) ] 
	args:
		arg1: arg1
		arg2: # 인수도 같이 지정 (bool 연산자는 ''로 둘러싸야함)

volumes:
  todo-mysql-data:
# ==================================================

 

1. version

Compose file Version Docker Engine release
3.8 19.03.0+
3.7 18.06.0+
3.6 18.02.0+
3.5 17.12.0+
3.4 17.09.0+
3.3 17.06.0+
3.2 17.04.0+
3.1 1.13.1+
3 1.13.0+
2.4 17.12.0+
2.3 17.06.0+
2.2 1.13.0+
2.1 1.12.0+
2 1.10.0+
# 설치된 도커 엔진 버전 및 도커 컴포즈 버전에 따라 지원하는 콤포즈 파일 포멧 버전이 다르다
# 도커 컴포즈 파일 포멧 버전과 도커 엔진 버전에 대한 호환성은 아래 사이트에서 확인
# https://docs.docker.com/compose/compose-file/compose-versioning/
# 도커 콤포즈 파일 포멧 버전 [ 2.0 ] 이상은 도커 콤포즈 버전 [ 1.27.0 ] 이상 사용 권장 
# e.g. version: '3.9'
version: []

# docker engine version 확인
docker version --format '{{.Server.Version}}'

# docker compose version 확인
docker-compose --version

 

2. services

services:
  서비스_명:
    image: 이미지_이름:태그
    ports:
      - "호스트_포트:컨테이너_포트"
    command:
      - 서비스 실행 커맨드
    environment:
      - 환경변수1=값1
      - 환경변수2=값2
    working_dir:
      - 작업_디렉토리
    volumes:
      - 호스트_디렉토리:컨테이너_디렉토리:옵션
    depends_on:
      - 다른_의존_서비스_명
    build:
    	context: DockerFile_위치_경로
        dockerfile: DockerFile 명(디폴트 DockerFile)
      
# e.g. volumes의 옵션은 읽기 쓰기 가능에대한 옵션을 정의 가능
services:
    volumes:
      - 호스트_디렉토리:컨테이너_디렉토리:ro

 

3. volumes

volumes:
  [전역 사용 볼륨 정의 명]:
    driver: [볼륨 경로 드라이브 명 e.g. local, nfs, ..]
    driver_opts:
      type: [local 옵션을 사용할 경우 로컬 볼륨 정의 e.g. bind, none ]
      o: [ 드리이브에 대한 옵션 정의 e.g. bind, ...]
      device: [ 호스트 드라이브 매핑 경로 제공 ]

# e.g. 
volumes:
  backend_logs:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /var/log/backend_logs

# 정의한 볼륨 리스트를 확인할 수 있다고 함
docker volume ls

# 좀 더 상세한 볼륨 정보 확인
docker volume inspect [VOLUME_NAME]

'Docker' 카테고리의 다른 글

[ Docker ] Nginx 헤더 취약점 방지  (0) 2024.05.10
[ Docker ] Jupyter Notebook 설치  (0) 2024.04.05
[ Docker ] Dockerfile 작성  (0) 2024.01.21
[ Docker ] Docker 명령어 활용  (0) 2024.01.07
[ Docker ] 에러 대응 리스트  (0) 2023.03.22