Docker Compose란?
Docker compose란 기존의 Docker에서 사용하는 독립환경 시스템인 Container를 멀티테스킹할 수 있는 프로그램으로 여러개의 프로젝트를 독립적으로 운용하고 싶을때 유용한 방법이다.
또한 각각의 컨테이너는 입혀진 이미지(컨테이너의 속성을 결정하는 소프트웨어, 즉 에어플로우의 파일시스템을 가진 컨테이너인지 파이썬 어플리케이션의 파일시스템을 가진 컨테이너인지)에 따라 로컬의 파일시스템과 컨테이너의 파일시스템간 마운팅을 해야 한다.
마운팅을 완료하면 컨테이너의 파일시스템에서 로컬 파일시스템으로 접근할 수가 있다. 따라서 원격 접속의 개념으로 각 컨테이너에 접속해서 프로젝트 작업을 할수 있고 동시에 각 프로젝트에서 내 호스트 PC(로컬) 파일에 접근해서 영향을 줄 수 있다.
추가로 컨테이너의 파일시스템은 무엇을 설치하거나 변경해봤자, 도커를 재실행하면 초기 이미지 설치 상태로 초기화 되기 때문에 의미가 없다.
예를 들어 airflow 컨테이너의 파일시스템에서 파이썬 3.8버전이 기본으로 설치되어 있었는데 여기서 3.12버전을 업그레이드 해봤자 추후 도커 재실행시 원래 버전으로 돌아간다.
그렇기 때문에 에어플로우 컨테이너에서 파이썬을 구동할수 있는데도 파이썬 버전 변경에 대해 장기적으로 고정이 안되므로,
내가 원하는 버전으로 독립적인 파이썬 컨테이너를 만든다.
에어플로우 컨테이너는 에어플로우를 위해서만 사용하고, 코드 설계 전용으로 파이썬 컨테이너를 만드는 이유이다.
한마디로 각 프로젝트마다 퓨어하고 깔끔하면서 독립된 환경 컨테이너로써 사용할 수 있다.
여기서 나의 경우 Airflow와 Mysql, Python3을 각각의 컨테이너로 운용하려고 하는데, 이를 vscode와 연동시킬 수 있다.
다만 vscode에서 python3 컨테이너를 접속한 상태에서는 정상적으로 터미널이 들어가지지만 airflow 컨테이너의 경우 터미널이 안들어가지는 경우가 생기는데 이는 vscode에서 터미널에 접근하는 경로가 잘못되었기 때문이다.
python으로 컨테이너를 만든 후에 그곳에서 내가 실행해야하는 다양한 라이브러리가 있을 것이다. 로컬에서는 모든 라이브러리 설치에 대해 저장이 되지만 컨테이너는 언젠가 초기화되므로 requirements.txt파일이라는 '라이브러리 설치 리스트'를 만들고 이것을 docker-compose.yaml 파일내 서비스 하위 커맨드를 활용해 준다.
여기서 커맨드는 컨테이너가 실행되고 실행될 쉘 명령을 넣는 곳이다.
이곳에 pip install -r 'requirements.txt 경로'를 넣어주면 requirements파일에 적혀 있는 모든 라이브러리가 설치된다.
이렇게 파이썬 컨테이너의 기본적인 라이브러리 커스터마이징을 할 수 있다.
기본적으로 리눅스 터미널에서도 airflow 파일시스템에 접속할때는 docker exec -it <컨테이너_이름> /bin/bash으로 들어간다.
따라서 bin/bash로 들어가야 하는데 에어플로우 컨테이너를 vscode에 연동시켜보면 /sbin/nologin 경로로 들어가서 오류가 난다. 이때 vscode의 기본 설정에서 linux 터미널을 /bin/bash로 바꾸어주면 정상적으로 airflow 컨테이너의 파일시스템으로 터미널을 접속할 수 있다.
'배우는 과정 > Docker' 카테고리의 다른 글
docker compose 스크립트를 실시간 시각화 시키는 방법 (0) | 2025.01.27 |
---|---|
Docker에서 Dockerfile, Docker image, 그리고 각종 도커 API 사용법 (0) | 2024.12.31 |
Docker와 Docker compose의 개념 (1) | 2024.12.17 |
댓글