포스트

Docker Compose 정리

도커 이미지

Docker Compose

  • Docker Compose 란 단일 서버에서 여러 개의 컨테이너를 하나의 서비스로 정의해
  • 컨테이너의 묶음으로 관리할 수 있는 작업환경을 제공하는 관리도구이다.

Docker Compose 사용 이유

  • 컨테이너를 하나씩 생성하는 번거로움을 줄일 수 있다.
  • 다양한 환경에서 애플리케이션을 실행 할 때 일관된 환경을 유지할 수 있다.
  • 새로운 서비스나 컴포넌트를 간단히 추가하거나 업데이트 할 수 있다.
  • 여러 환경에서 자동화 된 배포를 구현할 수 있다.

Docker Compose 설치 방법 (Docker 가 설치되어있는 상황)

1
2
3
4
5
6
7
8
9
10
11
# Ubuntu 및 Debian 의 경우
sudo apt-get update
sudo apt-get install docker-compose-plugin

# RPM 기반인 경우
sudo yum update
sudo yum install docker-compose-plugin

# 공통 사항 - 버전을 확인하여 올바르게 설치 되었는지 확인한다.
docker compose version

Docker Docs 에 나오는 예시

도커 이미지

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# 서비스에 대한 정의
services:
  # 서비스 1의 이름은 frontend
  frontend:
    # 이미지는 example/webapp 를 가져온다
    image: example/webapp
    # 포트는 backend의 443 포트를 로컬 호스트의 8043 포트랑 매칭을 하겠다.
    ports:
      - "443:8043"
    # 서비스가 속한 네트워크에 대한 정의
    networks:
      - front-tier
      - back-tier
    # 서비스에 사용되는 설정
    configs:
      - httpd-config
    # 서비스에 사용되는 보안 정보
    secrets:
      - server-certificate

  # 서비스 2의 이름은 backend
  backend:
    # 이미지는 example/database 를 가져온다
    image: example/database
    # 컨테이너와 호스트 간 데이터를 공유하는 볼륨 지정
    volumes:
      - db-data:/etc/data
    networks:
      - back-tier

volumes:
  db-data:
    # 드라이버는 flocker를 사용한다.
    driver: flocker
    # 사이즈는 10Gib이다.
    driver_opts:
      size: "10GiB"

# frontend 에서 사용되는 외부 설정
configs:
  httpd-config:
    external: true

# frontend 에서 사용되는 외부 비밀
secrets:
  server-certificate:
    external: true

# 네트워크들에 대한 정의
networks:
  # The presence of these objects is sufficient to define them
  front-tier: {}
  back-tier: {}

YAML이란?

  • YAML Ain’t Markup Language의 약자
  • JSON, XML과 같이 시스템 간 데이터 교환을 위해 만들어졌으며 Key-Value 구조를 기본으로 한다.
  • 대소문자를 구분하며 구조를 구분할 때는 들여쓰기를 기준으로 한다.
  • 값으로 문자열, 숫자, boolean을 모두 가질 수 있다
  • 주석 표기는 # 으로 표시한다.
  • YAML 파일에서 들여쓰기 할 때 탭은 도커 컴포즈가 인식하지 못하기 때문에 2개의 공백을 이용해 구분한다

Dependency Track 으로 보는 Docker Compose 추가 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
version: '3.7'

# 볼륨에 대한 정의
volumes:
  dependency-track:

# 서비스에 대한 정의
# dependecny track은 먼저 api server가 있는 것을 알 수 잇다.
services:
  dtrack-apiserver:
    # 이미지는 dependencytrack/apiserver 를 기반으로 한다. 
    image: dependencytrack/apiserver
    
    # 포트는 apiserver의 8080 포트를 로컬 호스트의 8081 포트랑 매칭을 하겠다.
    ports:
      - '8081:8080'
    # 볼륨에 대한 정의
    volumes:
      - 'dependency-track:/data'
    # # 부팅시 자동으로 재시작
    restart: unless-stopped

  dtrack-frontend:
    # 이미지는 dependencytrack/frontend 을 기반으로 한다. 
    image: dependencytrack/frontend
    # dtrack-apiserver 가 실행이 완료 된 이후에 실행이 된다.
    depends_on:
      - dtrack-apiserver
    environment:
      - API_BASE_URL=http://localhost:8081
    # 포트는 frontend의 8080 포트를 로컬 호스트의 8080 포트랑 매칭을 하겠다.
    ports:
      - "8080:8080"
    # 부팅시 자동으로 재시작
    restart: unless-stopped

# 출처

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.