2022이전/Docker&Kubernetes
[실습+명령어] Docker Swarm
바로퇴장
2020. 6. 15. 17:37
실제 서버를 운용하는 데 있어서 많은 컨테이너를 관리를 해야한다. 특히, 트래픽 처리할 수 있는 실용적인 시스템을 구축하려면 보다 많은 컨테이너가 각기 다른 호스트에 배치되어 이를 처리 하도록 해야 할 것이다. 이를 위한 첫 번째 대안으로 바로 도커 수웜(Docker Swarm)이다.
도커스웜은 여러 도커 호스트를 클러스터로 묶어주는 컨테이너 오케스트레이션 도구의 한 종류이다.
### 실습 준비하기
- 1대의 manager 노드
- 3대의 worker 노드(worker01~03)
manager : | 211.183.3.100 |
---|---|
woker1 : | 211.183.3.101 |
woker2 : | 211.183.3.102 |
woker3 : | 211.183.3.103 |
-
manager 노드에서 토큰 발행
docker swarm init --advertise-addr 211.183.3.100
-
manager에서 노드에 참여한 호스트들의 상태를 점검한다.
docker node ls
docker swarm leave
: worker가 빠져나올 수 있다.docker node inspect [ID or HOSTNAME]
각 노드의 상세 정보를 출력시킨다.docker node rm [ID or HOSTNAME]
: 지정된 노드를 스웜에서 제외시킨다docker node demote/promote [ID or HOSTNAME]
: 특정 노드를 manger => worker or worker => manager 변경
-
manager 에서 서비스 동작시키기
docker service create --replicas 2 -p 8080:80 --name web nginx docker service ls docker service ps web
211.183.3.100~103:8080 포트를 확인해 보면 nginx가 돌아가는 것을 확인 할 수 있다.
-
도커로 scale out 및 컨트롤 하기
docker service scale web=4 ## 4개의 컨테이너를 활성화하여 scale out을 한다. docker service scale web=1 ## 1개의 컨테이너만 활성화하여 scale in을 한다. docker service rm web ## web 활성화를 다운시킨다.
도커 스웜을 통한 웹서비스 환경 구축
*스택은 하나 이상의 서비스를 그룹으로 묶은 단위로, 애플리케이션 전체 구성을 정의한다.*
service
는 애플리케이션 이미지를 하나밖에 다루지 못하지만, 여러 서비스가 협조해 동작하는 형태로는 다양한 애플리케이션을 구성할 수 있는데 이를 스택이라고 한다.
stack 기능을 사용하기 위해서는 overlay 네트워크 환경을 구축을 해야한다.
-
haproxy 와 컨테이너를 연결하기 위한 overlay 네트워크 생성
docker network create --driver=overlay --attachable web docker network ls
-
manager 노드에서 다음과 같은 web.yml 파일을 작성
version: '3' services: nginx: image: nginx deploy: ##배포 환경 설정 replicase: 3 ##3개를 swarm placement: constarints: [node.role != manager] ## 노드역할이 manager가 아닌 node만 연결 restart_policy: condition: on-failure max_attempts: 3 ##실패시 리스타트 최대 3번 시도 environment; SERVICE_PORT: 80 ##서비스 포트는 80 networks: - web ##네트워크 환경은 web(overlay 설정해둠) proxy: image: dockercloud/haproxy depends_on: - nginx volumes: - /var/run/docker.sock:/var/run/docker.sock ##기본값으로 반드시 설정해줘야 한다. ports: - 8001:80 network: - web deploy: mode: gloabl ##각 노드에 1개씩 배포 placement: ##제한조건 constraints: [node.role == manager] networks: ##네트워크 설정 web: external: true ##외부와의 노출을 허용할 것인가?(default:true)
-
작성된 파일을 이용하여 스택 배포하기
docker stack deploy --compose-file=web.yml web
-
stack 작동확인하기
docker stack ps web