목적
작성방법
도커 컴포즈 서비스 시작
docker-compose.yaml 파일의 구성
yaml 파일은 json이나 xml과 같이 key,value로 구성되며, 계층적인 구조를 가지며 파이썬처럼 들여쓰기 문법을 사용한다.
1 Level 내용
version: '3.8' # 파일의 버전 정보(옵션)
x-airflow-common: #Extension Fields(각 서비스 항목에 공통 적용될 항목들을 정의)
services: # 컨테이너에 실행할 서비스 정의
volumes: # 컨테이너에 할당할 volume 정의
networks: # 컨테이너에 연결할 network 정의
&airflow-common-env는 AIRFLOW__CORE__DEFAULT__TIMEZONE 와 같은 설정을 미리 정의를 해놨다.
&airflow-common-depends-on은 redis나 postgres 설정들을 이미 정의를 해놨다. 라는 의미이다.
(<<: *airflow-common)는 아까 &airflow-common-env 에 있는 설정들을 가져오라는 말이다. (env, images, depends_on)을 가져오게 된다.
그런데, 해당 services: 에서 depends_on 설정이 있다. 이 경우,&airflow-common-env 설정에서 가져온 depends_on 설정이 무시가 되고, 덮어쓰게 된다.
따라서, 여기까지 정리하면 redis -> postgres -> airflow-init -> airflow-webserver 순으로 동작하는 것을 알 수 있다.
볼륨에 대한 정보 확인하기
1. 볼륨 리스트 보기:sudo docker volume ls
2. 볼륨 상세 보기:sudo docker volume inspect {volume_id}
postgres의 image는 만약 해당 이미지가 없으면 인터넷에서 알아서 다운로드해온다.
volumes:
- postgres-db-volume:/var/lib/postgresql/data
여기서 postgres-db-volume은 로컬 시스템의 경로 이며, /var/lib/postgresql/data 는 docker 시스템의 경로이다.
이때, postgres-db-volume은
여기에서 봤듯이, 컨테이너와 연결하기 위해서 새롭게 volume을 만들어놓는다.
ports:
5432:5432
왼쪽의 5432는 로컬시스템(호스트)에서 Postgresql 서버에 접속할 수 있는 포트이다. 오른쪽의 5432는 컨테이너 내에 있는 Postgresql 서버가 실제로 동작하고 있는 포트이다.
왼쪽의 5432로 접속하면 로컬시스템의 PostgreSQL과 연결되며, 오른쪽의 5432는 컨테이너 내부의 PostgreSQL 서버가 실제로 리스닝하고 있는 포트이다. 이렇게 함으로써, 로컬시스템과 컨테이너 간의 포트 포워딩이 이루어진다.
expose:
- 6379
expose는 ports와 다르게 외부가 아닌 내부에 있는 컨테이너와 연동할 필요가 있을 때 접속을 할 포트
ex) A 컨테이너 (5432)
B컨테이너 (5433)
두 개의 컨테이너를 연동할 필요가 있을 때, 6379 포트를 통해서 접속을 할 수 있게 된다.
네트워크에 대한 정보 확인하기
1. 네트워크 리스트 보기 :sudo docker network ls
2. 네트워크 상세 보기:sudo docker network inspect {network_id}