Docker Compose is a tool for defining and running multi-container applications. It is the key to unlocking a streamlined and efficient development and deployment experience.
Docker Compose는 '다중 컨테이너 애플리케이션'을 정의하고 실행하는 도구입니다. 간소화되고 효율적인 개발 및 배포 환경의 핵심적입니다.
YAML 파일을 작성하여 서비스, 네트워크 및 볼륨을 쉽게 설정하고 관리할 수 있습니다. production, staging, development, test, CI workflow 등 모든 환경에 대한 작업을 수행합니다. 또한, 애플리케이션의 라이프사이클을 관리하기 위한 명령어도 포함되어 있습니다.
과거에는 Docker Compose가 독립적인 CLI 도구였지만, 현재는 Docker의 공식 플러그인 형태로 통합된 것으로 알고 있습니다. 명령어에서도 차이가 있는데, docker-compose가 예전 버전, docker compose는 현재 공식 플러그인 버전입니다.
서비스 시작, 중지, rebuild
실행 중인 서비스 상태 확인
실행 중인 서비스의 로그 출력 스트리밍
일회성 명령 실행
(1) Compose의 주요 이점
간편한 제어
하나의 YAML 파일을 통해 다중 컨테이너 정의 및 관리
다양한 서비스를 조정하는 작업 간소화
효율적인 협업
구성 파일을 공유하기 쉽다! → 협업 용이
빠른 개발
컨테이너 생성에 대한 캐시를 관리
변경되지 않은 서비스 재시작 시 기존 컨테이너 재사용
이식성
Compose 파일(.yaml)에서 변수 사용 가능
변수 사용을 통해 다양한 환경/사용자에 맞게 커스터마이징 가능
광범위한 커뮤니티
활발한 커뮤니티! 풍부한 리소스! 튜토리얼!
지속적인 개선!
(2) Compose의 일반적인 사용 사례
ⓐ 개발 환경
애플리케이션이 개발되고 실행될 격리된 환경 구성에 적합
애플리케이션의 모든 서비스(데이터베이스, 캐시, 웹 서비스 API 등) 간 종속성 문서화 효과까지! (.yaml 파일)
ⓑ 자동화 된 테스트 환경
격리된 테스트 환경 구성에 적합
CD/CI
자동화 된 end-to-end 테스트에 적합한 환경이 필요한데..
Compose를 이용하면 이런 환경을 생성하고 파괴하기에도 편하다!!
2. Docker Compose 설치
저는 AWS EC2의 Ubuntu 인스턴스에서 진행하였습니다!
docker가 이미 설치된 상황에서, 해당 docker 버전에 맞는 docker compose를 설치하기 위해 다음 과정을 진행했습니다
proxy_pass: '/static/'을 제외한 모든 요청은 web 서비스의 8000번 포트로 전달
(web은 docker-compose.yml에서 설정한 Compose service 이름!!)
proxy_set_header: 원래 요청의 호스트명을 유지하고(Host $host;), 웹 앱이 요청자의 IP 등 정확한 정보를 받을 수 있게 설정(X-Real-IP $remote_addr; X-Forwarded-For $proxy_add_x_forwarded_for;)
사실 nginx 파일 설정 내용은 아직 모르는 게 참 많습니다.. 계속계속 공부할 내용이 나옵니다..
일단은, docker로 관리하던 Django 프로젝트에
nginx와 gunicorn을 이용한 배포에도 Docker로 관리를 하고 싶어서 시도한 내용이었는데, 성공적이었습니다!!