너무 편한 도커 컴포즈ㅣ개념, 커맨드, 프로젝트 활용 경험

신영·2024년 6월 23일

AI Study

목록 보기
14/45

내가 아는 도커는 고래인데 이 문어는 뭐지? 도커 컴포즈라는 친구다.

이번에 프로젝트를 진행하며 처음 알고 활용해 보게 되었는데, 활용해 보니 이렇게 편하니까 쓰는구나 싶었다. 끝나고 보니 가지고 있는 도커책에 소개가 잘 나와 있어 다시 정리해 보고자 한다.


✅ 도커 컴포즈란?

📌 기본 개념

  • 시스템 구축과 관련된 명령어를 하나의 텍스트 파일(정의 파일)에 기재해 명령어 한 번에 시스템 전체를 실행하고 종료와 폐기까지 한 번에 하도록 도와주는 도구
  • 일괄 실행, 종료 및 삭제를 도와줘서 정리할 때도 편리하게 해준다!

    최종 프로젝트의 경우, 두 컨테이너만 활용하여 아래 구조와 같이 구성했지만 볼륨, 네트워크, 컨테이너가 많아질수록 도커 컴포즈는 더욱 빛을 발한다🌈

📌 커맨드

  • up 커맨드 (생성, 시작)
    • docker run 커맨드와 비슷
    • 정의 파일에 기재된 내용대로 이미지를 내려받고 컨테이너를 생성 및 실행
    • 정의 파일에는 네트워크나 볼륨에 대한 정의도 기재할 수 있어서 주변 환경을 한꺼번에 생성할 수 있다.
  • down 커맨드 (정지, 삭제)
    • 컨테이너와 네트워크를 정지 및 삭제
    • 볼륨과 이미지는 삭제 X
    • 컨테이너와 네트워크 삭제 없이 종료만하고 싶다면 stop 커맨드를 사용

📌 도커 컴포즈 vs Dockerfile 스크립트

도커 컴포즈Dockerfile 스크립트
컨테이너와 주변 환경 생성이미지 생성
네트워크와 볼륨 생성네트워크나 볼륨 생성 X

여기까지 보았을 때 '그럼 도커 컴포즈는 여러 컨테이너를 한 번에 관리하는 도구인가?'라는 생각이 들지만, 도커 컴포즈는 컨테이너를 생성 및 삭제할 분 컨테이너 관리 기능은 없다. 컨테이너 관리는 쿠버네티스의 몫!


✅ 도커 컴포즈의 설치와 사용법

📌 도커 컴포즈 설치

sudo apt install -y python3 python3-pip
sudo pip3 install docker-compose

docker-compose -version

📌 [개념] 도커 컴포즈 파일 작성법

파일 이름은 docker-compose.yml이다.

YAML 형식에서는 공백에 따라 의미가 달라지므로 탭은 의미가 없고, 공백 두 개로 맨 처음 들여쓰기를 했다면 그 뒤로도 공백 두 개가 한 단이 되도록 해야 한다.

version: '3'
services:
  컨테이너_이름1:
    image: 이미지_이름
    networks:
      - 네트워크_이름
    ports:
      - 포트_설정
  컨테이너_이름2:
    image: 이미지_이름
networks:
  네트워크_이름1:
volumes:
  볼륨_이름1:
  볼륨_이름2:

📌 [실습] 컴포즈 파일 작성

최종 프로젝트에서 작성한 docker-compose.yml 파일 내용은 다음과 같다.

version: '3.10'

services:
  flask-app:
    build: ./
    container_name: flask-app
    ports:
      - "8080:8080"
    networks:
      - mynetwork
    env_file:
      - .env

  fastapi-app:
    build: ./
    container_name: fastapi-app
    ports:
      - "8000:8000"
    networks:
      - mynetwork
    depends_on:
      - flask-app
    env_file:
      - .env

networks:
  mynetwork:
    driver: bridge

✅ 도커 컴포즈 실행 관련 커맨드

docker-compose -f 정의파일경로 up 옵션
docker-compose -f 정의파일경로 down 옵션
docker-compose -f 정의파일경로 stop 옵션

이 중 up 옵션으로 -d라는 것이 있는데, 백그라운드로 실행하는 옵션이다. 그냥 up 하는 것과 up -d 하는 것의 차이를 비교해 보면 다음과 같다.

upup -d
ꞏ 이 명령어는 정의파일에 명시된 서비스들을 시작합니다.
ꞏ 시작된 컨테이너들의 로그가 현재 터미널에 출력됩니다.
ꞏ 로그를 실시간으로 모니터링 할 수 있으며, 터미널을 닫거나 종료하면 모든 서비스들이 함께 중지됩니다.
ꞏ -d 플래그는 "detached mode"를 의미합니다.
ꞏ 이 명령어는 정의파일에 명시된 서비스들을 백그라운드에서 시작합니다.
ꞏ 시작된 후 터미널이 즉시 반환되며, 로그가 출력되지 않습니다.
ꞏ 컨테이너들은 백그라운드에서 계속 실행되며, 터미널을 닫아도 계속 실행됩니다.

이번 프로젝트에서 얻은 두 가지 큼지막한 것 중 하나인 도커 컴포즈, 필요한 순간에 잘 써보자😋

profile
M.S. Student in Data Science @ Seoul National University

0개의 댓글