-
Notifications
You must be signed in to change notification settings - Fork 0
[Study] docker compse 해석
프로젝트에서 사용하고 있는 docker-compose 설정값에 대해 1개 라인씩 의미를 해석해본다. 아무래도 문서이다보니 작성되고 있는 날짜 기준 최신 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-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