Post

[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 ํ•œ ๋ฒˆ์œผ๋กœ ๋„์šฐ๋Š” ๊ฒƒ์ด๋‹ค. ์˜์กด์„ฑยท๋„คํŠธ์›Œํฌยท๋ณผ๋ฅจ์„ ํ•จ๊ป˜ ์ •์˜ํ•ด, ๋ณต์žกํ•œ ๋ฉ€ํ‹ฐ ์ปจํ…Œ์ด๋„ˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋„ ์žฌํ˜„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋‹ค.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.