Docker Compose?
간단히 말하면 Dockerfile을 이용하여 생성한 Docker Image를 Services로 묶어 구성을 작성한 Yaml파일을 관리 도구
추가적으로 작성하자면, Dockerfile를 이용하여 구축 시 Docker Run에 상당히 많은 옵션값들을 작성해야 한다
Docker Compose를 이용하면 해당 옵션들을 작성 후 간단한 명령줄로 Docker Container를 생성 할 수 있다
요소들
설정할 수 있는 것들이 너무 많아 모든 것을 정리하지는 않음.
e.g blkio_config, cpu, mem
Expose
컨테이너 간 Port 노출
Host에게 노출되는 것은 아님
port
Host에게 Port 노출
Network
Container 에서 사용할 Docker Networks 지정
Network_mode
Container의 Network 모드 설정
None : Network 미사용
Host : Host의 Network 사용
service:{Name} : 특정 Service에만 접근 허용
CheatSheet
version: "3.7" # compose file format설정.
servies : # services 정의, 클러스터 정의라고 봐도 무관할듯
container_name : # 생성할 container 명
image : Image_Name #사용할 Image
attach : true # 서비스 로그 수집 여부
build : # 아래 옵션을안 쓰고 경로를 작성해도 무관
context: . # Docker file 경로
dockerfile : Dockerfile # Docker file 명
container_name: my-web-container # 컨테이너에 부여할 이름
labels:
# 방식 1
com.example.description: "Accounting webapp"
# 방식 2
- "com.example.description=Accounting webapp"
# 환경 변수
env_file: # 환경 변수 파일 추가
- a.env
- b.env
environment: #환경변수 추가
# 방식 1
EVN_VAL1: VAL1
EVN_VAL2: VAL2
EVN_VAL3
# 방식 2
- EVN_VAL1=VAL1
- EVN_VAL2=VAL2
- EVN_VAL3
restart : unless-stop # 재시작 여부
# 실행
command : # dockerfile CMD Overrides
# 방법 1
sh -c "/script1.sh &&/script2.sh"
# 방법 2
sh -c "
/script1.sh &&
/script2.sh
"
# 방법 3
- sh
- -c
- |
/script1.sh
/script2.sh
entrypoint : # dockerfile entrypoint Overrides
# 종속
depends_on : # 종속관계 추가
containerName : # 종속될 컨테이너
restart : true/false # 종속된 컨테이너 업데이트 시 재 시작
condition : service_healthy # 상태
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 1m30s
timeout: 10s
retries: 3
start_period: 40s
start_interval: 5s
# 네트워크
expose :
"8080"
port :
8080:8080
network_mode : "host"
networks:
- bapa-network
- bapa2-network
Network
Host 에서 생성한 네트워크 혹은 Docker 내부의 네트워크를 사용하기 위해 사용
services :
....
networks :
networName :
driver : driver Name
driver_opts:
driver_val : driver_val # Driver의 옵션 추가
external : true #외부 네트워크 사용
internal : false # 외부와 격리된 독립 네트워크
label : metadata # 해당 네트워크의 메타 정보 저장
name : network name # 특수 문자를 포함한 네트워크 잠조 시 사용
ipam :
driver : ipam DriverName
config :
- subnet: 172.28.0.0/16
ip_range: 172.28.5.0/24
gateway: 172.28.5.254
aux_addresses:
host1: 172.28.1.5
options :
driver_val1: driver_val
Volumes
docker에 추가 volumes을 사용하고 싶으면 아래와 같이 정의하여 사용할 수 있다.
services :
....
volumes:
volumes_name : # 볼륨 명
name : "volumes_name" # volume의 다른 이름을 붙여 사용하고 싶다면 사
driver : drive_name # 사용할 docker volume driver
driver_opts : # docker volume driver 설정, key-value 로 사
key : value
...
external: true/false # 외부 volume 여무, 즉 기존에 생성한 volumes를 사용 할 것인가 ?
labels : # key-values로 구성된 volume의 메타데이터 설정
key : value
...
그 외
# Extension
# 간단히 생각하면 변수 선언이라고 보면된다.
# x-{name} : &{name}
# Superset 예시
x-superset-image: &superset-image apachesuperset.docker.scarf.sh/apache/superset:${TAG:-latest-dev}
x-superset-common: &superset-common
image: apachesuperset.docker.scarf.sh/apache/superset:${TAG:-latest-dev}
depends_on:
- db
- redis
# Fragments
# 간단히 말하면 Extension을 사용하는 것.
# $를 이용하여 생성, *를 이용하여 사용
services :
superset :
<<: *superset-common # superset-common에 선언된것을 모두 사용하겠다는 의미
image: *superset-image # 이와같이 1개만 가져와서 사용할 수 있다.
# interpolation
# 변수를 사용할 대 Default값을 설정하는 느낌이다.
# Trino 이미지 가져오는 예시
# TRINO_IMAGE_NAME 이 변수에 값이있으면 TRINO_IMAGE_NAME를 사용하고 없으면 trinodb/trino:433를 사용하겠다
image: ${TRINO_IMAGE_NAME:-trinodb/trino:433}
# 아래와 같이 작성하면 TRINO_IMAGE_NAME값이 없으면 Compose가 실패한다
image: $$TRINO_IMAGE_NAME
[ Reference ]
개인적으로 공부한 내용 포스팅 중
잘못된 정보는 지적해주시면 좋겠습니다!
'프로그래밍 및 IT > docker' 카테고리의 다른 글
docker (0) | 2023.11.22 |
---|