Docker Compose 사용하기
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
댓글남기기