Skip to content

[Study] docker compse 해석

임현교 edited this page May 23, 2023 · 1 revision

목적

프로젝트에서 사용하고 있는 docker-compose 설정값에 대해 1개 라인씩 의미를 해석해본다. 아무래도 문서이다보니 작성되고 있는 날짜 기준 최신 docker-compose에 대한 해석이다. ( 업데이트할 때마다 생각이 난다면 문서도 함께 업데이트 해보도록 하겠다. )

docker-compose

version

  • compose 정의 파일은 버전에 따라 기술할 수 있는 항목이 다르다. 이 버전은 정의 파일 맨 앞에 작성한다.
  • 버전을 명시적으로 정의하지 않으면 1.0으로 작동한다.
  • 여러 개의 compose 정의 파일이나 확장 서비스를 사용하는 경우는 각 파일에서 동일한 버전을 사용해야 하므로 주의해야한다.
Compose 정의 파일 버전 Docker Engine 버전
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
1 1.9.1

container_name

  • docker-compose로 생성되는 컨테이너에 이름을 붙일 때 사용된다.
  • 도커 컨테이너명은 고유해야 하므로 커스텀명을 지정하면 여러 컨테이너로 스케일할 수 없어진다.

image

  • 컨테이너의 바탕이 되는 베이스 이미지를 지정한다.
  • 이미지 이름 또는 이미지ID가 사용된다.
  • 이미지가 로컬에 있으면 그대로 사용하고 없으면 도커 허브로부터 자동으로 받는다.
  • 이미지에 태그가 없으면 latest를 다운 받는다.

ports

  • ports는 컨테이너가 공개하는 포트이다.
  • 호스트OS의 포트와 컨테이너의 포트를 바인딩 해준다.
  • "HostPort번호:ContainerPort번호" 형식으로 저장하거나, 컨테이너의 포트 번호만 지정한다.
  • 컨테이너의 포트 번호만 지정하면 호스트 포트는 랜덤하게 설정된다.
  • 이 명령은 docker-compose up 명령으로 실행할 때만 적용되므로, docker-compose run 명령을 사용하여 실행하는 경우, --service-ports 옵션을 사용해야한다.
  • xx:yy 로 설정할 경우 yaml은 시간 값으로 인지하기 때문에 반드시 "xx:yy"로 정의해야한다.

depends_on

  • 서비스 간의 의존관계를 지정할 때 사용한다.
  • 예를 들어, 웹 서버 컨테이너를 시작하기 전에 DB, Redis 컨테이너를 시작하고 싶을 때 아래와 같이 정의한다.
services:
    webserver:
        build:
        depends_on:
            - db
            - redis
    redis:
        image: redis
    db:
        image: postgres
  • depends_on은 컨테이너 시작 순서만 제어할 뿐 컨테이너상 어플리케이션이 이용 가능할때까지 기다리고 제어하는게 아니다.
  • 의존 관계가 있는 서비스의 준비가 끝날때까지 기다리는게 아니므로 어플리케이션 측에서 대책을 세울 필요가 있다. ( https://docs.docker.com/compose/startup-order/ )

environment

  • 컨테이너 안의 환경변수를 지정한다.
  • yaml 배열 형식 또는 해시 형식 중 하나로 지정할 수 있다.
  • 설정할 환경 변수가 많은 경우, 다른 파일에서 환경 변수를 정의하고 그 파일을 읽는 것이 더 효과적이다.
  • 환경 변수 파일을 읽을 때 env_file: 을 사용한다.
  • env_file이 많은 경우, 여러개를 읽을 수도 있다. ( 파일 지정은 yaml 배열 형식으로 지정한다. )

volumes

  • 컨테이너에 볼륨을 마운트할 때 사용한다.
  • 호스트 측에서 마운트 경로를 지정하려면 "호스트디렉토리경로:컨테이너디렉토리경로" 형식으로 사용한다.
  • 볼륨 지정 뒤에 ro( 읽기 전용 ) 등의 옵션을 지정하면 해당 옵션으로 마운트할 수 있다.
  • ro 옵션은 보통 설정 파일이 저장되거나 수정이 되지 않도록 하는 곳에 지정할 수 있다.
  • 다른 컨테이너가 가진 모든 볼륨을 마운트할 때는 volumes_from:에 해당 컨테이너를 지정한다.

command

  • 컨테이너에서 작동할 명령은 command:, netrypoint:로 지정한다.
  • dockerfile의 CMD, ENTRYPOINT 동일하다.
  • dockerfile에 정의되어 있는 것보다 docker-compose에서 정의하는게 더 우선순위가 된다.

kafka-stack ( environment )

kafka-ui KAFKA_CLUSTERS_0_NAME KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS KAFKA_CLUSTERS_0_METRICS_PORT KAFKA_CLUSTERS_0_SCHEMAREGISTRY KAFKA_CLUSTERS_0_KAFKACONNECT_0_NAME KAFKA_CLUSTERS_0_KAFKACONNECT_0_ADDRESS DYNAMIC_CONFIG_ENABLED

kafka0 KAFKA_BROKER_ID KAFKA_LISTENER_SECURITY_PROTOCOL_MAP KAFKA_ADVERTISED_LISTENERS KAFKA_INTER_BROKER_LISTENER_NAME KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS KAFKA_TRANSACTION_STATE_LOG_MIN_ISR KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR KAFKA_PROCESS_ROLES KAFKA_NODE_ID KAFKA_CONTROLLER_QUORUM_VOTERS KAFKA_LISTENERS KAFKA_CONTROLLER_LISTENER_NAMES KAFKA_LOG_DIRS KAFKA_JMX_PORT KAFKA_JMX_OPTS

schema-registry0 SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS SCHEMA_REGISTRY_KAFKASTORE_SECURITY_PROTOCOL SCHEMA_REGISTRY_HOST_NAME SCHEMA_REGISTRY_LISTENERS SCHEMA_REGISTRY_SCHEMA_REGISTRY_INTER_INSTANCE_PROTOCOL SCHEMA_REGISTRY_LOG4J_ROOT_LOGLEVEL SCHEMA_REGISTRY_KAFKASTORE_TOPIC