도커 A to Z - 도커 컴포즈

김상운(개발둥이)·2022년 10월 1일
0

도커 A to Z

목록 보기
5/5
post-thumbnail

도커 컴포즈란?


docker compose 는 docker 에서 제공하는 추가 도구로 다중 컨테이너의 자동화/관리를 하며 단일 컨테이너에 환경에서도 사용할 수 있다. 즉 멀티 컨테이너 환경에서 구축을 단순화한다.(컨테이너 빌드, 시작, 중지 등)

왜 사용하는지

예시

docker network create shop
docker build -t shop-node .
docker run -v logs:/app/logs --network shop --name shope-web shop-node
docker build -t shop-database
docker run -v data:/data/db --network shop --name shop-db shop-database

도커 명령어를 일일히 사용하면 위처럼 하나하나 입력하여야 한다.

굉장히 번거롭고 추후 옵션을 빠트리거나 다중 컨테이너 환경에서 생각해야할 부분이 너무나 많다. -> 이런 명령어를 자동화하고 다중 컨테이에서 설정을 단순화 하자!

docker-compose 사용하기

프로젝트 설명

mongoDB, react, express 를 활용하는 프로젝트로 DB, frontend, backend 를 컨테이너화 하여 다중 컨테이너 환경에서 서로 통신한다.

docker-compose.yaml

version: "3.8"
services:
  mongodb:
    image: 'mongo'
    volumes:
      - data:/data/db
    env_file: ./env/mongo.env
  
  backend:
    build: ./backend
    ports:
      - '80:80'
    volumes:
      - logs:/app/logs #명명 볼륨
      - ./backend:/app #바인드 마운트
      - /app/node_modules #익명 볼륨
    env_file:
      - ./env/backend.env
    depends_on:
      - 'mongodb' #순서를 정하기 위해
  
  frontend:
    build: ./frontend
    ports:
      - '3000:3000'
    volumes:
      - ./frontend/src:/app/src #바인드 마운트
    depends_on:
      - 'backend' #순서를 정하기 위해
    stdin_open: true #개방형 표준 입력
    tty: true #터미널 생성 이 두개 합쳐서 -it
  #services 에서 사용중인 명명된 볼륨 나열  

volumes:
  data:
  logs:

version: docker-compose 의 버전을 명시

services: 서비스란 곧 컨테이너를(단일, 다중) 의미한다.

image: 로컬에 이미지가 없을 경우 해당 이미지를 도커 허브에서 pull 한다.

volume: 해당 컨테이너에서 사용할 볼륨을 명시한다. 네임드 볼륨을 사용할 경우 맽밑에 volumes: 하위에 이름을 명시한다.

env_file: 해당 컨테이너의 환경변수를 정의한 경로를 표시한다.

MONGODB_USERNAME=max
MONGODB_PASSWORD=secret

.env 파일을 이런식으로 구성되어 있다. 재사용성을 위해 파일화하여 사용한다.

build: 로컬에서 이미지를 빌드하여야 할 경우 Dockerfile 이 있는 경로를 명시한다.

ports: 외부와 도커 환경에서 통신에 사용할 포트를 적는다.

depends_on: 해당 컨테이너가 다른 컨테이너에 의존성을 맺을 경우 해당 컨테이너의 service 이름을 명시한다.

stdin_open: 개방형 표준 입력
tty: 터미널 생성

stdin_open, tty 는 리액트에서 표준입력과 터미널을 필요로 하기 때문에 입력해주어야 한다.

명령어

  • docker-compose up: docker-compose 파일에서 언급된 서비스들을 모두 실행한다.

    • -d: detached 모드에서 실행한다.
    • --build: docker-compose 가 모든 이미지를 재 구축하도록 강제한다.(이미지가 누락된 경우)
  • docker-compose down: 모든 컨테이너와 서비스를 중지한다.

    • -v: 서비스들과 연관된 모든 볼륨을 삭제한다.

주의

  • docker-compose 는 모든 dockerfile 을 대체하지 않는다.
  • docker-compose 는 이미지 또는 컨테이너를 대체하지 않는다.
  • docker-compose 는 다른 호스트머신의 다중 환경에서 적합하지 않다.
profile
공부한 것을 잊지 않기 위해, 고민했던 흔적을 남겨 성장하기 위해 글을 씁니다.

0개의 댓글