섹션8: 도커 컴포즈 yaml 해석

류홍규·2023년 8월 15일
0

airflow

목록 보기
11/18
post-thumbnail

1. 도커 컴포즈 복습

  • 목적

    • 1개 이상 도커 컨테이너 생성시 스크립트 하나로 컨테이너들의 설정을 관리할 수 있도록 해주는 Docker의 기능 중 하나
  • 작성방법

    • :docker-compose.yaml 파일에 컨테이너들의 설정 내용을 입력한다.
  • 도커 컴포즈 서비스 시작

    • yaml 파일이 있는 위치에서 sudo docker compose up 명령 입력 (기본적으로 Docker 서비스가 설치되어 있어야 한다.)

2. 도커 컴포즈 해석

  • docker-compose.yaml 파일의 구성
    yaml 파일은 json이나 xml과 같이 key,value로 구성되며, 계층적인 구조를 가지며 파이썬처럼 들여쓰기 문법을 사용한다.

  • 1 Level 내용

version: '3.8' # 파일의 버전 정보(옵션)
x-airflow-common: #Extension Fields(각 서비스 항목에 공통 적용될 항목들을 정의)
services: # 컨테이너에 실행할 서비스 정의
volumes: # 컨테이너에 할당할 volume 정의
networks: # 컨테이너에 연결할 network 정의
  • x-airflow-common: 공통 지정할 항목을 &를 붙여서 지정

&airflow-common-env는 AIRFLOW__CORE__DEFAULT__TIMEZONE 와 같은 설정을 미리 정의를 해놨다.
&airflow-common-depends-on은 redis나 postgres 설정들을 이미 정의를 해놨다. 라는 의미이다.

  • services: 컨테이너에 올릴 서비스 지정

(<<: *airflow-common)는 아까 &airflow-common-env 에 있는 설정들을 가져오라는 말이다. (env, images, depends_on)을 가져오게 된다.

그런데, 해당 services: 에서 depends_on 설정이 있다. 이 경우,&airflow-common-env 설정에서 가져온 depends_on 설정이 무시가 되고, 덮어쓰게 된다.

  • depends_on: 컨테이너들의 실행 순서를 정의하는데 쓰인다.

따라서, 여기까지 정리하면 redis -> postgres -> airflow-init -> airflow-webserver 순으로 동작하는 것을 알 수 있다.


  • volumes: 컨테이너와 연결하기 위한 볼륨 정보

    볼륨 이름이 정의가 되었다.

볼륨에 대한 정보 확인하기
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을 만들어놓는다.

  • 이 부분이 중요한 이유는,
    • 컨테이너 재시작시, 컨테이너 안에 있는 값들은 초기화가 되기 때문이다.
    • 따라서, docker에서 postgresql가 저장되는 영역로컬 파일 시스템으로 저장해놓는다.

ports:
 5432:5432

왼쪽의 5432는 로컬시스템(호스트)에서 Postgresql 서버에 접속할 수 있는 포트이다. 오른쪽의 5432는 컨테이너 내에 있는 Postgresql 서버가 실제로 동작하고 있는 포트이다.

왼쪽의 5432로 접속하면 로컬시스템의 PostgreSQL과 연결되며, 오른쪽의 5432는 컨테이너 내부의 PostgreSQL 서버가 실제로 리스닝하고 있는 포트이다. 이렇게 함으로써, 로컬시스템과 컨테이너 간의 포트 포워딩이 이루어진다.

  • 즉, 로컬에서 PostgreSQL서버에 접속하려면 호스트의 IP주소와 왼쪽포트를 사용하여 접속한다.
  • 컨테이너 내부 PostgreSQL에 접속하려면 컨테이너의 IP주소와 오른쪽 포트를 사용하면 된다.
expose:
	- 6379

expose는 ports와 다르게 외부가 아닌 내부에 있는 컨테이너와 연동할 필요가 있을 때 접속을 할 포트
ex) A 컨테이너 (5432)

B컨테이너 (5433)

두 개의 컨테이너를 연동할 필요가 있을 때, 6379 포트를 통해서 접속을 할 수 있게 된다.


  • networks: 컨테이너의 network 정보를 구성한다.

네트워크에 대한 정보 확인하기
1. 네트워크 리스트 보기 : sudo docker network ls
2. 네트워크 상세 보기: sudo docker network inspect {network_id}

profile
공대생의 코딩 정복기

0개의 댓글