Docker Compose 사용하기

1 분 소요

Docker Compose는 왜 쓸까?

Docker Compose를 안쓰면 불편하다.

이미지 빌드 , 컨테이너 생성 의 일련의 과정을 docker 명령어로만 수행한다면 일일이 타이핑하기 수고스럽고 특히나 개발자가 여러명인 프로젝트에서 많이 번거로울 것이다.

일련의 과정들을 docker-compose.yml 파일에 기술해놓고 docker comopse up 명령어로 컨테이너를 올리고 docker compose down 명령어로 컨테이너를 내리면된다. 그것만 해주면 번거롭게 여러줄 들어가 있는 docker 명령어를 따로 배포할 필요가 없어진다.

Visual Studio Code를 이용한 Docker Compose

Docker Compose를 쓰면 편한데 Visual Studio Code를 이용하면 더 편하다.

Visual Studio Code에 Docker Extentions을 설치하고 사용하면 된다.

이 동영상을 참고하자.

Docker Compose 설치여부 확인

기본적으로 Docker Desktop에는 포함되어 설치된다. 다음 명령어로 설치여부를 알 수 있다.

docker-compose --version

Windows Server 2016에서는 다음과 같이 설치한다.

  • PowerShell을 시작한다. (관리자 권한으로 실행)

  • PowerShell에서 GitHub에 TLS1.2가 필요하므로 다음을 실행한다.

    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
    
  • 다음 명령을 실행하여 현재 안정 버전의 Compose (v1.25.0)를 다운로드한다.

  Invoke-WebRequest "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-Windows-x86_64.exe" -UseBasicParsing -OutFile $Env:ProgramFiles\Docker\docker-compose.exe

Docker Compose Example

version: '3.7'

services:
  
  message-queue:
    image: dockeronwindows/ch05-nats:2e
    networks:
      - nd-net

  elasticsearch:
    image: sixeyed/elasticsearch:5.6.11-windowsservercore-ltsc2019
    environment: 
      - ES_JAVA_OPTS=-Xms512m -Xmx512m
    volumes:
      - es-data:C:\data
    networks:
      - nd-net

  reverse-proxy:
    image: sixeyed/traefik:v1.7.8-windowsservercore-ltsc2019
    command: --docker --docker.endpoint=npipe:////./pipe/docker_engine --api
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - type: npipe
        source: \\.\pipe\docker_engine
        target: \\.\pipe\docker_engine      
    networks:
      - nd-net

  kibana:
    image: sixeyed/kibana:5.6.11-windowsservercore-ltsc2019
    labels:
      - "traefik.frontend.rule=Host:kibana.nerddinner.local"
    depends_on:
      - elasticsearch
    networks:
      - nd-net

  nerd-dinner-db:
    image: dockeronwindows/ch03-nerd-dinner-db:2e
    env_file:
      - db-credentials.env
    volumes:
      - db-data:C:\data
    networks:
      - nd-net

  nerd-dinner-save-handler:
    image: dockeronwindows/ch05-nerd-dinner-save-handler:2e
    depends_on:
      - nerd-dinner-db
      - message-queue
    env_file:
      - db-credentials.env
    networks:
      - nd-net

  nerd-dinner-index-handler:
    image: dockeronwindows/ch05-nerd-dinner-index-handler:2e
    environment: 
      - Elasticsearch:Url=http://elasticsearch:9200
      - MessageQueue:Url=nats://message-queue:4222
    depends_on:
      - elasticsearch
      - message-queue
    networks:
      - nd-net

  nerd-dinner-api:
    image: dockeronwindows/ch05-nerd-dinner-api:2e
    labels:
      - "traefik.frontend.rule=Host:api.nerddinner.local"
    env_file:
      - db-credentials.env
    depends_on:
      - nerd-dinner-db
    networks:
      - nd-net

  nerd-dinner-homepage:
    image: dockeronwindows/ch03-nerd-dinner-homepage:2e
    labels:
      - "traefik.frontend.rule=Host:nerddinner.local;Path:/,/css/site.css"
      - "traefik.frontend.priority=10"
    networks:
      - nd-net

  nerd-dinner-web:
    image: dockeronwindows/ch05-nerd-dinner-web:2e
    labels:
      - "traefik.frontend.rule=Host:nerddinner.local;PathPrefix:/"
      - "traefik.frontend.priority=1"
      - "traefik.backend.loadbalancer.stickiness=true"
    environment: 
      - HomePage:Enabled=false
      - DinnerApi:Enabled=true
    env_file:
      - api-keys.env
      - db-credentials.env
    depends_on:
      - nerd-dinner-db
      - message-queue
    networks:
      - nd-net

networks:
  nd-net:
    external:
      name: nat

volumes:
  es-data:
  db-data:

Docker Compose 명령어

#빌드
docker-compose build

#올리기
docker-compose up

#내리기
docker-compose down

참고 URL

https://docs.docker.com/compose/install/

https://docs.microsoft.com/ko-kr/dotnet/architecture/microservices/multi-container-microservice-net-applications/multi-container-applications-docker-compose

https://seulcode.tistory.com/238

https://code.visualstudio.com/docs/remote/containers

댓글남기기