[Docker] ๋์ปค์ค์(Docker Swarm)
๐ ๋ค์ด๊ฐ๋ฉฐ
์ด๋ฒ ๊ธ์์๋ ์ฌ๋ฌ ์ปจํ ์ด๋๋ก ์ด๋ค์ง ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ๋ฐฉ์ ๊ด๋ฆฌํ๋ Docker Compose๋ฅผ ์ ๋ฆฌํ๋ค. ์ค์ ์๋น์ค๋ ์นยท๋ฐฑ์๋ยทDB์ฒ๋ผ ์ฌ๋ฌ ์ปจํ ์ด๋๊ฐ ์ฝํ ๋์ํ๋๋ฐ, ์ด๋ฅผ YAML ํ์ผ ํ๋๋ก ์ ์ํ๊ณ ๋จ์ผ ๋ช ๋ น์ผ๋ก ๋ค๋ฃฌ๋ค.
Docker Compose๋?
docker-compose.yml(YAML ํ์ผ) ํ๋๋ก ์ฌ๋ฌ ์ปจํ ์ด๋๋ฅผ ์ ์ํ๊ณ , ๋จ์ผ ๋ช ๋ น์ผ๋ก ์์ฑยท์คํยท์ค์งยท์ญ์ ํ๋ ๋๊ตฌ. ์ปจํ ์ด๋ ๊ฐ ์์กด์ฑยท๋คํธ์ํฌยท๋ณผ๋ฅจยทํ๊ฒฝ ๋ณ์๋ฅผ ํ๊ณณ์์ ๊ด๋ฆฌํ๋ค.
1. ์ Compose์ธ๊ฐ
์ฌ๋ฌ ์ปจํ
์ด๋๋ฅผ docker run์ผ๋ก ํ๋์ฉ ๋์ฐ๋ฉด ๋ฒ๊ฑฐ๋กญ๊ณ ์ค์๊ฐ ์ฆ๋ค. Compose๋ ์ด๋ฅผ ์ ์ธ์ YAML๋ก ๋ฌถ๋๋ค.
| ์ด์ | ์ค๋ช |
|---|---|
| ๋ฉํฐ ์ปจํ ์ด๋ ๊ด๋ฆฌ | YAML ํ๋ + ๋จ์ผ ๋ช ๋ น์ผ๋ก ์ ์ฒด ์ ์ด |
| ์์กด์ฑ ๊ด๋ฆฌ | depends_on์ผ๋ก ์คํ ์์ ์ง์ |
| ๋คํธ์ํฌยท๋ณผ๋ฅจ | ํต์ ๋คํธ์ํฌยท์์ ๋ณผ๋ฅจ ํจ๊ป ์ ์ |
| ํ๊ฒฝ ๋ณ์ | ์ปจํ ์ด๋ ์ค์ ์ YAML์ ์ ์ |
| ํ์ฅ์ฑ | scale/deploy.replicas๋ก ๊ฐ์ ์กฐ์ |
๐ก ์๋ฅผ ๋ค์ด ์น ์๋ฒ๋ DB๊ฐ ๋จผ์ ๋ ์์ด์ผ ์ ์ ๋์ํ๋ค.
depends_on: [db]๋ฅผ ์ฐ๋ฉด Compose๊ฐ DB๋ฅผ ๋จผ์ ์คํํ ๋ค ์น์ ๋์, ์คํ ์์ ๋ฌธ์ ๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ค.
2. YAML ๊ธฐ๋ณธ ๊ตฌ์กฐ & ์ต์
1
2
3
4
5
6
7
8
9
version: '3.8' # Compose ํ์ผ ๋ฒ์
services: # ์ปจํ
์ด๋ ์๋น์ค๋ค
์๋น์ค๋ช
1:
image: ์ด๋ฏธ์ง ์ด๋ฆ # ์ฌ์ฉํ ์ด๋ฏธ์ง
# ... ์ค์
์๋น์ค๋ช
2:
# ...
networks: # ๋คํธ์ํฌ(์ ํ)
volumes: # ๋ณผ๋ฅจ(์ ํ)
| ์ต์ | ์ญํ |
|---|---|
build / image | ๋น๋ ์ค์ / ์ฌ์ฉํ ์ด๋ฏธ์ง |
container_name | ์ปจํ ์ด๋ ์ด๋ฆ |
depends_on | ์๋น์ค ์์กด์ฑ(์คํ ์์) |
environment | ํ๊ฒฝ ๋ณ์ |
ports | ํธ์คํธ:์ปจํ ์ด๋ ํฌํธ ๋งคํ |
volumes | ๋ณผ๋ฅจ ๋ง์ดํธ |
networks | ์ฐ๊ฒฐ ๋คํธ์ํฌ |
restart | ์ฌ์์ ์ ์ฑ |
deploy | ๋ฐฐํฌ ์ค์ (replicasยทresources) |
healthcheck | ์ํ ํ์ธ |
3. ์ฃผ์ CLI ๋ช ๋ น์ด
1
2
3
4
5
6
7
docker-compose up -d # ์์ฑ + ์คํ(๋ฐฑ๊ทธ๋ผ์ด๋)
docker-compose down # ์ค์ง + ์ญ์
docker-compose ps # ๋ชฉ๋ก ํ์ธ
docker-compose logs # ๋ก๊ทธ ํ์ธ
docker-compose build # ์ด๋ฏธ์ง ๋น๋
docker-compose config # YAML ๊ฒ์ฆ
docker-compose scale <์๋น์ค>=N # ๊ฐ์ ์กฐ์
4. 3-Tier ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ
ํ๋ก ํธ์๋ + ๋ฐฑ์๋ + DB์ 3๊ณ์ธต์ ํ๋์ Compose๋ก ๋ฐฐํฌํ๋ค.
flowchart LR
User(("๐ ์ฌ์ฉ์"))
subgraph Compose["docker-compose"]
FE["๐ฅ๏ธ frontend<br/>:80โ3000"]
BE["โ๏ธ backend"]
DB[("๐๏ธ db (mysql)<br/>+ db_data ๋ณผ๋ฅจ")]
end
User --> FE
FE -- frontend net --> BE
BE -- backend net --> DB
ํ๋ก์ ํธ ๊ตฌ์กฐ:
1
2
3
4
my-app/
โโ docker-compose.yml
โโ frontend/ (Dockerfile ...)
โโ backend/ (Dockerfile ...)
docker-compose.yml:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
version: '3.8'
services:
frontend:
build: ./frontend
ports:
- "80:3000"
networks:
- frontend
depends_on:
- backend
backend:
build: ./backend
networks:
- frontend
- backend
depends_on:
- db
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: your_password
networks:
- backend
networks:
frontend:
backend:
volumes:
db_data:
์คํ:
1
docker-compose up --build -d
๐ก ๋คํธ์ํฌ ๋ถ๋ฆฌ๊ฐ ๋ณด์ ํฌ์ธํธ๋ค. DB๋
backend๋คํธ์ํฌ์๋ง ๋์ด, ํ๋ก ํธ์๋๊ฐ DB์ ์ง์ ์ ๊ทผํ์ง ๋ชปํ๊ฒ ํ๋ค. ํ๋ก ํธ๋ ๋ฐฑ์๋ํ๊ณ ๋ง, ๋ฐฑ์๋๋ DBํ๊ณ ๋ง ํต์ ํ๋ ๊ณ์ธต ๊ตฌ์กฐ๊ฐ ์์ฐ์ค๋ฝ๊ฒ ๋ง๋ค์ด์ง๋ค. DB ๋ฐ์ดํฐ๋db_data๋ณผ๋ฅจ์ผ๋ก ์์ํ๋๋ค.
๐ ์ ๋ฆฌ
1
2
3
4
5
Docker Compose
โโ ๊ฐ๋
YAML ํ๋๋ก ๋ฉํฐ ์ปจํ
์ด๋ ์ ์ยท๊ด๋ฆฌ
โโ ๊ตฌ์กฐ services / networks / volumes
โโ ๋ช
๋ น up -d / down / ps / logs / scale
โโ ์์ 3-Tier(frontend/backend/db) + ๋คํธ์ํฌ ๋ถ๋ฆฌ
| ๊ฐ๋ | ํ ์ค ์ ์ |
|---|---|
| Compose | ๋ฉํฐ ์ปจํ ์ด๋ ์ ์ธ์ ๊ด๋ฆฌ |
| depends_on | ์๋น์ค ์คํ ์์ |
| ๋คํธ์ํฌ ๋ถ๋ฆฌ | ๊ณ์ธต ๊ฐ ์ ๊ทผ ํต์ |
Compose์ ํต์ฌ์ ์ฌ๋ฌ ์ปจํ
์ด๋๋ฅผ YAML ํ๋๋ก ์ ์ธํ๊ณ up ํ ๋ฒ์ผ๋ก ๋์ฐ๋ ๊ฒ์ด๋ค. ์์กด์ฑยท๋คํธ์ํฌยท๋ณผ๋ฅจ์ ํจ๊ป ์ ์ํด, ๋ณต์กํ ๋ฉํฐ ์ปจํ
์ด๋ ์ ํ๋ฆฌ์ผ์ด์
๋ ์ฌํ ๊ฐ๋ฅํ๊ฒ ๋ฐฐํฌํ ์ ์๋ค.
Comments powered by Disqus.