Cloud/Docker

Docker compose 작성하는 방법과 명령어

jheaon 2024. 7. 25. 11:59

 


Docker compose

도커 컴포즈는 단일 서버에서 여러개의 컨테이너를 하나의 서비스로 정의하여 컨테이너의 묶음으로 관리할 수 있는 작업환경을 제공하는 관리도구를 의미한다. 여러 개의 컨테이너가 하나의 어플리케이션으로 동작할 때 도커 컴포즈를 사용하지 않는다면 일일이 하나씩 컨테이너를 만들어야하는데 해당 방법으로 한다면 관리가 쉽지 않다. 

 

이런 단점을 보완하기 위해서 나온 것이 도커 컴포즈이며 이를 통해 여러개의 컨테이너의 옵션과 환경을 정의하는 파일을 읽어 컨테이너를 순차적으로 생성하는 형식으로 간편하게 여러개의 컨테이너를 관리 할 수 있다.

 

아래는 도커 컴포즈 파일의 예시이다.참고로 yaml 파일은 뛰어쓰기 2칸을 기준으로 영역을 구분한다. 

 

🐋 docker-compose.yml

version: "3.8"
services:
  mongodb:
    image: "mongo"
    volumes:
      - data:/data/db
    # environment:

    env_file:
      - ./env/mongo.env
    # networks:
    # - networkName
  backend:
    build: ./backend
    restart: always
    ports:
      - "80:80"
    volumes:
      - logs:/app/logs
      - ./backend:/app
    env_file:
      - ./env/backend.env
    depends_on:
      - mongodb
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    volumes:
      - ./frontend/src:/app/src
    stdin_open: true
    tty: true
    depends_on:
      - backend


volumes:
  data:
  logs:
  • version : 도커 컴포즈의 버전을 지정한다. 최신 버전은 3.8 이다. 
  • services : 컨테이너들을 제공할 서비스(vcb)를 정의한다. 
  • build : 해당 이미지를 빌드하기 위한 dockerfile 경로를 적는다 만약에 경로에 여러 이미지 파일이 있어 그 중 어떤 이미지를 지목하여 사용하려고 한다면 아래와 같이 코드를 작성한다.

    build:
      context: ./app
      dockerfile: Dockerfile

    context : 도커 파일이 있는 경로
    dockefile : 도커 파일 이름

  • image : 직접 개발하지 않는 db나 캐시같은 경우에 이미지를 직접 빌드하는 대신 저장소로 부터 이미지를 내려받아 사용한다.
  • ports : 외부로 노출시킬 포트의 맵핑을 명시한다.
  • restart: 컨테이너의 재시작 정책을 지정한다. 
  • depends_on : 서비스간의 의존관계를 지정하기 위해 사용한다. 예를 들어서 backend 컨테이너가 올라오기전에 mongodb가 먼저 올라와야 함으로 backend에 depends_on : mongodb 을 사용 할 수 있다. 
  • env_file : .env 파일을 사용하기 위한 경로 지정
  • stdin_open, tty : 입출력 허용을 의미 docker 을 실행할때 -it 옵션과 같다. 
  • volumes : 볼륨 설정에 사용한다.
  • network : 네트워크 

참고로 도커 컴포즈로 만들어진 컨테이너들은 자체적인 네트워크를 형성하고 있어서 network 설정을 안해줘도 되지만 다른 네트워크와의 연결을 하고 싶다면 networks: 을 사용하여 표기 한다. 

 

 

 

 

 

Docker compose 터미널 명령어

  • docker compose up: 컴포즈 파일을 실행한다. 
  • docker compose build: dockerfile을 기반으로 이미지를 빌드하고, 정의된 서비스에 따라 컨테이너를 시작한다. 
  • docker compose down: 실행중인 서비스를 중지하고, 네트워크 빛 볼륨을 제거한다. 
  • docker logs: 서비스 로그를 확인한다. 
  • docker compose restart: 모든 서비스를 재시작한다. 

'Cloud/Docker'의 다른글

  • 현재글 Docker compose 작성하는 방법과 명령어

관련글