728x90
๋ฐ์ํ
12์ฅ ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ : ๋์ปค ์ค์๊ณผ ์ฟ ๋ฒ๋คํฐ์ค
- ์ด์ํ๊ฒฝ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ปจํ ์ด๋์์ ์คํ๋์ง๋ง, ์ฌ๋ฌ ๋์ ๋์ปค ํธ์คํธ์ ์ปจํ ์ด๋๋ฅผ ๊ด๋ฆฌํด์ฃผ๋ ๊ด๋ฆฌ ๋ ์ด์ด๊ฐ ํ ์ธต ์ถ๊ฐ๋๋ค.
- ์ด๋ฐ ๊ด๋ฆฌ ๋ ์ด์ด๋ฅผ ์ค์ผ์คํธ๋ ์ด์ ์ด๋ผ๊ณ ํ๋ฉฐ, ์ฃผ์ ์ค์ผ์คํธ๋ ์ด์ ๋๊ตฌ๋ก ๋์ปค ์ค์๊ณผ ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ์๋ค.
12.1 ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ ๋๊ตฌ๋?
- ์ค์ผ์คํธ๋ ์ด์ ๋๊ตฌ๋ ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ๋ ์ฌ๋ฌ ๋์ํธ์คํธ ์ปดํจํฐ๋ฅผ ์๋ฏธํ๋ค.
- ์ฌ๋ฌ ๋์ ํธ์คํธ์ ๋์ปค๋ฅผ ์ค์นํด ํด๋ฌ์คํฐ๋ฅผ ๋ง๋ค๊ณ , ์ด๋ฅผ ์ค์ผ์คํธ๋ ์ด์ ํ๋ซํผ์ ๋ฑ๋กํ์ฌ ์ฌ์ฉํ๋ค.
- ์ค์ผ์คํธ๋ ์ด์ ๋๊ตฌ๋ ์ปจํ ์ด๋๋ฅผ ๊ด๋ฆฌํ๊ณ , ์๋น์ค๋ฅผ ์ํ ์์ ์ ๋ถ๋ฐฐํ๋ฉฐ, ํธ๋ํฝ์ ๋ถ์ฐํ๊ณ , ์ปจํ ์ด๋ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ค.
- ์ค์ผ์คํธ๋ ์ด์ ๋๊ตฌ๊ฐ ๊ฐ ์๋ฒ, ๋คํธ์ํฌ, ์คํ ๋ฆฌ์ง ์ฅ์น์ ์ธ๋ถ ์ฌํญ์ ๊ฐ๋ ค์ค๋ค.
- ์ค์ผ์คํธ๋ ์ด์ ๊ณ์ธต์ด ์ปจํ ์ด๋๊น์ง ์ด์ด์ง๋ ํธ๋ํฝ ๋ผ์ฐํ ์ ๋ด๋นํด์ ํด๋ฌ์คํฐ๊ฐ ๋ง์น ํ๋์ ๋์์ธ ๊ฒ์ฒ๋ผ ๋ช ๋ นํ ๋๊ตฌ์ API๋ฅผ ํตํด ๋ช ๋ น์ ๋ณด๋ด๊ณ ์ฟผ๋ฆฌ๋ฅผ ์์ฒญํด ์ฌ์ฉํ ์ ์๋ค.
12.2 ๋์ปค ์ค์์ผ๋ก ํด๋ฌ์คํฐ ๋ง๋ค๊ธฐ
$ docker swarm init
Swarm initialized: current node (nnhjjc81yf5s7oegxl90ks9a3) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token [TOKEN] [IP]:[PORT]
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
- ๋์ปค ์์ง ์ค์ ๋ชจ๋๋ก ์ ํ.
- ํด๋ฌ์คํฐ์ ์ํ ์ปดํจํฐ๋ ๋งค๋์ ์ ์์ปค ๋ ๊ฐ์ง ์ญํ ์ ๋งก๋๋ค.
- ์ค์์ ์ถ๊ฐ๋ ์ปดํจํฐ๋ฅผ ๋ ธ๋๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ๋งค๋์ ๋ก๋ถํฐ ์ฐธ๊ฐํ ํฐ์ ๋ฐ๊ธ๋ฐ์ ์ฐธ์ฌํ ์ ์๋ค.
- ๋จ, ๊ฐ์ ๋คํธ์ํฌ ์์ ์กด์ฌํด์ผ ํ๋ค.
- ๋งค๋์
- ํด๋ฌ์คํฐ๋ฅผ ๊ด๋ฆฌํ๋ ์์ ์ ์ํ.
- ํด๋ฌ์คํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ์ฌ์ฉ์๊ฐ YAML ํ์ผ์ ์ ๋ฌํ๊ธฐ ์ํด ์ฌ์ฉํ๋ API
- ์ปจํ ์ด๋ ๋ชจ๋ํฐ๋ง๊ณผ ์ค์ผ์ค๋ง
- ์์ปค
- ์ปจํ ์ด๋๋ฅผ ์คํํ๊ณ ๊ทธ ์ํ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ๋งค๋์ ์ ๋ณด๊ณ ๋ ์ญํ .
# ์์ปค ๋
ธ๋๋ก ์ค์์ ์ฐธ์ฌํ๊ธฐ ์ํ ๋ช
๋ น์ ํ๋ฉด์ ์ถ๋ ฅ
$ docker swarm join-token worker
To add a worker to this swarm, run the following command:
docker swarm join --token [TOKEN] [IP]:[PORT]
# ๋งค๋์ ๋
ธ๋๋ก ์ค์์ ์ฐธ์ฌํ๊ธฐ ์ํ ๋ช
๋ น์ ํ๋ฉด์ ์ถ๋ ฅ
$ docker swarm join-token manager
To add a manager to this swarm, run the following command:
docker swarm join --token [TOKEN] [IP]:[PORT]
# ์ค์์ ์ฐธ์ฌ ์ค์ธ ๋
ธ๋์ ๋ชฉ๋ก์ ์ถ๋ ฅ
$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
nnhjjc81yf5s7oegxl90ks9a3 * ubuntu-linux-22-04-desktop Ready Active Leader 27.3.1
12.3 ๋์ปค ์ค์ ์๋น์ค๋ก ์ ํ๋ฆฌ์ผ์ด์ ์คํํ๊ธฐ
- ๋์ปค ์ค์ ์๋น์ค(Docker Swarm Service) ๋ ๊ธฐ๋ณธ์ ์ธ ๋ฐฐํฌ ๋จ์๋ก, ๋์ปค ์ด๋ฏธ์ง, ์ปจํ ์ด๋ ์, ์ค์ ๋ฑ์ ์ ์ํ ๊ฒ์ด๋ค.
- docker service create ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํ๋ฉฐ, --replicas ์ต์ ์ ์ฌ์ฉํด ์ปจํ ์ด๋ ์๋ฅผ ์ง์ ํ ์ ์๋ค.
$ docker service create --name timecheck --replicas 1 diamol/ch12-timecheck:1.0
lgx4shrj1zim0imurp0r09nwf
overall progress: 1 out of 1 tasks
1/1: running [==================================================>]
verify: Service lgx4shrj1zim0imurp0r09nwf converged
$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
lgx4shrj1zim timecheck replicated 1/1 diamol/ch12-timecheck:1.0
- ๋ ํ๋ฆฌ์นด๋ ํ๋ฒํ ๋์ปค ์ปจํ ์ด๋์ด๋ฏ๋ก docker container ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
$ docker service ps timecheck
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
yw3c6yz9yd86 timecheck.1 diamol/ch12-timecheck:1.0 ubuntu-linux-22-04-desktop Running Running 38 seconds ago
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9d313ba78c7a diamol/ch12-timecheck:1.0 "dotnet TimeCheck.dll" 52 seconds ago Up 52 seconds timecheck.1.yw3c6yz9yd860i5ie1dg6hwva
- ๋ ํ๋ฆฌ์นด๋ฅผ ์ ์ํ ์์ ๋ง์ง ์๊ฒ ์ญ์ ํ๊ฑฐ๋ ๋ค์ด๋์์ ๊ฒฝ์ฐ, ๋์ปค ์ค์์ด ์ปจํ ์ด๋๊ฐ ๋ถ์กฑํ๋ค๊ณ ํ๋จํ๊ณ ๋์ฒด ์ปจํ ์ด๋๋ฅผ ์คํํ๋ค.
$ docker rm -f $(docker ps --last 1 -q)
9d313ba78c7a
# ๋์ปค ์ค์ ์ปจํ
์ด๋ ๋ณต๊ตฌ
$ docker service ps timecheck
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
vfjcsz1jrve8 timecheck.1 diamol/ch12-timecheck:1.0 ubuntu-linux-22-04-desktop Running Running 31 seconds ago
yw3c6yz9yd86 \\_ timecheck.1 diamol/ch12-timecheck:1.0 ubuntu-linux-22-04-desktop Shutdown Failed 36 seconds ago "task: non-zero exit (137)"
- ๋์ปค ์ค์์์๋ service ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด ์ปจํ ์ด๋ ๋ก๊ทธ๋ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ ์ ์๋ค.
- ๋์ปค ์ปดํฌ์ฆ๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ ์๊ฐ ์ปดํฌ์ฆ ํ์ผ์๋ง ์์ง๋ง, ๋์ปค ์ค์์ ํด๋ฌ์คํฐ์ ์ ์ฅ๋๋ค.
$ docker service logs --since 10s timecheck
timecheck.1.vfjcsz1jrve8@ubuntu-linux-22-04-desktop | App version: 1.0; time check: 08:07.46
timecheck.1.vfjcsz1jrve8@ubuntu-linux-22-04-desktop | App version: 1.0; time check: 08:07.51
$ docker service inspect timecheck -f '{{.Spec.TaskTemplate.ContainerSpec.Image}}'
diamol/ch12-timecheck:1.0@sha256:9d3010a572344c988da8e28444ed345c63662a5c211886e670a8ef3c84689b4e
$ docker service update --image diamol/ch12-timecheck:2.0 timecheck
timecheck
overall progress: 1 out of 1 tasks
1/1: running [==================================================>]
verify: Service timecheck converged
$ docker service logs --since 20s timecheck
timecheck.1.hz4z8aq1wnmm@ubuntu-linux-22-04-desktop | App version: 2.0; time check: 08:11.52
timecheck.1.hz4z8aq1wnmm@ubuntu-linux-22-04-desktop | App version: 2.0; time check: 08:11.57
timecheck.1.hz4z8aq1wnmm@ubuntu-linux-22-04-desktop | App version: 2.0; time check: 08:12.02
timecheck.1.hz4z8aq1wnmm@ubuntu-linux-22-04-desktop | App version: 2.0; time check: 08:12.07
- ๋์ปค ์ค์์์๋ docker service ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ค.
- ๋์ปค ์ค์์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ฅผ ์ ์ฅํ ๊ณต๊ฐ์ ๊ฐ์ง ์๋๋ค.
- ์๋น์ค ์ ์๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์ค์์ด ๋ ํ๋ฆฌ์นด๋ฅผ ํ๋์ฉ ์๋ก์ด ๊ฒ์ผ๋ก ๊ต์ฒดํ๋ฉฐ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ๋ค.
- ๋ชจ๋ ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ ๋๊ตฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฐ์ดํธํ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๋จํ์ง ์๊ณ , ์ ์ง์ ์ผ๋ก ์ปจํ ์ด๋๋ฅผ ๊ต์ฒดํด ๋๊ฐ๋ ๋กค๋ง ์ ๋ฐ์ดํธ ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ๋ฌด์ค๋จ ๋ฐฐํฌ๋ฅผ ํ๋ค.
$ doker service update --rollback timecheck
timecheck
rollback: manually requested rollback
overall progress: rolling back update: 1 out of 1 tasks
1/1: running [==================================================>]
verify: Service timecheck converged
$ docker service ps timecheck
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
qjsj6vwd3dez timecheck.1 diamol/ch12-timecheck:2.0 ubuntu-linux-22-04-desktop Running Running 34 seconds ago
j0pzra45jeab \\_ timecheck.1 diamol/ch12-timechekc:2.0 ubuntu-linux-22-04-desktop Shutdown Shutdown 35 seconds ago
ej81oztsjydt \\_ timecheck.1 diamol/ch12-timechekc:2.0 ubuntu-linux-22-04-desktop Shutdown Rejected 38 seconds ago "No such image: diamol/ch12-ti…"
nywdza251boo \\_ timecheck.1 diamol/ch12-timechekc:2.0 ubuntu-linux-22-04-desktop Shutdown Rejected 43 seconds ago "No such image: diamol/ch12-ti…"
j086w1d94kxg \\_ timecheck.1 diamol/ch12-timechekc:2.0 ubuntu-linux-22-04-desktop Shutdown Rejected 47 seconds ago "No such image: diamol/ch12-ti…"
- ๋์ปค ์ค์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด์ ๋ฒ์ ์ ์๋น์ค ์ ์๊ฐ ์์ผ๋ฏ๋ก, ๋ช ๋ น ํ๋ฒ์ผ๋ก ์ด์ ๋ฒ์ ์ผ๋ก ๋กค๋ฐฑ์ด ๊ฐ๋ฅํ๋ค.
12.4 ํด๋ฌ์คํฐ ํ๊ฒฝ์์ ๋คํธ์ํฌ ํธ๋ํฝ ๊ด๋ฆฌํ๊ธฐ
- ์ปดํฌ๋ํธ๋ค์ TCP/IP ๋ฐฉ์์ผ๋ก ํต์ ํ๋ค.
- ์ค์ ๋ชจ๋์์๋ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ๋ค.
- ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ(Overlay Network) ๋ ํด๋ฌ์คํฐ์ ์ํ ๋ชจ๋ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฐ์ ๋คํธ์ํฌ์ด๋ค.
- ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ๋ ์ค์์ ๊ตฌ์ฑํ๋ ๋ชจ๋ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ๋จ.
- ๊ฐ์ ๋คํธ์ํฌ์ ์ฐ๊ฒฐ๋ ์๋น์ค์ ์ํ ์ปจํ ์ด๋๋ผ๋ฆฌ๋ง ์๋ก ํต์ ํ ์ ์๋ค.
- ์ฆ, ํธ์คํธ๊ฐ ๋ฌ๋ผ๋ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ๋ก ๊ฐ์ ๋คํธ์ํฌ์ ์ํด์๋ ์ปจํ ์ด๋๋ผ๋ฆฌ ํต์ ์ด ๊ฐ๋ฅํ๋ค.
$ docker service rm timecheck
$ docker network create --driver overlay iotd-net
$ docker service create -d
$ docker network create --drive --replicas 3 --network iotd-net --name iotd diamol/ch09-image-of-the-day
$ docker service create --detach --replicas 2 --network iotd-net --name accesslog idamol/ch09-access-log
- ๋์ปค ์ค์์ ์๋น์ค ์ ๊ทผ์ ๋ํ ์ ๋ขฐ์ฑ์ ๋์ด๊ณ ๋ถํ๋ฅผ ๋ถ์ฐ์ํค๊ธฐ ์ํด VIP ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ๋ค.
$ docker network create --driver overlay iotd-net
$ docker service create --detach --replicas 3 --network iotd-net --name iotd diamol/ch09-image-of-the-day
$ docker service create --detach --replicas 2 --network iotd-net --name accesslog diamol/ch09-access-log
$ docker service ls
- ๋์ปค ์ค์์์๋ ๋ ธ๋ ์ ์ปจํ ์ด๋๋ก ํธ๋ํฝ์ ๋ผ์ฐํ ํ๊ธฐ ์ํด ์ธ๊ทธ๋ ์ค ๋คํธ์ํน์ ์ฌ์ฉํ๋ค.
- ์๋น์ค์ ํฌํธ๋ฅผ ๊ณต๊ฐํ๋ฉด ์ธ๊ทธ๋ ์ค ๋คํธ์ํฌ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ฉ๋๋ค.
- ํด๋น ์๋น์ค์ ๊ฒฝ์ฐ ๋ ๊ฐ์ ๋ ํ๋ฆฌ์นด๋ก ๊ตฌ์ฑ๋์ง๋ง, ํ๋์ ํฌํธ 8081์ ์ฃผ์ ์ค์ด๋ค.
- ๋ด๋ถ์ ์ผ๋ก๋ ์ธ๊ทธ๋ ์ค ๋คํธ์ํฌ๊ฐ ํด๋น ํฌํธ๋ฅผ ์ฃผ์ํ๋ฉฐ, ์ด ํฌํธ๋ก ์ธ์ ๋๋ ํธ๋ํฝ์ ๋ ํ๋ฆฌ์นด๋ก ์ ๋ฌํด์ค๋ค.
$ docker service create -d --name image-gallery --network iotd-net --publish 8010:80 --replicas 2 diamol/ch09-image-gallery
12.5 ๋์ปค ์ค์๊ณผ ์ฟ ๋ฒ๋คํฐ์ค ์ค ๋ฌด์์ ์ฌ์ฉํ ๊น?
- ๋์ปค ์ค์์ ์๋์ ์ผ๋ก ๊ธฐ๋ฅ์ด ๊ฐ๋จํ ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ ๋๊ตฌ๋ก ์ค๊ณ๋์๋ค.
- ๋คํธ์ํฌ์ ์๋น์ค์ ๊ฐ๋ ์ ๋์ปค ์ปดํฌ์ฆ์์ ์ฐจ์ฉํด, ์ค์ผ์คํธ๋ ์ด์ ๋๊ตฌ๋ก์ ๋์ปค ์์ง์ ์ ์ฉํ๋ค.
- ์ฟ ๋ฒ๋คํฐ์ค๋ ์ฃผ์ ํฌ๋ผ์ฐ๋ ์๋น์ค์์ ๋งค๋์ง๋ ์๋น์ค ํํ๋ก ์ ๊ณต๋๋ค.
- Azure, AWS, GCP ๋ฑ ํด๋ผ์ฐ๋ ์๋น์ค์์ ํธ๋ฆฌํ๊ฒ ์ฌ๋ฌ ๋์ ๋ ธ๋๋ฅผ ๊ฐ์ถ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ฅผ ์์ฑํ ์ ์๋ค.
728x90
๋ฐ์ํ