[docker] docker Swarm이란?

김우경·2021년 4월 20일
1

ci/cd 찍먹

목록 보기
6/13

Docker Compose와 Docker Swarm

  • Docker Compose : 동일 host에 2개 이상의 컨테이너 운영
  • Docker Swarm : 컨테이너들을 클러스터 & 스케줄
    -> 한개의 host에 같은 서비스을 하는 컨테이너 인스턴스 여러개 만들어서 분산
    -> 전체 컨테이너 클러스터를 하나의 virtual 단일 컨테이너 관리
    -> 여러 호스트에서 다수의 컨테이너를 운영 & 필요에 따라 auto-scaling 기능
    -> 현재는 Docker Swarm의 점유율이 많이 떨어졌고, google의 Humanity가 주로 쓰임

동작 방식

  • 하나의 leader machine + 다수의 worker machine
    -> 잘 구축된 CDN을 기반으로 동작함
    (공부해서 추가예정)

swarm cluster 실습

creating a swarm cluster

1. worker 인스턴스 생성

[ec2] AWS ec2 가입부터 인스턴스 생성까지 글에서 포스팅했던것처럼 worker machine으로 사용할 인스턴스를 하나 더 만들어준다.

기존에 사용하던 인스턴스를 master, 새로 생성한 인스턴스를 worker로 실습을 진행한다.

2. 보안규칙 추가

: worker와 master는 서로 독립적인 machine이므로 두 machine 사이의 통신을 위해 port를 열어준다.
-> worker로 사용할 instance, master로 사용할 instance 둘 다 추가해준다.

3. Leader machine으로 사용할 인스턴스에서 Swarm Cluster 만들기

sudo docker swarm init --advertise-addr={인스턴스의 private IP}
-> worker node에도 동일한 이미지가 있어야 실행 가능 & 이름도 같아야함

-> worker node에서 수행할 명령어가 안내됨
docker swarm join --token SWMTKN-1-3u2i7dnuhjgy2viaqsqti4owhqps4i03crgn107gcjdzasxrw0-bd9sn4zmf603bxm02dqqfxkqi 172.31.14.117:2377

4. Worker node에서 Swarm join하기

-> 에 앞서서 worker machine에 docker를 먼저 설치해준다.
sudo apt-get update
sudo apt-get install docker.io
도커 설치 후, 위의 join 명령을 입력한다.

5. Master node에서 맞게 join됐는지 확인

sudo docker node ls

Swarm 서비스 실행하기

: docker swarm에서 app 배포하기

1. Worker node에서 image

작성한 dockerfile을 이용해서 master node와 같은 이름을 가진 image를 만든다.

2. Service 생성

sudo docker service create --name {서비스이름} --replicas {몇개의 container?} -p {port mapping} {image name}

3. 컨테이너 맞게 돌아가는지 확인

sudo docker ps로 확인하면 왼쪽 master node에서 2개, 오른쪽 worker node에서 2개가 돌아가고 있음을 알 수 있다.

worker host와 leader host 모두 잘 돌아감을 알 수 있다.

-> swarm 잘 돌아가는지 확인?
sudo docker rm -f $(sudo docker ps -a -q)로 container를 다 지워도 처음에 설정한 5개의 container를 유지하기 위해 새 container가 생겨서 서비스가 계속 돌아감

4. Service Scale-up

sudo docker service scale {서비스이름}={container개수}

5. 생성한 서비스 지우기

sudo docker service rm {서비스이름}

6. Swarm 끝내기

  • on worker : sudo docker swarm leave
  • on master : sudo docker swarm leave --force
profile
Hongik CE

0개의 댓글