Swarm Mode 를 사용하면, 명령어를 사용하여 클러스터 환경에 컨테이너, 볼륨, 네트워크를 배포할 수 있다. 단, 위의 방법을 사용할 경우, 서비스 환경을 조정해야 하는 경우에는 명령을 다시 처음부터 작성해야 하는 등의 불편함이 있다
docker-compose 는 명령어 사용의 불편함을 해결하기 위하여 yml 형태로 환경을 구성하고, 이를 Docker 가 명령으로 변환하여 서비스를 제공해준다
p. 361
version: '3.7'
services:
nginx:
image: nginx
deploy:
replicas: 3
placement:
constraints: [node.role == worker]
restart_policy:
condition: on-failure
max_attempts: 2
environment:
SERVICE_PORTS: 80
networks:
- web
proxy:
image: dockercloud/haproxy
depends_on:
- nginx
volumes:
- /var/run/docker.sock:/var/run/docker.sock
ports: # attach on ingress network 1
- "80:80"
networks: # attach on web network 2 - nginx connect
- web
deploy:
mode: global
placement:
constraints: [node.role == manager]
networks:
web:
external: true
deploy 는 Node 에 대한 설정이다
- placements 는 컨테이너 배치할 Node 들을 지정한다
restart-policy 를 on-failure 로 설정하여, 실패시 재시작하게 정책을 설정한다. max_attempts 를 2 로 설정했기에 restart 는 최대 2 번 시도한다
proxy 는 nginx 의 정보를 확인해야 한다. 이를 위해 manager Node 의 docker.sock 를 mount 해서 proxy 에서 nginx 컨테이너의 정보를 확인할 수 있게 하자
docker stack deploy -c web.yml web
docker stack rm web
docker stack ps web
- 따라서, 100 ~ 103 모두 nginx 페이지에 접속할 수 있다
docker container run -d --restart always -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock --name portainer portainer/portainer