๋์ปค ์ปดํฌ์ฆ(Docker compose)
๋์ปค ์ปดํฌ์ฆ๋ ๋์ปค ์ปจํ ์ด๋ ์คํ ์์์ ํ๋ฆ์ ํ๋์ ๋ณผ ์ ์์ต๋๋ค. ๋ํ ์คํ์ ๊ดํ ๋ช ์ธ๋ฅผ ์ ์ด ๋์ผ๋ ์ด๋ค ์๋น์ค๋ค์ด ์ฐ๊ด๋์ด ์๊ณ ์์๊ฐ ์ด๋ป๊ฒ ์งํ๋๋์ง ๋ณผ ์ ์์ต๋๋ค. ๋ฐ๋ก ์์ธ ์ค๋ช ์ด ๋์ค๊ฒ ์ง๋ง, ์ ๊ฐ ์๊ฐํ๋ ๋์ปค ์ปดํฌ์ฆ์ ์ต๋ ์ฅ์ ์ "Docker run(์คํ)์ ์ฝ๋ํ"๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์์ธํ ์ดํด๋ณด์์ฃ .
Docker Compose๋?
Docker Compose๋ ์ฌ๋ฌ ๊ฐ์ Docker ์ปจํ ์ด๋๋ฅผ ์ ์ํ๊ณ ๋์์ ๊ด๋ฆฌํ ์ ์๋๋ก ๋๋ ๋๊ตฌ์ ๋๋ค. ๋จ์ผ docker-compose.yml ํ์ผ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ ์ปจํ ์ด๋ ์ ์(์๋น์ค, ๋คํธ์ํฌ, ๋ณผ๋ฅจ ๋ฑ)๋ฅผ ์์ฑํ๊ณ , ๋ช ๋ น ํ ์ค๋ก ๊ด๋ จ ์ปจํ ์ด๋๋ฅผ ์์, ์ค์ง, ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
Docker Compose๋ฅผ ์ฌ์ฉํ๋ ์ด์
Docker Compose๋ ์ปจํ ์ด๋ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ๋ฐ ๋ฐฐํฌ์์ ์๋์ ๊ฐ์ ์ด์ ๋ก ๋งค์ฐ ์ ์ฉํฉ๋๋ค:
1. ๋ค์ค ์ปจํ ์ด๋ ๊ด๋ฆฌ
๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข ์ข ์ฌ๋ฌ ์ปจํ ์ด๋๋ก ๊ตฌ์ฑ๋ฉ๋๋ค(์: ์น ์๋ฒ, ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์บ์ ์๋ฒ ๋ฑ).
Compose๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ ์ปจํ ์ด๋์ ์ค์ ์ ํ๊ณณ์์ ์ ์ํ๊ณ , ์ฝ๊ฒ ์ ์ฒด ์์คํ ์ ์์ํ๊ฑฐ๋ ์ค์งํ ์ ์์ต๋๋ค.
- ์: frontend, backend, database ์ปจํ ์ด๋๋ฅผ ํ๊บผ๋ฒ์ ์คํ.
2. ๊ฐํธํ ์ค์ ๋ฐ ์ฌ์ฌ์ฉ์ฑ
์ปจํ ์ด๋์ ์ค์ ์ ๋ณด๋ฅผ docker-compose.yml ํ์ผ์ ์ ์ธ์ ์ผ๋ก ์ ์ํ๋ฏ๋ก:
- ์ค์ ์ ๊ณต์ ํ๊ฑฐ๋ ๋ฒ์ ๊ด๋ฆฌ(Git)ํ๊ธฐ ์ฝ์ต๋๋ค.
- ํ์ ๊ฐ ๋์ผํ ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ตฌ์ถํ๊ธฐ ์ฉ์ดํฉ๋๋ค.
3. ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ ๋ฐ ํ ์คํธ
๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์์ ์ฌ๋ฌ ์ปจํ ์ด๋๋ฅผ ์์ฝ๊ฒ ์คํํ์ฌ ํ๋ก๋์ ํ๊ฒฝ๊ณผ ์ ์ฌํ ์ํ๋ฅผ ์ฌํํ ์ ์์ต๋๋ค.
- ์: docker-compose up์ ํตํด ๊ฐ๋ฐ, ํ ์คํธ, QA ํ๊ฒฝ์ ๋์ผํ๊ฒ ์ฌํ.
4. ๋คํธ์ํน ๋ฐ ์ฐ๊ฒฐ ๊ด๋ฆฌ
Compose๋ ๋คํธ์ํฌ๋ฅผ ์๋์ผ๋ก ์ค์ ํ๊ณ , ์๋ก ๋ค๋ฅธ ์ปจํ ์ด๋ ๊ฐ ํต์ ์ ๊ฐํธํ๊ฒ ๊ด๋ฆฌํฉ๋๋ค.
- ์: backend ์ปจํ ์ด๋๊ฐ database ์ปจํ ์ด๋์ ์ด๋ฆ์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅ (service name ๊ธฐ๋ฐ).
5. ํจ์จ์ ์ธ ๋ฐฐํฌ ๋ฐ ์ค์ผ์ผ๋ง
Docker Compose๋ Docker Swarm๊ณผ ์ฐ๊ณํ์ฌ ์ค์ผ์ผ๋ง ๋ฐ ๋ฐฐํฌ๋ ๊ฐ๋ฅํ๋ฉฐ, ์ฌ๋ฌ ์ธ์คํด์ค์ ์ปจํ ์ด๋๋ฅผ ์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
- ์: docker-compose up --scale web=3์ผ๋ก ์น ์๋ฒ๋ฅผ 3๊ฐ๋ก ํ์ฅ.
6. ๋ณผ๋ฅจ ๋ฐ ๋ฐ์ดํฐ ์ ์ง ๊ด๋ฆฌ
์๋น์ค ๊ฐ ๊ณต์ ๋๋ ๋ฐ์ดํฐ ๋ณผ๋ฅจ์ ์ฝ๊ฒ ์ ์ํ๊ณ ๊ด๋ฆฌํ ์ ์์ด ๋ฐ์ดํฐ ์์์ฑ์ ์ ์งํฉ๋๋ค.
- ์: volumes๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ์ดํฐ๋ฅผ ํธ์คํธ ๋จธ์ ์ ์ ์ฅ.
Docker Compose์ ์ฃผ์ ๊ตฌ์ฑ ์์
- Services: ์ปจํ
์ด๋ ๋จ์์ ์คํ ํ๊ฒฝ ์ ์.
- ์: web, db์ ๊ฐ์ ์๋น์ค.
- Networks: ์ปจํ ์ด๋ ๊ฐ ํต์ ์ ์ํ ๋คํธ์ํฌ ์ค์ .
- Volumes: ๋ฐ์ดํฐ ๊ณต์ ๋ฐ ์์์ฑ์ ์ํ ๋ณผ๋ฅจ ์ค์ .
Docker Compose ์ฌ์ฉ ์์
docker-compose.yml ์์ ํ์ผ
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080:80"
networks:
- app-network
app:
build:
context: ./app
volumes:
- .:/app
depends_on:
- db
networks:
- app-network
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- db-data:/var/lib/mysql
networks:
- app-network
volumes:
db-data:
networks:
app-network:
์คํ ๋ฐฉ๋ฒ
- ์ปจํ ์ด๋ ์คํ: docker-compose up -d
- ์คํ๋ ์ปจํ ์ด๋ ํ์ธ: docker-compose ps
- ์ปจํ ์ด๋ ์ข ๋ฃ ๋ฐ ์ญ์ : docker-compose down
์ต์ Docker Compose
docker-compose up/down ๋ฑ์ผ๋ก ์คํํ๋ ๊ฒ์ ํ์ด์ฌ ๊ธฐ๋ฐ์ version1์ด๋ฉฐ ๋์ด์ ์ง์๋์ง ์์ต๋๋ค(๋ค๋ง ๊ด๋ฆฌ๋ ๊ณ์ ๋จ). ์ต์ ๋ฒ์ ์ compose.yaml๋ก ๊ด๋ฆฌ๋๋ฉฐ docker compose up/down์์ Go๊ธฐ๋ฐ์ v2์ ๋๋ค.
Docker compose v2 ์ค์ต
docker compose --help
# compose.yaml ์๋น์ค์ build๊ฐ ์กด์ฌํ๋ ๋ชจ๋ ๊ฒ๋ค ๋น๋ ์งํ
docker compose build
# ์๋น์ค ๋ฐ ๋คํธ์ํฌ ์์ฑ
docker compose up
# ์๋น์ค ๋ฐ ๋คํธ์ํฌ ์ญ์
docker compose down
# ์๋น์ค ๋ฐ ๋คํธ์ํฌ ์์ฑ(๋ฐฑ๊ทธ๋ผ์ด๋)
docker compose up -d
# ์ปดํฌ์ฆ ํ๋ก์ ํธ ํํฉ(์๋น์ค๋ ํ๋ก์ ํธ์ ํ์)
docker compose ls
# ํญ์ ๋น๋ ํ๋ฉด์ up ์ํค๊ธฐ
# ์ปดํฌ์ฆ๋ ๋์ผํ ์ด๋ฏธ์ง ์ด๋ฆ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ, build๋ฅผ ์๋ตํจ
docker compose up -d --build
docker compose logs -h
docker compose logs -f
docker compose down
docker compose ls, docker compose images
๋ ๋ช ๋ น์ด๋ Docker Compose ํ๊ฒฝ์์ ์ ๋ณด๋ฅผ ์กฐํํ๋ ๋ฐ ์ฌ์ฉ๋์ง๋ง, ์๋ก ๋ค๋ฅธ ๋์๊ณผ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
1. docker compose ls
- ๋ชฉ์ : Docker Compose๋ก ๊ด๋ฆฌ ์ค์ธ ํ๋ก์ ํธ ๋ชฉ๋ก์ ํ์.
- ์ฃผ์ ์ ๋ณด:
- ๊ฐ ํ๋ก์ ํธ์ ์ด๋ฆ.
- ํ๋ก์ ํธ๊ฐ ์คํ๋๊ณ ์๋ ์ํ(Status).
- ๊ตฌ์ฑ ํ์ผ์ ๊ฒฝ๋ก(Working Directory).
- ์ฌ์ฉ ์ด์ :
- ์ฌ๋ฌ Docker Compose ํ๋ก์ ํธ๋ฅผ ๊ด๋ฆฌํ ๋ ๊ฐ๊ฐ์ ์ํ๋ฅผ ํ๋์ ํ์ธ.
- ์คํ ์ค์ธ ํ๋ก์ ํธ๋ฅผ ์๋ณํ๊ฑฐ๋ ์์ ๋๋ ํ ๋ฆฌ๋ฅผ ํ์ธ.
- ์ถ๋ ฅ ์์:
- NAME: Docker Compose ํ๋ก์ ํธ ์ด๋ฆ.
- STATUS: ํด๋น ํ๋ก์ ํธ์ ์ปจํ ์ด๋ ์ํ(running, exited ๋ฑ).
- CONFIG FILES: ์ฌ์ฉ๋ docker-compose.yml ํ์ผ ๊ฒฝ๋ก.
$ docker compose ls
NAME STATUS CONFIG FILES
my_project running ./docker-compose.yml
another_project exited ./another-dir/docker-compose.yml
2. docker compose images
- ๋ชฉ์ : ํน์ Docker Compose ํ๋ก์ ํธ์์ ์ฌ์ฉ๋ Docker ์ด๋ฏธ์ง ๋ชฉ๋ก์ ํ์.
- ์ฃผ์ ์ ๋ณด:
- ์ด๋ฏธ์ง ์ด๋ฆ๊ณผ ํ๊ทธ.
- ์ปจํ ์ด๋ ์ด๋ฆ.
- ์ด๋ฏธ์ง ID.
- ์ด๋ฏธ์ง ํฌ๊ธฐ.
- ์ฌ์ฉ ์ด์ :
- ํ๋ก์ ํธ์์ ์ฌ์ฉ๋ ์ด๋ฏธ์ง ์ ๋ณด๋ฅผ ํ์ธ.
- ์ด๋ฏธ์ง ํ๊ทธ๋ฅผ ๊ฒํ ํ๊ฑฐ๋, ํ์ ์๋ ์ด๋ฏธ์ง๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ ์ ์ฐธ๊ณ .
- ์ถ๋ ฅ ์์:
- Container: Compose ํ๋ก์ ํธ์์ ์ ์๋ ์๋น์ค ์ด๋ฆ.
- Repository: ์ฌ์ฉ๋ Docker ์ด๋ฏธ์ง์ ๋ฆฌํฌ์งํ ๋ฆฌ ์ด๋ฆ.
- Tag: Docker ์ด๋ฏธ์ง ํ๊ทธ.
- Image ID: ์ด๋ฏธ์ง์ ๊ณ ์ ID.
- Size: ์ด๋ฏธ์ง์ ํฌ๊ธฐ.
$ docker compose images
Container Repository Tag Image ID Size
my_project_web nginx latest a1b2c3d4e5f6 23MB
my_project_db postgres 14.1 f6e5d4c3b2a1 40MB
์ฐจ์ด์ ์์ฝ
๋ช ๋ น์ด | ์ฃผ์ ๋์ | ์ถ๋ ฅ ์ ๋ณด | ์ฌ์ฉ ๋ชฉ์ |
docker compose ls | Docker Compose ํ๋ก์ ํธ | ํ๋ก์ ํธ ์ด๋ฆ, ์ํ, ๊ตฌ์ฑ ํ์ผ ๊ฒฝ๋ก | ์ฌ๋ฌ ํ๋ก์ ํธ๋ฅผ ๊ด๋ฆฌํ๊ฑฐ๋ ์ํ๋ฅผ ํ๋์ ํ์ ํ ๋. |
docker compose images | Docker Compose ์ด๋ฏธ์ง | ์ปจํ ์ด๋, ์ด๋ฏธ์ง ์ด๋ฆ/ํ๊ทธ, ID, ํฌ๊ธฐ | ํน์ ํ๋ก์ ํธ์์ ์ฌ์ฉ๋ Docker ์ด๋ฏธ์ง ์ ๋ณด๋ฅผ ํ์ธํ ๋. |
์ฌ์ฉ ์์
1. ํ๋ก์ ํธ ์ํ ํ์ธ
$ docker compose ls
NAME STATUS CONFIG FILES
my_app running ./docker-compose.yml
2. ํน์ ํ๋ก์ ํธ์ ์ด๋ฏธ์ง ์ ๋ณด ํ์ธ
$ docker compose images
Container Repository Tag Image ID Size
my_app_web python 3.10 abc12345 150MB
my_app_db mysql 8.0 def67890 300MB
'์๋น์ค & ํด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Docker] 2. ๋์ปค ๋คํธ์ํฌ์ ๋์ปค ์คํ ๋ฆฌ์ง (0) | 2025.01.02 |
---|---|
[Docker] 1. ๋์ปค, ์ด๋ฏธ์ง, ์ปจํ ์ด๋, ๋ ์ง์คํธ๋ฆฌ (0) | 2024.12.24 |
[Metric] ํ๋ก๋ฉํ ์ฐ์ค + ๊ทธ๋ผํ๋ (0) | 2024.12.23 |
[๋ฉ์ธ์ง ๋ธ๋ก์ปค] RabbitMQ vs Apache KafKa (0) | 2024.12.16 |
[git] Git rebase(๋ฆฌ๋ฒ ์ด์ค)๋? (0) | 2023.08.10 |
๋๊ธ