res.end(`<h1>Docker Container ID -> ${os.hostname()}</h1><br><h1>Server IP -> ${req.socket.localAddress}</h1><h1>Client IP -> ${req.socket.remoteAddress}</h1><br>Container Tag -> Update_20200316`);
- deploy 옵션으로는 1개의 리플레카(replicas)를 만들고 업데이트 설정(update_config)과 재시작 설정(restart_policy)을 추가했다.
## Docker Swarm
다음과 같이 Swarm은 3대로 구성했다.
- Manager : TB2-DOCKER-MANAGER01 (172.24.0.238)
- Node01 : TB3-DOCKER-NODE01 (172.16.0.235)
- Node02 : TB3-DOCKER-NODE02 (172.16.0.236)
먼저 사전에 Docker Swarm 구성이 완료된 상태이며, 다음과 같이 구성된 상태이다.
```bash
# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
f6zguzgonp1iq8yr3nkahumg0 * TB2-DOCKER-MANAGER01 Ready Active Leader
kj9qfttu2eispr4mvz6e5hulg TB3-DOCKER-NODE02 Ready Active
r0wxm3wh0p9vpx334zhllo7zy TB3-DOCKER-NODE01 Ready Active
```
그리고 아래와 같이 swarm 네트워크 생성도 완료된 상태이다.
```bash
# docker network ls
NETWORK ID NAME DRIVER SCOPE
279270fdaeca bridge bridge local
3bf40dd45669 docker_gwbridge bridge local
40f4fa5b4f4f host host local
ymt3wq5s0ikc ingress overlay swarm
a205a35afbb6 none null local
```
네트워크, 서비스, 그리고 **모든 컨테이너들을 스택(Stack)**이라고 부른다. 스택을 생성하기 위해서는 **docker stack** 명령어를 사용해야 하지만, 스택을 docker-compose.yml 파일로 수행하기를 원한다. 따라서 다음과 같이 명령어를 실행하면 된다.
이제 외부 클라이언트(curl 명령이용)에서 Manager Node로 접속테스트를 해본다.
```bash
# curl http://172.24.0.238:8080
<h1>Docker Container ID -> cube02</h1><br><h1>Server IP -> ::ffff:172.24.0.238</h1><h1>Client IP -> ::ffff:172.24.0.245</h1><br>Container Tag -> Update_20200316[root@TB3-DOCKER-NODE02 ~]#
```
## Docker Swarm 확장
위의 경우 replica를 1로 설정했기 때문에 Manager Node에만 컨테이너가 실행된다. 그럼 정말로 Manager Node에만 확인해보자.
-**Manager Node**
```bash
[root@TB2-DOCKER-MANAGER01 node.js]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
aca7b58347c2 registry.hongsnet.net/joohan.hong/docker/nodejs@sha256:733ac091d6a79b4e04b318cd08b775a2c8867f8d1f4f4e7805ab26c09fca4844 "docker-entrypoint..." 4 minutes ago Up 4 minutes 8080/tcp prod_hongsnet-nodejs.1.wf13c8g098n0nd8zq60qgseit
[root@TB2-DOCKER-MANAGER01 node.js]# docker service ls
이제 다시 Manager/Node01/Node02에서 컨테이너를 확인해보면, 다음과 같다.
-**Manager**
```bash
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
aca7b58347c2 registry.hongsnet.net/joohan.hong/docker/nodejs@sha256:733ac091d6a79b4e04b318cd08b775a2c8867f8d1f4f4e7805ab26c09fca4844 "docker-entrypoint..." 9 minutes ago Up 9 minutes 8080/tcp prod_hongsnet-nodejs.1.wf13c8g098n0nd8zq60qgseit
```
-**Node01**
```bash
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c2a67cef61e7 registry.hongsnet.net/joohan.hong/docker/nodejs@sha256:733ac091d6a79b4e04b318cd08b775a2c8867f8d1f4f4e7805ab26c09fca4844 "docker-entrypoint..." About a minute ago Up About a minute 8080/tcp prod_hongsnet-nodejs.2.uuh263tfwd632l8p2lktk55xl
```
-**Node02**
```bash
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES