포스트

Docker Compose 정리

Docker Compose 정리
AI 요약

Docker Compose는 단일 서버에서 여러 도커 컨테이너를 하나의 서비스로 정의하여 묶음으로 관리하는 도구임. 이를 통해 컨테이너 생성을 간소화하고 다양한 환경에서 애플리케이션의 일관된 배포 및 관리를 가능하게 함. 서비스 정의는 YAML 파일을 사용하여 구성함.

도커 이미지

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 라이센스를 따릅니다.