1. play-with-docker.com
- 웹 브라우저 상에서 실행 가능.
- 4시간 간격으로 clear
2. docker-machine
+ VirtualBox
- require machine with 8GB memory
3. digital ocean
+ Docker install
- cheap, easy server
- similar to production level
4. Role your own
- Aws, azure, DO, google 등…
get.docker.com
나는 2번 방법으로 docker-machine
을 깔아서 해보았다. docker-machine
까는 방법은 여기에서 설명해놓았다.
3개의 다른 machine에 swarm 띄워보기
docker-machine
을 사용해서 3개의 swarm을 띄워보자.
$docker-machine create node1
$docker-machine create node2
$docker-machine create node3
$eval $(docker-machine env node1)
# check node1 is activating
$docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
node1 * virtualbox Running tcp://192.168.99.100:2376 v17.09.1-ce
node2 - virtualbox Running tcp://192.168.99.101:2376 v17.09.1-ce
node3 - virtualbox Running tcp://192.168.99.102:2376 v17.09.1-ce
ssh 명령어를 사용해서 node1에 접속할 수 있다.
$docker-machine ssh node1
## .
## ## ## ==
## ## ## ## ## ===
/"""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\_______/
_ _ ____ _ _
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 17.09.1-ce, build HEAD : e7de9ae - Fri Dec 8 19:41:36 UTC 2017
Docker version 17.09.1-ce, build 19e2cf6
docker@node1:~$ ls
log.log
docker@node1:~$ exit
이제 각각의 터미널에서 docker-machine ssh
명령어를 사용해서 node1
, node2
, node3
에 접속하자. 나는 iTerm2
을 사용하여 한 창을 분할해서 사용하였다.
node1에서 docker swarm init
docker swarm init
명령어를 입력하면 에러가 발생한다. --advertise-addr
옵션을 통해서 여러 address중에 사용할 ip를 골라주라는 메세지가 뜬다.
docker@node1:~$ docker swarm init
Error response from daemon: could not choose an IP address to advertise since this system has multiple addresses on different interfaces (10.0.2.15 on eth0 and 192.168.99.100 on eth1) - specify one with --advertise-addr
같은 ip 내에 있는 node2
, node3
과 연동해야하니 192.168로 시작하는 서브넷 ip를 선택하여 다시 init해준다.
docker@node1:~$ docker swarm init --advertise-addr 192.168.99.100
Swarm initialized: current node (kcwx4yh1mtnusvptwxo6of5mr) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-4pxse964fb9rqpnv89rkq1v3h627t9bo7jjjz9k20vnzhwjog2-95ypb56h9028hfkp00ow94d11 192.168.99.100:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
정상적으로 잘 동작했으면 아래 나오는 command를 복사해서 node2에서 실행하면 join된다.
node2에swarm join 명령어 입력
위에서 복사한 명령어를 node2에 입력하면, 정상적으로 swarm에 worker로 접속되었다는 메세지가 출력된다.
docker@node2: ~$ docker swarm join --token SWMTKN-1-4pxse964fb9rqpnv89rkq1v3h627t9bo7jjjz9k20vnzhwjog2-95ypb56h9028hfkp00ow94d11 192.168.99.100:2377
This node joined a swarm as a worker.
node1에서 join된 node 상태를 확인 가능
docker node ls
로 node를 보면 어떤 노드가 매니져이고, worker인지를 확인 가능
docker@node1:~$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
kcwx4yh1mtnusvptwxo6of5mr * node1 Ready Active Leader
2i2wupxgrhzrgzz5j7safw53c node2 Ready Active
하지만 node2에서는 swarm command 사용이 불가능하다. 처음 join되었을 때 manager가 아닌 worker 신분(?)이기 때문이다. worker는 swarm command를 사용할 수 없다.
docker@node2:~$ docker node ls
Error response from daemon: This node is not a swarm manager. Worker nodes can't be used to view or modify cluster state. Please run this command on a manager node or promote the current node to a manager.
node1에서 다른 노드(node2) role 수정
다른 노드(node2)에서 swarm 명령어를 입력하는 등의 작업을 위해서 node2를 매니저로 승격시켜야한다. docker node update
명령어를 이용.
docker@node1:~$ docker node update --role manager node2
node2
docker@node1:~$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
kcwx4yh1mtnusvptwxo6of5mr * node1 Ready Active Leader
2i2wupxgrhzrgzz5j7safw53c node2 Ready Active Reachable
node2
의 상태가 Reachable
인것을 확인 가능하다. 최초 생성 노드는 Leader
로 유지된다.
node1에서 다른 노드(node3)을 바로 manager 권한으로 join
join-token
명령어로 manager 권한의 토큰을 발행할 수 있다.
docker@node1:~$ docker swarm join-token manager
To add a manager to this swarm, run the following command:
docker swarm join --token SWMTKN-1-4pxse964fb9rqpnv89rkq1v3h627t9bo7jjjz9k20vnzhwjog2-99dwpsub85f2wjybp3gxdjd78 192.168.99.100:2377
해당 토큰을 node3
에서 입력하면 node3가 worker가 아닌 manager 권한으로 발행할 수 있따.
docker@node3:~$ docker swarm join --token SWMTKN-1-4pxse964fb9rqpnv89rkq1v3h627t9bo7
jjjz9k20vnzhwjog2-99dwpsub85f2wjybp3gxdjd78 192.168.99.100:2377
This node joined a swarm as a manager.
docker service 실행하기
docker service
명령어로 3개의 replicas를 만들면 이제 자동으로 node1, 2, 3에 분산되어 만들어진다.
docker@node1:~$ docker service create --replicas 3 -d alpine ping 8.8.8.8
zmgikz924trws37s7hurhubb9
docker@node1:~$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
zmgikz924trw thirsty_morse replicated 3/3 alpine:latest
docker@node1:~$ docker node ps
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
vrm3qvc3keed thirsty_morse.3 alpine:latest node1 Running Running 29 seconds ago
docker@node1:~$ docker service ps thirsty_morse
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
b0zl9r4j329d thirsty_morse.1 alpine:latest node2 Running Running about a minute ago
6lv0qpm1g43u thirsty_morse.2 alpine:latest node3 Running Running about a minute ago
vrm3qvc3keed thirsty_morse.3 alpine:latest node1 Running Running about a minute ago
docker@node1:~$ docker node ps node1
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
vrm3qvc3keed thirsty_morse.3 alpine:latest node1 Running Running 2 minutes ago
'backend > docker' 카테고리의 다른 글
도커로 장고 배포하기 - docker-compose (0) | 2018.01.29 |
---|---|
Making django dev server with docker (0) | 2018.01.08 |
docker-machine 소개, 설치 및 기본 사용법 (0) | 2017.12.23 |
docker - swarm 기초 사용법 및 개념 (0) | 2017.12.22 |
docker compose 기초 사용법 (0) | 2017.12.21 |