์ฐธ๊ณ ํ ์ฌ์ดํธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Docker ๊ณต์ ๋ฌธ์
- Docker Swarm์ ์ฃผ์ ์ฉ์ด, ํ์ฑํ ๋ฐฉ๋ฒ ๋ฐ ๋ ธ๋(Node) ๊ด๋ฆฌ๋ฒ ์ดํด๋ณด๊ธฐ
- [Docker] Docker Swarm Cluster ๊ตฌ์ถํ๊ธฐ(Swarm Mode)
- Docker Swarm์์ ์๋น์ค(Service) ์์ฑํ๊ณ ๋ค๋ฃจ๊ธฐ
- [Docker] Docker Swarm์ด๋
EC2 3๊ฐ๋ฅผ ์ฌ์ฉํ์ฌ Docker swarm ์ค์ต์ ์งํํ์ต๋๋ค.
- worker host: docker-swarm-1, docker-swarm-2
- manager host: docker-swarm-3
- ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ ์ด๋ ์ปจํ ์ด๋์ ๋ฐฐํฌ, ๊ด๋ฆฌ, ํ์ฅ, ๋คํธ์ํน์ ์๋ํํ๋ ๊ฒ์ด๋ค.
- ํ๋ก๋น์ ๋ ๋ฐ ๋ฐฐํฌ
- ๊ตฌ์ฑ ๋ฐ ์ผ์ ์กฐ์
- ๋ฆฌ์์ค ํ ๋น
- ์ปจํ ์ด๋ ๊ฐ์ฉ์ฑ
- ์ปจํ ์ด๋ ์ค์ผ์ผ๋ง ๋๋ ์ ๊ฑฐ
- ๋ก๋ ๋ฐธ๋ฐ์ฑ ๋ฐ ํธ๋ํฝ ๋ผ์ฐํ
- ์ปจํ ์ด๋ ๋ชจ๋ํฐ๋ง
- ์คํ๋ ์ปจํ ์ด๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ค์
- ์ปจํ ์ด๋๊ฐ ๋ณด์ ์ ์ง
- ์ผ๋ฐ์ ์ผ๋ก Docker ์ฌ์ฉ๋ฒ์ ํ๋์ ํธ์คํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋ค.
docker ps,docker run,docker create๋ฑ๊ณผ ๊ฐ์ ๋ช ๋ น์ด๋ค์ ๋ชจ๋ ํ๋์ ์ปจํ ์ด๋๋ฅผ ๋์์ผ๋ก ์คํ๋๋ค.- ํ์ง๋ง ์ค์ ๋ก ๋์ปค๋ฅผ ์ด์ ํ๊ฒฝ์ ์ ์ฉํ๋ค๊ณ ํ๋ค๋ฉด, ํ๋์ ํธ์คํธ์ ๋์ปค๋ฅผ ์ค์นํด ์ด์ํ๋ ๊ฒ์ ์ด๋ ต๋ค.
- ๋จ์ผ ํธ์คํธ๋ก ๊ตฌ์ฑ๋ ํ๊ฒฝ์ ํ์ฅ์ฑ(Scalability), ๊ฐ์ฉ์ฑ(Availability), ์ฅ์ ํ์ฉ์ฑ(Fault Tolerance) ์ธก๋ฉด์์ ๋ง์ ํ๊ณ์ ์ ๊ฐ์ง๋ค.
- ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ ๋์ ์๋ฒ๋ฅผ ํ๋์ ํด๋ฌ์คํฐ๋ก ๋ฌถ์ด ๋ฆฌ์์ค๋ฅผ ๋ณ๋ ฌ๋ก ํ์ฅํ๋ ๊ฒ์ด๋ค.
- ๋์ปค ์ค์์ ์ด์ฒ๋ผ ์๋ก ๋ค๋ฅธ ํธ์คํธ์ ์๋ ์ฌ๋ฌ ๋์ ์ปจํ ์ด๋๋ฅผ ํ๋๋ก ๋ฌถ์ด ๋ง์น ํ๋์ ํธ์คํธ์ธ ๊ฒ์ฒ๋ผ ์ฌ์ฉํ ์ ์๋๋ก ๋์์ฃผ๋ ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ ๋๊ตฌ์ด๋ค.
- ์ฟ ๋ฒ๋คํฐ์ค๋งํผ์ ์๋๋๋ผ๋, ์ฌ๋ฌ ๋์ ํธ์คํธ๋ก ๊ตฌ์ฑ๋ ์ค์ ๊ท๋ชจ์ ํด๋ฌ์คํฐ์์ ์ปจํ ์ด๋ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ๋์ ์ ์ดํ๊ธฐ์ ์ถฉ๋ถํ ๊ธฐ๋ฅ์ ๊ฐ์ถ๊ณ ์๋ค.
- ๋์ปค ์์ง์ด ์ค์น๋ ํ๊ฒฝ์ด๋ผ๋ฉด, ๋ณ๋์ ๊ตฌ์ถ ๋น์ฉ ์์ด ์ค์ ๋ชจ๋๋ฅผ ํ์ฑํํ๋ ๊ฒ๋ง์ผ๋ก๋ ๊ฐ๋ฅํ๋ค.
- Docker compose๋ฅผ ์ฌ์ฉํด๋ณธ ์ฌ๋์ด๋ผ๋ฉด ๋์ปค ์ค์์ ์คํ(stack)์ ์ด์ฉํ ์ ํ๋ฆฌ์ผ์ด์ ์ด์์ ๊ณง๋ฐ๋ก ์ ์ํ ์ ์๋ค.
- Docker desktop์ผ๋ก๋ ํด๋ฌ์คํฐ ๊ด๋ฆฌ์ ๋ฐฐํฌ๊ฐ ๋ชจ๋ ๊ฐ๋ฅํ ๋จ์ผ ๋
ธ๋ ํด๋ฌ์คํฐ๋ฅผ ๋ฐ๋ก ๋ง๋ค ์ ์๋ค.
- ๋ฐ๋ผ์ ์ต์ํ์ ์์์ผ๋ก ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ ํ๊ฒฝ์ ๋ง๋ค์ด ์คํํด๋ณผ ์ ์๋ค.
- ์ฌ๋ฌ ๊ฐ์ ๋์ปค ์๋ฒ๋ฅผ ํ๋์ ํด๋ฌ์คํฐ๋ก ๊ตฌ์ฑํ๊ธฐ ์ํด ๊ฐ์ข ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ๋๊ธฐํํ๋ค.
- ๊ฐ ์๋ฒ๋ฅผ ์ ์ดํ๋ ์ญํ ์ ํ๋ค.
- ์ค์ ์ปจํ ์ด๋๊ฐ ์์ฑ๋๊ณ ๊ด๋ฆฌ๋๋ ๋์ปค ์๋ฒ์ด๋ค.
- ์์ปค ๋ ธ๋๋ ์์ ์๋ ์๋ค.
- ํด๋ฌ์คํฐ ๋ด์ ์์ปค ๋ ธ๋๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋์ปค ์๋ฒ์ด๋ค.
- ๋งค๋์ ๋ ธ๋๋ ์์ปค ๋ ธ๋์ ์ญํ ๋ ํฌํจํ๊ณ ์๋ค.
- ๋งค๋์ ๋ ธ๋๋ ๋ฌด์กฐ๊ฑด 1๊ฐ ์ด์ ์กด์ฌํด์ผ ํ๋ค.
- ๋์ปค ์ค์์๋ ์ค์ ํด๋์, ์ค์ ๋ชจ๋ ๋ ์ข ๋ฅ๊ฐ ์๋ค.
- ์ค์ ํด๋์์ ์ฌ๋ฌ ๋์ ๋์ปค ์๋ฒ๋ฅผ ํ๋์ ์ง์ ์์ ์ฌ์ฉํ ์ ์๋๋ก ๋จ์ผ ์ ๊ทผ์ ์ ์ ๊ณตํ๋ค๋ฉด, ์ค์ ๋ชจ๋๋ ๋ง์ดํฌ๋ก ์ํคํ ์ฒ์ ์ปจํ ์ด๋๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํ ํด๋ฌ์คํฐ๋ง ๊ธฐ๋ฅ์ ์ด์ ์ ๋ง์ถ๊ณ ์๋ค.
- ์ค์ ๋ชจ๋๊ฐ ์๋น์ค ํ์ฅ์ฑ๊ณผ ์์ ์ฑ ๋ฑ ์ฌ๋ฌ ์ธก๋ฉด์์ ์ค์ ํด๋์๋ณด๋ค ๋ฐ์ด๋๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก ์ค์ ๋ชจ๋๋ฅผ ๋ ๋ง์ด ์ฌ์ฉํ๋ค.
- ๋์ปค ๋ฒ์ 1.6 ์ดํ๋ถํฐ ์ฌ์ฉํ ์ ์๋ค.
docker run,docker ps๋ฑ ์ผ๋ฐ์ ์ธ ๋์ปค ๋ช ๋ น์ด์ ๋์ปค API๋ก ํด๋ฌ์คํฐ์ ์๋ฒ๋ฅผ ์ ์ดํ๊ณ ๊ด๋ฆฌํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.- ๋ถ์ฐ ์ฝ๋๋ค์ดํฐ, ์์ด์ ํธ ๋ฑ์ ๋ณ๋๋ก ์คํํด์ผ ํ๋ค.
- ๋์ปค ๋ฒ์ 1.12 ์ดํ๋ถํฐ ์ฌ์ฉํ ์ ์๋ค.
- ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ์ฌ๋ฌ๊ฐ ์์ฑํด ํ์์ ๋ฐ๋ผ ์ ๋์ ์ผ๋ก ์ปจํ ์ด๋์ ์๋ฅผ ์กฐ์ ํ ์ ์์ผ๋ฉฐ, ์ปจํ ์ด๋๋ก์ ์ฐ๊ฒฐ์ ๋ถ์ฐํ๋ ๋ก๋๋ฐธ๋ฐ์ฑ ๊ธฐ๋ฅ์ ์์ฒด์ ์ผ๋ก ์ง์ํ๋ค.
- ๋ถ์ฐ ์ฝ๋๋ค์ดํฐ, ์์ด์ ํธ ๋ฑ์ด ๋ชจ๋ ๋์ปค ์์ง ์์ฒด์ ๋ด์ฅ๋์ด ์๋ค.
| ์ด๋ฆ | ์ค๋ช |
|---|---|
| ๋ ธ๋(Node) | ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ๋ ๊ฐ๋ณ ๋์ปค ์๋ฒ๋ฅผ ์๋ฏธํ๋ค. |
| ๋งค๋์ ๋ ธ๋(Manager Node) | โข ํด๋ฌ์คํฐ ๊ด๋ฆฌ์ ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ ์ ๋ด๋นํ๋ค. โฆ ์ฟ ๋ฒ๋คํฐ์ค์ ๋ง์คํฐ ๋ ธ๋์ ๊ฐ์ ์ญํ ์ด๋ผ๊ณ ํ ์ ์๋ค. |
| ์์ปค ๋ ธ๋(Worker Node) | โข ์ปจํ ์ด๋ ๊ธฐ๋ฐ ์๋น์ค๋ค์ด ์ค์ ๊ตฌ๋๋๋ ๋ ธ๋๋ฅผ ์๋ฏธํ๋ค. โฆ ์ฟ ๋ฒ๋คํฐ์ค์ ๋ค๋ฅธ ์ ์ด ์๋ค๋ฉด, Docker swarm์์๋ ๋งค๋์ ๋ ธ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ปค ๋ ธ๋์ ์ญํ ์ ๊ฐ์ด ์ํํ ์ ์๋ค. โฆ ์ค์ผ์ค๋ง์ ์์๋ก ๋ง๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค. |
| ์คํ(Stack) | โข ํ๋ ์ด์์ ์๋น์ค(Service)๋ก ๊ตฌ์ฑ๋ ๋ค์ค ์ปจํ ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ฌถ์์ ์๋ฏธํ๋ค. โฆ ๋์ปค ์ปดํฌ์ฆ์ ์ ์ฌํ ์์์ yaml ํ์ผ๋ก ์คํ ๋ฐฐํฌ๋ฅผ ์งํํ๋ค. |
| ์๋น์ค(Service) | โข ๋ ธ๋์์ ์ํํ๊ณ ์ ํ๋ ์์ ๋ค์ ์ ์ํด๋์ ๊ฒ์ผ๋ก, ํด๋ฌ์คํฐ ์์์ ๊ตฌ๋์ํฌ ์ปจํ ์ด๋ ๋ฌถ์์ ์ ์ํ ๊ฐ์ฒด์ด๋ค. โฆ ๋์ปค ์ค์์์์ ๊ธฐ๋ณธ์ ์ธ ๋ฐฐํฌ ๋จ์๋ก ์ทจ๊ธ๋๋ค. โฆ ํ๋์ ์๋น์ค๋ ํ๋์ ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ๋๋๋ฉฐ, ์ด๋ค ๊ฐ๊ฐ์ด ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ๋์ ํ์ํ ๊ฐ๋ณ์ ์ธ ๋ง์ดํฌ๋ก์๋น์ค(microservice)๋ก ๊ธฐ๋ฅํ๋ค. |
| ํ ์คํฌ(Task) | โข ํด๋ฌ์คํฐ๋ฅผ ํตํด ์๋น์ค๋ฅผ ๊ตฌ๋์ํฌ ๋, ๋์ปค ์ค์์ ํด๋น ์๋น์ค์ ์๊ตฌ ์ฌํญ์ ๋ง์ถฐ ์ค์ ๋ง์ดํฌ๋ก์๋น์ค๊ฐ ๋์ํ ๋์ปค ์ปจํ ์ด๋๋ฅผ ๊ตฌ์ฑํ์ฌ ๋ ธ๋์ ๋ถ๋ฐฐํ๋๋ฐ, ์ด๋ฅผ ํ ์คํฌ๋ผ๊ณ ํ๋ค. โฆ ํ๋์ ์๋น์ค๋ ์ง์ ๋ ๋ณต์ ๋ณธ(replica) ์์ ๋ฐ๋ผ ์ฌ๋ฌ ๊ฐ์ ํ ์คํฌ๋ฅผ ๊ฐ์ง ์ ์์ผ๋ฉฐ, ๊ฐ๊ฐ์ ํ ์คํฌ์๋ ํ๋์ฉ์ ์ปจํ ์ด๋๊ฐ ํฌํจ๋๋ค. |
| ์ค์ผ์ค๋ง(Scheduling) | โข ์๋น์ค ๋ช ์ธ์ ๋ฐ๋ผ ํ ์คํฌ๋ฅผ ๋ ธ๋์ ๋ถ๋ฐฐํ๋ ์์ ์ ์๋ฏธํ๋ค. โฆ 2022๋ 8์ ๊ธฐ์ค์ผ๋ก ๋์ปค ์ค์์์๋ ์ค์ง ๊ท ๋ฑ ๋ถ๋ฐฐ(spread) ๋ฐฉ์๋ง ์ง์ํ๊ณ ์๋ค. |
# AWS ์ธ๋ฐ์๋ ๊ท์น๋ ํธ์งํด์ผํ๋ค.
sudo ufw allow {port}2377/tcp: ํด๋ฌ์คํฐ ๊ด๋ฆฌ์ ์ฌ์ฉ๋๋ ํฌํธ7946/tcp,7946/udp: ๋ ธ๋ ๊ฐ ํต์ ์ ์ฌ์ฉ๋๋ ํฌํธ4789/udp: ํด๋ฌ์คํฐ์์ ์ฌ์ฉ๋๋ Ingress ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ ํธ๋ํฝ์ ์ฌ์ฉ๋๋ค.
docker swarm init --advertise-addr { private_ip }- ๋งค๋์ ํธ์คํธ์ ์ ์ํด ์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ผํ๋ค.
docker swarm join --token { token } { private_ip }:2377
# This node joined a swarm as a worker.- ์์ปค ํธ์คํธ์ ์ ์ํด ์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ค.
ubuntu@ip-:~$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
4ekbnwh2ayfy2qo9alcarsy5q ip- Ready Active 24.0.5
f4ag8t9kczcn0sg0wzexfac3x * ip- Ready Active Leader 24.0.5
js2iuhm3i5r7qpnsrxs15ojc1 ip- Ready Active 24.0.5- ๋งค๋์ ํธ์คํธ์ ์ ์ํด list๋ฅผ ํ์ธํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ปค ๋ ธ๋๊ฐ ์ถ๊ฐ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
docker node ls๋ช ๋ น์ด๋ ๋งค๋์ ๋ ธ๋์์๋ง ๋์ํ๋ค.ID๊ฐ ์์ ๋ถ์*์ ์กฐํ ๋ช ๋ น์ ์ํํ ๋งค๋์ ๋ ธ๋๋ฅผ ์๋ฏธํ๋ค.
ID๋ ํด๋ฌ์คํฐ ์ฐจ์์์ ๊ฐ ๋ ธ๋์ ๋ถ์ฌ๋ ๊ณ ์ ๊ฐ์ด๋ฉฐ,HOSTNAME์ ํด๋น ๋ ธ๋์ ์ด๋ฆ์ด๋ค.HOSTNAME์ ์ค๋ณต์ด ๊ฐ๋ฅํ์ง๋งID๋ ํ์ฉ๋์ง ์๋๋ค.- ํธ์คํธ๊ฐ ํด๋ฌ์คํฐ๋ฅผ ๋ ๋ฌ๋ค(leave)๊ฐ ๋ค์ ํฉ๋ฅ(join)ํ๋ ๊ฒฝ์ฐ ์ด์ ๊ณผ ๋ค๋ฅธ ์๋ก์ด
ID๊ฐ์ด ๋ถ์ฌ๋๋ค.
AVAILABILITY์ ์ข ๋ฅ๋ ๋ค์๊ณผ ๊ฐ๋ค.Active: ์ ์์ ์ผ๋ก ํ์คํฌ๋ฅผ ํ ๋น๋ฐ์ ์ ์๋ ์ํPause: ์ค์ผ์ค๋ฌ๊ฐ ์๋ก์ด ํ ์คํฌ ํ ๋น์ ํ์ง ์์ง๋ง, ํ ์คํฌ๊ฐ ๊ตฌ๋ ์ํ๋ฅผ ๊ทธ๋๋ก ์ ์งํ๋ค.Drain: ์ค์ผ์ค๋ฌ๊ฐ ์๋ก์ด ํ ์คํฌ๋ฅผ ํ ๋นํ์ง ์๊ณ , ํด๋น ๋ ธ๋์์ ๋์๊ฐ๋ ํ ์คํฌ๊ฐ ๋ชจ๋ ์ข ๋ฃ๋๋ฉฐ,Active์ํ์ธ ๋ค๋ฅธ ๋ ธ๋๋ก ๋ค์ ์ค์ผ์ค๋ง ๋๋ค.
MANAGER STATUS์ ์ข ๋ฅ๋ ๋ค์๊ณผ ๊ฐ๋ค.Leader: ์ค์ ํด๋ฌ์คํฐ์ ๊ด๋ฆฌ์ ์ค์ผ์คํธ๋ ์ด์ ์ ๊ด๋ฆฌํ๋ ๋ ธ๋์ด๋ค.Reachable: ๋งค๋์ ๋ ธ๋๋ก์ ๋ค๋ฅธ ๋งค๋์ ๋ ธ๋๋ค๊ณผ ์ ์์ ์ผ๋ก ํต์ ๊ฐ๋ฅํ ์ํ์ด๋ค.- ๋ง์ฝ
Leader๋ ธ๋์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด, ํด๋น ์ํ๊ฐ์ ๊ฐ์ง ๋งค๋์ ๋ ธ๋๊ฐ ์Leaderํ๋ณด๊ตฐ์ด ๋๋ค.
- ๋ง์ฝ
Unavailable:Leader๋ฅผ ํฌํจํ ๋ค๋ฅธ ๋งค๋์ ๋ ธ๋๋ค๊ณผ ํต์ ์ด ๋ถ๊ฐ๋ฅํ ์ํ์ด๋ค.
- ํด๋ฌ์คํฐ๋ 1๊ฐ ์ด์์ ๋งค๋์ ๋
ธ๋๋ฅผ ๊ฐ์ง๊ณ ์๊ณ ,
**Leader๋ก ์ ๋ณ๋ ๋งค๋์ ๋ ธ๋๊ฐ ์ ์ฒด ํด๋ฌ์คํฐ๋ฅผ ์ค์ง์ ์ผ๋ก ๊ด๋ฆฌํ๋ค.**- ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฆฌ๋ ๋ ธ๋๋ฅผ ํตํด ์ ํ๋๊ณ , ๋๋จธ์ง ๋ ธ๋๋ค์ด ๋ฆฌ๋ ๋ ธ๋์ ๋๊ธฐํ๋ ์ํ๋ฅผ ์ ์งํ๋ค.
docker run์ ์ปจํ ์ด๋๋ฅผ ์๋ก ์์ฑํ๊ณ ๊ตฌ๋์ํค๋ ๋ช ๋ น์ด์ด๋ค.- ์ปจํ ์ด๋ ์ด๋ฆ, ์ด๋ฏธ์ง ์ด๋ฆ์ ์ง์ ํ๋ ๊ฒ๋ง์ผ๋ก๋ ๋์ปค ์์ง์ด ์์์ ํ์ํ ์ด๋ฏธ์ง๋ฅผ ๋ด๋ ค๋ฐ์ ๊ตฌ๋์ํจ๋ค.
- Docker์ ๊ธฐ๋ณธ ๋ฐฐํฌ ๋จ์๊ฐ ์ปจํ
์ด๋๋ผ๋ฉด, **Docker Swarm์ ๊ธฐ๋ณธ ๋ฐฐํฌ ๋จ์๋ ์๋น์ค(Service)**์ด๋ค.
- ํํ โ๊ฐ์ ์ด๋ฏธ์ง์์ ์์ฑ๋ ์ปจํ ์ด๋์ ์งํฉโ์ผ๋ก ์๋ ค์ ธ ์๋ค.
- ๋จ์ผ ์ด๋ฏธ์ง ๊ธฐ๋ฐ์ผ๋ก ํด๋ฌ์คํฐ ์์์ ๊ตฌ๋์ํฌ ์ปจํ ์ด๋ ๋ฌถ์์ ์ ์ํ ๊ฐ์ฒด์ ๋ ๊ฐ๊น๋ค.
- ์๋น์ค๋ ์ ์ธ์ ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
- ์ฆ, ์ํ๋ ์ํ๋ฅผ ์ ์ํ๋ฉด, ๋์ปค๋ ๊ทธ ์ํ๋ฅผ ์ ์งํ๋๋ฐ ํ์ํ ์์ ์ ์ง์์ ์ผ๋ก ์ํํ๋ค.
- ์ ์ํ ์ ์๋ ์์๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ปจํ ์ด๋๋ก ๋ฐฐํฌํ ์ด๋ฏธ์ง์ ์ ๋ณด
- ์ ์ฒด ์๋น์ค๋ฅผ ๊ตฌ์ฑํ ์ปจํ ์ด๋์ ์
- ์ปจํ ์ด๋์ ๋ฐฐ์น ํํ
- ์ปจํ ์ด๋์ ๋ถ์ผ ๋ณผ๋ฅจ ์ ๋ณด
- ์ปจํ ์ด๋๋ฅผ ๋ฐฐ์น์ํฌ ๋ ธ๋ ์กฐ๊ฑด
- ์ปจํ ์ด๋์ ์ ๋ฐ์ดํธ ์ ๋ต ๋ฐ ์ ์ฑ ์ง์
- ์ ์ธ์ ์ผ๋ก ์ ์๋ ์๋น์ค์ ๋ช ์ธ์ ๋ฐ๋ผ ์์ฑ๋์ด ํด๋ฌ์คํฐ ๋ ธ๋์ ๋ฐฐ์น๋๋ ๊ฐ๋ณ ์ปจํ ์ด๋์ ๋ฐฐํฌ ๋จ์๊ฐ ๋ฐ๋ก ํ ์คํฌ(Task)์ด๋ค.
- ๊ฐ ํ
์คํฌ์๋
์๋น์ค๋ช .์ผ๋ จ๋ฒํธํํ์ ์ด๋ฆ์ด ๋ถ๊ฒ ๋๋ฉฐ, ๋ฏธ๋ฆฌ ์ ์๋ ์ปจํ ์ด๋์ ์(replicas) ๋งํผ ์์ฑ๋์ด ๊ฐ์ฉํ ๋ ธ๋์ ์ ๊ฐ๊ฐ ๋ฐฐ์น๋๋ค. - ์ ์๋ ์๋น์ค์ ๋ช ์ธ๋ฅผ ์ค์ ๋งค๋์ ๊ฐ ํ์ ํ ๋ค, ๊ฐ์ฉํ ๋ ธ๋์ ์ง์ ๋ ๋ ํ๋ฆฌ์นด ์ ๋งํผ์ ํ ์คํฌ๋ฅผ ๋ง๋ค์ด ํ ๋นํ๋ค.
docker service create --replicas 1 --name helloworld alpine ping docker.comping docker.com๋ช ๋ น์ด๋ฅผ ์ํํ๋ ์ปจํ ์ด๋ ์๋น์ค๋ฅผ ์์ฑํ๋ค.- ์๋น์ค ์์ฑ์ ๋งค๋์ ํธ์คํธ์์๋ง ์ฌ์ฉํ ์ ์๋ค.
- ์ต์
์ ๋ค์๊ณผ ๊ฐ๋ค.
--name: ์๋น์ค์ ์ด๋ฆ์ ์ง์ ํ๋ค.--replicas: ์๋น์ค๋ฅผ ๊ตฌ์ฑํ ํ ์คํฌ(์ปจํ ์ด๋)์ ์๋ฅผ ์ง์ ํ๋ค. ์ง์ ๋ ์ซ์ ๋งํผ ํ ์คํฌ๊ฐ ํด๋ฌ์คํฐ ๋ ธ๋์ ๋ฐฐ์น๋๋ค.alpine ping docker.com: ํ ์คํฌ์ ํฌํจ์ํฌ ์ด๋ฏธ์ง ์ ๋ณด๋ฅผ ์ง์ ํ๋ค.
ubuntu@ip-:~$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
zpume3y3ng7r hello replicated 1/1 alpine:latest docker service 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.- ๋ง์ฝ ์์ปค ํธ์คํธ์์ ์๋น์ค๋ฅผ ์์ฑํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
ubuntu@ip-:~$ docker service inspect --pretty helloworld
ID: m6n03eshissl401jy1ixc4j5i
Name: helloworld
Service Mode: Replicated
Replicas: 1
Placement:
UpdateConfig:
Parallelism: 1
On failure: pause
Monitoring Period: 5s
Max failure ratio: 0
Update order: stop-first
RollbackConfig:
Parallelism: 1
On failure: pause
Monitoring Period: 5s
Max failure ratio: 0
Rollback order: stop-first
ContainerSpec:
Image: alpine:latest@sha256:82d1e9d7ed48a7523bdebc18cf6290bdb97b82302a8a9c27d4fe885949ea94d1
Args: ping docker.com
Init: false
Resources:
Endpoint Mode: vip
ubuntu@ip-:~$ docker service inspect helloworld
[
{
"ID": "m6n03eshissl401jy1ixc4j5i",
"Version": {
"Index": 21
},
"CreatedAt": "2023-08-02T11:35:37.50905067Z",
"UpdatedAt": "2023-08-02T11:35:37.50905067Z",
"Spec": {
"Name": "helloworld",
"Labels": {},
"TaskTemplate": {
"ContainerSpec": {
"Image": "alpine:latest@sha256:82d1e9d7ed48a7523bdebc18cf6290bdb97b82302a8a9c27d4fe885949ea94d1",
"Args": [
"ping",
"docker.com"
],
"Init": false,
"StopGracePeriod": 10000000000,
"DNSConfig": {},
"Isolation": "default"
},
"Resources": {
"Limits": {},
"Reservations": {}
},
"RestartPolicy": {
"Condition": "any",
"Delay": 5000000000,
"MaxAttempts": 0
},
"Placement": {
"Platforms": [
{
"Architecture": "amd64",
"OS": "linux"
},
{
"OS": "linux"
},
{
"OS": "linux"
},
{
"Architecture": "arm64",
"OS": "linux"
},
{
"Architecture": "386",
"OS": "linux"
},
{
"Architecture": "ppc64le",
"OS": "linux"
},
{
"Architecture": "s390x",
"OS": "linux"
}
]
},
"ForceUpdate": 0,
"Runtime": "container"
},
"Mode": {
"Replicated": {
"Replicas": 1
}
},
"UpdateConfig": {
"Parallelism": 1,
"FailureAction": "pause",
"Monitor": 5000000000,
"MaxFailureRatio": 0,
"Order": "stop-first"
},
"RollbackConfig": {
"Parallelism": 1,
"FailureAction": "pause",
"Monitor": 5000000000,
"MaxFailureRatio": 0,
"Order": "stop-first"
},
"EndpointSpec": {
"Mode": "vip"
}
},
"Endpoint": {
"Spec": {}
}
}
]docker service inspect --pretty {service_name}๋ช ๋ น์ด ์ ๋ ฅ ์ ์๋น์ค์ ์ธ๋ถ ์ ๋ณด๋ฅผ ๋ณผ ์ ์๋ค.--pretty์ต์ ์ ์ ๊ฑฐํ๋ฉด json ํ์์ผ๋ก ๋ฐํํ๋ค.
ubuntu@ip-:~$ docker service ps helloworld
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
xr6gphsn80x6 helloworld.1 alpine:latest docker-swarm-1 Running Running about a minute agodocker service ps {service_name}๋ช ๋ น์ด ์ ๋ ฅ ์ ์๋น์ค๋ฅผ ์คํ์ค์ธ ๋ ธ๋๋ฅผ ํ์ธํ ์ ์๋ค.
ubuntu@docker-swarm-1:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
84c745434f77 alpine:latest "ping docker.com" 5 minutes ago Up 5 minutes helloworld.1.xr6gphsn80x6sne1gw7dpqan4- ํด๋น ์์
์ ์คํ์ค์ธ ๋
ธ๋์์
docker ps๋ฅผ ์คํํ๋ฉด ํด๋น ์์ ์ ์ธ๋ถ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๋ค.
ubuntu@ip-:~$ docker service scale helloworld=5
helloworld scaled to 5
overall progress: 5 out of 5 tasks
1/5: running
2/5: running
3/5: running
4/5: running
5/5: running
verify: Service convergeddocker service scale๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐฐํฌ๋ ์๋น์ค์ ๋ ํ๋ฆฌ์นด ์๋ฅผ ์กฐ์ ํ ์ ์๋ค.- ๋จ, ๋์ปค ์ค์์ ์ฟ ๋ฒ๋คํฐ์ค์ ๊ฐ์ ์คํ ์ค์ผ์ผ๋ง ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์๋๋ค.
ubuntu@ip-:~$ docker service ps helloworld
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
xr6gphsn80x6 helloworld.1 alpine:latest docker-swarm-1 Running Running 7 minutes ago
as2oomtuoxqy helloworld.2 alpine:latest docker-swarm-3 Running Running 37 seconds ago
nqtryz8kpe9t helloworld.3 alpine:latest docker-swarm-2 Running Running 36 seconds ago
h77a77vek40e helloworld.4 alpine:latest docker-swarm-2 Running Running 36 seconds ago
z88qhti23kao helloworld.5 alpine:latest docker-swarm-1 Running Running 41 seconds agodocker service ps ${service_name}๋ฅผ ์ ๋ ฅํ๋ฉด ๊ฐ ๋ ธ๋๋ง๋ค ์ ๋ฐ์ดํธ๋ ์์ ๋ชฉ๋ก์ ๋ณผ ์ ์๋ค.
docker service logs {option} {service_name}helloworld.1.xr6gphsn80x6@ip- | 64 bytes from 141.193.213.21: seq=763 ttl=46 time=2.435 ms
helloworld.1.xr6gphsn80x6@ip- | 64 bytes from 141.193.213.21: seq=764 ttl=46 time=2.361 ms
helloworld.1.xr6gphsn80x6@ip- | 64 bytes from 141.193.213.21: seq=765 ttl=46 time=2.339 ms
helloworld.1.xr6gphsn80x6@ip- | 64 bytes from 141.193.213.21: seq=766 ttl=46 time=2.409 ms
helloworld.1.xr6gphsn80x6@ip- | 64 bytes from 141.193.213.21: seq=767 ttl=46 time=2.450 ms
helloworld.1.xr6gphsn80x6@ip- | 64 bytes from 141.193.213.21: seq=768 ttl=46 time=2.373 ms
helloworld.1.xr6gphsn80x6@ip- | 64 bytes from 141.193.213.21: seq=769 ttl=46 time=2.393 ms
helloworld.1.xr6gphsn80x6@ip- | 64 bytes from 141.193.213.21: seq=770 ttl=46 time=2.464 ms
helloworld.1.xr6gphsn80x6@ip- | 64 bytes from 141.193.213.21: seq=771 ttl=46 time=2.368 ms
helloworld.1.xr6gphsn80x6@ip- | 64 bytes from 141.193.213.21: seq=772 ttl=46 time=2.365 ms- ์ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๋ฉด
ping docker.com์๋น์ค๊ฐ ์๋ํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. - ์ค์ ํ ์ ์๋ ์ต์
์ผ๋ก๋ ๋ค์๊ณผ ๊ฐ๋ค.
--follow,-f: ๋ก๊ทธ๋ฅผ ์ฝ์์ ์ค์๊ฐ์ผ๋ก ๊ณ์ ์คํธ๋ฆฌ๋ฐํ์ฌ ์ถ๋ ฅํ๋ค.--tail,-n: ๋ก๊ทธ๋ฅผ ๊ฐ์ฅ ์ต๊ทผ ๊ฒ์ผ๋ก๋ถํฐ ๋ช๊ฐ๊น์ง ์ถ๋ ฅ์ํฌ์ง ์ซ์๋ก ์ ํ๋ค.- ๋ง์ฝ ์์ ๋๋ all๋ก ์ง์ ํ ๊ฒฝ์ฐ ์ ์ฒด ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ๋ค.
--since: ์ง์ ๋ ์๊ฐ ์ดํ์ ๋ก๊ทธ๋ง ์ถ๋ ฅํ๋ค.--timestamp,-t: ๋ก๊ทธ์ ๊ฐ ์ค๋ง๋ค ํ์ ์คํฌํ๋ฅผ ์ถ๊ฐํ์ฌ ์ถ๋ ฅ์ํจ๋ค.
ubuntu@ip-:~$ docker service rm helloworld
helloworld-
๊ด๋ฆฌ์ ๋ ธ๋์์ ๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ์๋น์ค๋ฅผ ์ ๊ฑฐํ ์ ์๋ค.
-
์์ ์ปจํ ์ด๋๋ฅผ ์ ๋ฆฌํ๋๋ฐ ์ผ์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ญ์ ํ๊ณ ๋ฐ๋ก ์กฐํ ์ ์์ง ์ปจํ ์ด๋ ๋ชฉ๋ก์ ์กด์ฌํ ์ ์๋ค.
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES db1651f50347 alpine:latest "ping docker.com" 44 minutes ago Up 46 seconds helloworld.5.9lkmos2beppihw95vdwxy1j3w 43bf6e532a92 alpine:latest "ping docker.com" 44 minutes ago Up 46 seconds helloworld.3.a71i8rp6fua79ad43ycocl4t2 5a0fb65d8fa7 alpine:latest "ping docker.com" 44 minutes ago Up 45 seconds helloworld.2.2jpgensh7d935qdc857pxulfr afb0ba67076f alpine:latest "ping docker.com" 44 minutes ago Up 46 seconds helloworld.4.1c47o7tluz7drve4vkm2m5olx 688172d3bfaa alpine:latest "ping docker.com" 45 minutes ago Up About a minute helloworld.1.74nbhb3fhud8jfrhigd7s29we docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
-
์๋น์ค๊ฐ ์ญ์ ๋๋ฉด ์๋น์ค์ ํฌํจ๋ ๋ชจ๋ ํ ์คํฌ(์ปจํ ์ด๋)๊ฐ ๋ ธ๋์์ ํจ๊ป ์ ๊ฑฐ๋๋ค.
- ๋จ, ์๋น์ค์์ ๋์ปค ๋ณผ๋ฅจ์ ๋ง์ดํธํด์ ์ฌ์ฉํ๊ณ ์์๋ค๋ฉด, ํด๋น ๋ณผ๋ฅจ์ ๋ณ๋๋ก ์ญ์ ํ์ง ์๋ ํ ํด๋ฌ์คํฐ์ ๋จ์์๊ฒ ๋๋ค.
Error response from daemon: Timeout was reached before node joined.
The attempt to join the swarm will continue in the background.
Use the "docker info" command to see the current swarm status of your node.- private๊ฐ ์๋ public ip๋ก ๋งค๋์ ๋ ธ๋๋ฅผ ์ง์ ํด์ฃผ๋ฉด ๋๋ค.
- ์ฐ๋ถํฌ ๋ด๋ถ์์ port ํ์ฉ, AWS ์์ฒด์์ ํฌํธ๋ฅผ ํ์ฉํด์ค๋ค.
ubuntu@ip-:~$ docker service ps helloworld
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
a4vzxy4vqoux helloworld.1 alpine:latest ip- Running Running 2 hours ago
dgeqqpgl329w \_ helloworld.1 alpine:latest ip- Shutdown Failed 2 hours ago "No such container: helloworldโฆ"
n4b623sieipy helloworld.2 alpine:latest ip- Running Running 38 seconds ago
dv6kdbneyykd helloworld.3 alpine:latest ip- Running Running 38 seconds ago-
์ ๋ค๋ฅธ ๋ ธ๋๋ก ํด๋ฌ์คํฐ ๋์ง ์์ ์์ธ์ ์์ปค ๋ ธ๋๊ฐ ๋ค์ด๋์๊ธฐ ๋๋ฌธ..
ubuntu@ip-:~$ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION dueqzu3vaew408t8awg6xe854 ip- Down Active 24.0.5 gb2bdfnxbqhcrqm4gqgtyxlj2 * ip- Ready Active Leader 24.0.5 dp24k5afwv6nprh0fqrty6uda ip- Down Active 24.0.5
