📝 Reference
📚 도커, 컨테이너 빌드업! - 이현룡
📌 docker compose 를 사용하는 이유
- 컨테이너가 늘어나면 늘어날 수록 docker run 으로 실행해야 할 명령어 수가 많아지며
특히 각각의 컨테이너에 설정할 플래그가 많아질수록 더욱 더 복잡해진다 - 이를 하나로 묶어서 한번에 서비스를 올리고 관리할 수 있도록 해주는 도구가 도커 컴포즈
- 각 컨테이너는 독립된 기능을 가지고 공통 네트워크로 구성되어 컨테이너 간 통신이 쉽다
- 다만 다양한 관리 기능은 없어 실제 운영 환경에서는 쿠버네티스를 사용하는 것이 더 좋다
📜 docker compose 파일 작성
루트 폴더에 docker-compose.yml 또는 docker-compose.yaml 파일을 생성한다
도커 컴포즈 파일은 yml(야믈) 코드로 작성해야 한다
yml 파일은 반드시 두 칸의 들여쓰기를 통해 구분이 된다 tab은 안된다
아래는 현재 프로젝트에서 사용중인 개발용 도커 컴포즈 파일 예시이다
📝 docker-compose.yml
version: '3.7'
services:
redis:
image: redis:alpine
ports:
- '6379:6379'
postgres:
image: postgres:latest
container_name: postgres
restart: always
ports:
- '5432:5432'
env_file:
- .env
networks:
- postgres
pgadmin:
links:
- postgres:postgres
container_name: pgadmin
image: dpage/pgadmin4
ports:
- '8080:80'
# volumes:
# - /data/pgadmin:/root/.pgadmin
env_file:
- .env
networks:
- postgres
networks:
postgres:
driver: bridge
- version : 도커 컴포즈 버전을 명시한다, 버전에 따라 약간의 기능과 옵션의 차이가 있다
- service : 실행시킬 서비스를 정의한다. 컨테이너와 동일하다고 생각하면 편하다
- image : 도커 허브의 공식 이미지를 사용할 경우 지정
- build : Dockerfile 의 경로를 지정한다. 도커 컴포즈 파일과 동일한 경로일 경우 점. 을 찍는다
- context / dockerfile : 경로가 다를 경우 도커 파일 지정
- container_name : (생략가능) 컨테이너의 이름 지정
- ports : 호스트 포트와 서비스 내부 포트 지정
- expose : 서비스 포트만을 노출
- networks : 최상위 레벨의 networks에 정의된 네트워크 이름을 지정
- volumes : 호스트 디렉토리와 서비스 내부 디렉토리를 연결, 데이터 지속성 설정
- environment : 서비스 내부의 환경 변수 설정
- env_file : 환경변수 파일(.env)을 가져와 환경 변수 지정
- command : 서비스 구동 이후 실행할 명령어
- restart : 서비스 재시작 옵션 (always: 수동 종료 제외하고 항상 재시작, on-failure: 오류 시 재시작)
- depends_on : 서비스 간 종속성 지정, 이 옵션에 지정한 서비스가 먼저 시작됨
- network : 해당 이름의 네트워크를 정의한다. 대역은 172.x.x.x 로 할당, 기본 드라이버는 bridge
- volume : 최상위 레벨의 볼륨 지정
📜 자주 사용하는 docker compose 명령어
🚀 docker-compose 또는 docker compose 를 통해 도커 컴포즈를 실행할 수 있다
- docker-compose up : 도커 컴포즈 실행
- docker-compose up -d : 백그라운드로 도커 컴포즈 실행
- docker-compose down : 컨테이너 서비스, 볼륨, 네트워크를 모두 정지시킨 후 삭제
- docker-compose down -v : 외부 볼륨까지 전체 삭제
- docker-compose stop {service} : 특정 컨테이너만 중지
- docker-compose start {service} : 특정 컨테이너만 시작
- docker-compose logs : 어플리케이션 로그 출력
- docker-compose logs -f : 실시간 로그 출력
- docker-compose ps : 도커 컴포즈에 정의된 모든 서비스 컨테이너 조회
- docker-compose config : yml 파일 설정 확인
- docker-compose pause : 컨테이너 일시 정지
- docker-compose unpause : 컨테이너 정지 해제
📜 docker compose 실행
터미널이 멈추는 것을 원치 않으면 반드시 -d 플래그를 붙여서
데몬(백그라운드)으로 실행하자
Windows 나 macOS 환경이라면
꼭 Docker Desktop 실행 후에 도커 컴포즈 명령어 입력하시구요
끝
'🏭 Infra > 🐳 Docker' 카테고리의 다른 글
[Docker] docker compose로 다중 컨테이너 연결 시 Connection to localhost:5432 refused 에러 (0) | 2022.08.07 |
---|---|
[Docker] Dockerfile 명령어로 스프링 프로젝트 도커 이미지 빌드 및 푸시 (0) | 2022.08.05 |