AWS에서 EC2 인스턴스에 Docker-Swarm 만들기
안녕하세요.
DSG 웹서비스부문 개발 2팀 사원 손다연입니다.
[챕터 1]에서 배운 Docker-machine으로 EC2 인스턴스 노드까지 생성이 잘 되었나요?
이번 챕터는 그 노드로 Docker-Swarm
을 만들어보도록 합시다.
목차는 다음과 같습니다.
1. Node중 하나를 Manager로 만들기
2. 나머지 Node들을 Worker로 만들기
0. 생성한 모든 Node에 docker 다운받기
챕터 1에서 만든 노드 3개에 docker를 설치해야합니다.
Docker, Docker-compose, Docker-machine을 모두 설치하도록 합시다.
[챕터 1] 의 3. 4. 5. 번을 참고하세요.
1. Node중 하나를 Manager로 만들기
저번 챕터에서 만들었던 노드들이 기억 나시나요?
명령어를 사용해서 다시 한 번 확인하겠습니다.
Node 확인하기
[ec2-user@ip-172-31-18-132 ~]$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
aws-node1 - amazonec2 Running tcp://3.81.226.168:2376 v19.03.1
aws-node2 - amazonec2 Running tcp://54.242.54.187:2376 v19.03.1
aws-node3 - amazonec2 Running tcp://54.174.125.199:2376 v19.03.1
이 중에서 하나를 골라서 manager
라는 직급을 주도록 하겠습니다.
저는 aws-node1을 manager
로 나머지 두 노드는 worker
로 설정하도록 하겠습니다.
그렇다면, manager
로 사용할 aws-node1에 접속하도록 하겠습니다.
사용법
$ docker-machine ssh [manager-node-name]
예시
[ec2-user@ip-172-31-18-132 ~]$ docker-machine ssh aws-node1
Welcome to Ubuntu 16.04.4 LTS (GNU/Linux 4.4.0-1052-aws x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
.
.
ubuntu@aws-node1:~$
aws-node1에 접속한 후에 이 노드를 manager
로 만들겠습니다.
사용법
$ sudo docker swarm init --advertise-addr [your-manager-ip]
예시
ubuntu@aws-node1:~$ sudo docker swarm init --advertise-addr 3.81.226.168
Swarm initialized: current node (95cac3o116goht3tjdw9finqy) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-0w0oezqj2s59bj7635pj0mxiawgnmmr84ny15gl688yx98aypb-36jb6pj963h40dn0uolox5o46 3.81.226.168:2376
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
현재 노드가 manager가 되었다는 문장인
current node (95cac3o116goht3tjdw9finqy) is now a manager.
가 나왔습니다.
다른 두 개의 노드를 worker로 설정하기 위해서는 위의 command인
docker swarm join --token SWMTKN-1-0w0oezqj2s59bj7635pj0mxiawgnmmr84ny15gl688yx98aypb-36jb6pj963h40dn0uolox5o46 3.81.226.168:2376
을 저장해놔야 합니다.
다른 노드에 접속하여 이 command를 입력하면 worker로 만들 수 있습니다.
그 과정은 아래에서 이어서 설명하겠습니다.
만약, 다른 노드에 manager 직급을 주고 싶다면,
$ docker swarm join-token manager
를 사용하여 나온 토큰 값을
다른 노드에 접속하여 command하면 됩니다.
2. 나머지 Node들을 Worker로 만들기
이제 남은 두개에 노드에 접속하여 보겠습니다.
접속 전에 AWS 사이트에서 EC2 인스턴스들의 보안그룹을 확인해봅니다.
위에서 만든 인스턴스인 aws-node1, aws-node2, aws-node3의 보안그룹인 docker-machine
이 생성되었습니다.
AWS의 보안그룹으로 들어가서 docker-machine
의 인바운드를 확인해보겠습니다.
아래 표와 같이 2377 포트가 열려있어야 합니다.
유형 | 프로토콜 | 포트 | 소스 | |||
---|---|---|---|---|---|---|
사용자 지정 TCP | TCP | 2377 | 0.0.0.0/0 |
2377 포트가 열린 걸 확인한 후, ssh로 접속해보도록 하겠습니다.
TIP
3개의 노드를 사용하므로 창을 3개를 띄워서 하면 편합니다.
aws-node2에 접속해 worker로 만들기
[ec2-user@ip-172-31-18-132 ~]$ docker-machine ssh aws-node2
.
.
ubuntu@aws-node2:~$ sudo docker swarm join \
--token SWMTKN-1-581wwvbpfqapm8l1ryun99b4ne53ehdds0s1uyjnckm90b5x8e\
-1db5i7qqeb19w3ghoxjrs22g4 3.81.226.168:2377
This node joined a swarm as a worker.
aws-node3에 접속해 worker로 만들기
[ec2-user@ip-172-31-18-132 ~]$ docker-machine ssh aws-node3
.
.
ubuntu@aws-node3:~$ sudo docker swarm join \
--token SWMTKN-1-581wwvbpfqapm8l1ryun99b4ne53ehdds0s1uyjnckm90b5x8e\
-1db5i7qqeb19w3ghoxjrs22g4 3.81.226.168:2377
This node joined a swarm as a worker.
노드들이 잘 연결되었는지 확인해봅시다.
manager 노드인 aws-node1에 접속하여 확인할 수 있습니다.
Node 확인하기
ubuntu@aws-node1:~$ sudo docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
v0lbxme157q3e40kdmqz7ie0i * aws-node1 Ready Active Leader 19.03.1
vxw2adfad395bunokybhkltln aws-node2 Ready Active 19.03.1
put1qu5xsd5ppol0uu5qkw26z aws-node3 Ready Active 19.03.1
다음과 같이 3개의 노드가 잘 연결되어 Docker-Swarm
을 형성한 것을 볼 수 있습니다.
Docker-Swarm
을 만드는 기본 단계를 모두 완료하셨습니다!
다음 단계에서는 오늘 만든 Docker-Swarm을 사용하여
서비스를 생성하는 방법에 대해 배워보겠습니다.
배운 내용 복습 하기
1. Node중 하나를 Manager로 만들기
2. 나머지 Node들을 Worker로 만들기
이전 단계로 돌아가기
: Docker 설치하기
다음 단계로 넘어가기
: 서비스 만들기