[Docker] 3. λ컀 μ»΄ν¬μ¦(Docker compose)
λ컀 μ»΄ν¬μ¦(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