π‘ λ³Έ λ¬Έμλ Docker Compose 컀맨λ μ¬μ©λ²μ λν΄ μ λ¦¬ν΄ λμ κΈμ λλ€.
Docker Composeλ μ¬λ¬ κ°μ 컨ν μ΄λ(container)λ‘ κ΅¬μ±λ μ ν리μΌμ΄μ μ κ΄λ¦¬νκΈ° μν κ°λ¨ν μ€μΌμ€νΈλ μ΄μ (Orchestration) λꡬμ λλ€. μ΄λ² ν¬μ€ν μμλ Compose μ ν리μΌμ΄μ μ ν°λ―Έλμμ μ μ΄νκΈ° μν΄ μ¬μ©λλ Docker Compose 컀맨λμμ λν΄μ μμλ³΄κ² μ΅λλ€.
Docker Compose μ¬μ©λ²
1. docker-compose.yml νμΌ μμ±
docker containerλ λκ°μ§ λ°©λ²μΌλ‘ λμΈ μ μμ΅λλ€.
- docker run μ΅μ
νμ©
- docker run μ΅μ μΌλ‘ λ¨μΌ 컨ν μ΄λλ₯Ό λμΈ μ μμΌλ©° μμΈν λ΄μ©μ [Docker] Dockerfile μ 리: Docker imageλ₯Ό μμ±νμ μ€ '3. Docker μ΄λ―Έμ§ μ€ννκΈ°: docker container λμ°κΈ°' λ΄μ©μ μ°Έκ³ λΆνλ립λλ€.
- docker-compose.yml νμΌ μμ±
- docker-compose.yml νμΌμ μμ±νμ¬ λ¨μΌ/λ€μ€ 컨ν μ΄λλ₯Ό λμΈ μ μμΌλ©°, μμΈν λ΄μ©μ [Docker] docker compose μ 리 (feat. docker-compose.yml) λ΄μ©μ μ°Έκ³ λΆνλ립λλ€.
λ¨μν μμ κ°μ κ²½μ°λ docker runμ μ¬μ©νμ¬ ν μ μκ² μ§λ§ λλΆλΆ ν μ€νΈλ₯Ό μν΄μλ§ μ¬μ©νλ©°, λμ²΄λ‘ docker-compose νμΌμ μμ±νμ¬ μ»¨ν μ΄λλ₯Ό κ΄λ¦¬ν©λλ€.
2. docker compose λͺ λ Ήμ μ¬μ©νμ¬ μ»¨ν μ΄λ μ€ν
docker compose λͺ λ Ήμ μ¬μ©νμ¬ μ»¨ν μ΄λλ₯Ό μ€ννκΈ° μν΄μλ λ€μμ λͺ λ Ήμ΄λ₯Ό μ¬μ©ν΄μΌ ν©λλ€.
$ docker-compose up
$ docker-compose start
λ¬Όλ‘ , μ€νμ μν΄μλ μμ κ°μ λͺ λ Ήλ§ μ λ ₯νλ©΄ λμ§λ§, μ’ λ£ λ° λͺ¨λν°λ§μ μν΄μλ μ¬λ¬ 컀맨λ μ΅μ μ μ νμκ° μμΌλ νλ¨μμ κ°λ¨ν μ€λͺ νλλ‘ νκ² μ΅λλ€!
Docker Compose 컀맨λ μ΅μ
Docker Compose 컀맨λ μ΅μ μ 리
Option | Description |
-f | λ€λ₯Έ μ΄λ¦μ΄λ κ²½λ‘μ νμΌμ Docker Compose μ€μ νμΌλ‘ μ¬μ©νκ³ μΆμ λ μ¬μ© |
up | Docker Compose νμΌμ μ μλμ΄ μλ λͺ¨λ μλΉμ€ 컨ν μ΄λλ₯Ό ν λ²μ μμ±νκ³ μ€ν |
down | Docker Composeμ μ μλμ΄ μλ λͺ¨λ μλΉμ€ 컨ν μ΄λλ₯Ό ν λ²μ μ μ§(stop)μν€κ³ μμ (rm) |
start | λ΄λ €κ° μλ μλ νΉμ μλΉμ€ 컨ν μ΄λλ₯Ό μ¬λ¦¬κΈ° μν΄μ μ¬μ© |
stop | λμκ°κ³ μλ νΉμ μλΉμ€ 컨ν μ΄λλ₯Ό μ μ§μν€κΈ° μν΄μ μ¬μ© |
ps | Docker Composeμ μ μλμ΄ μλ λͺ¨λ μλΉμ€ 컨ν μ΄λ λͺ©λ‘μ μ‘°νν λ μ¬μ© |
logs | μλΉμ€ 컨ν μ΄λμ λ‘κ·Έλ₯Ό νμΈ |
exec | μ€ν μ€μΈ μλΉμ€ 컨ν μ΄λλ₯Ό λμμΌλ‘ μ΄λ€ λͺ λ Ήμ΄λ₯Ό λ 릴 λ μ¬μ© |
run | μλΉμ€ 컨ν μ΄λμ νΉμ λͺ λ Ήμ΄λ₯Ό μΌνμ±μΌλ‘ μ€νν λ μ¬μ© |
config | Docker Compose μ€μ μ νμΈν λ μ¬μ© |
- νλ¨μμ ν΄λΉ μ΅μ μ λν μμ λ° μμΈν μ€λͺ μ νλλ‘ νκ² μ΅λλ€.
Docker Compose 컀맨λ μ΅μ μ€λͺ
-f μ΅μ
Docker Composeλ κΈ°λ³Έμ μΌλ‘ 컀맨λκ° μ€ννλ λλ ν 리μ μλ docker-compose.yml λλ docker-compose.yamlλ₯Ό μ€μ νμΌλ‘ μ¬μ©ν©λλ€. λ€λ₯Έ μ΄λ¦μ΄λ κ²½λ‘μ νμΌμ Docker Compose μ€μ νμΌλ‘ μ¬μ©νκ³ μΆλ€λ©΄ -f μ΅μ μΌλ‘ λͺ μλ₯Ό ν΄μ€λλ€.
νλμ docker-compose.yml νμΌλ‘ ꡬμ±νκ³ docker-compose up <service-name> μΌλ‘ 컨ν μ΄λλ₯Ό λ°λ‘ λμΈ μλ μμ§λ§, docker-compose downμ νΉμ 컨ν μ΄λλ§ λ€μ΄μν¬ μ μκΈ°μ docker-compose νμΌμ λ°λ‘ λΆλ¦¬ν΄μ κ΄λ¦¬νλ νΈμ΄ μ’μ΅λλ€.
$ docker-compose -f docker-compose-local.yml up
-f μ΅μ μ μ¬λ¬ κ°μ μ€μ νμΌμ μ¬μ©ν λλ μ¬μ©ν μ μμ΅λλ€. μ΄ λλ λμ€μ λμ€λ μ€μ μ΄ μμ λμ€λ μ€μ λ³΄λ€ μ°μ νκ² λ©λλ€.
$ docker-compose -f docker-compose.yml -f docker-compose-test.yml up
up
docker-compose up 컀맨λλ μλ§λ Docker Composeμμ κ°μ₯ μμ£Ό μ¬μ©λλ 컀맨λμ΄λ©°, Docker Compose νμΌμ μ μλμ΄ μλ λͺ¨λ μλΉμ€ 컨ν μ΄λλ₯Ό ν λ²μ μμ±νκ³ μ€ννκΈ° μν΄μ μ¬μ©ν©λλ€.
λν΄νΈλ‘ attach modeμ΄λ, λ³΄ν΅ -d μ΅μ μ μ¬μ©νμ¬ detach modeλ‘ λ°±κ·ΈλΌμ΄λμμ 컨ν μ΄λλ₯Ό λμ°λ κ²½μ°κ° λ§μ΅λλ€.
$ docker-compose up -d
Creating network "django-app_default" with the default driver
Creating django-app_db_1 ... done
Creating django-app_web_1 ... done
- -d μ΅μ μ μ¬μ©νμ§ μμΌλ©΄, νμ¬ ν°λ―Έλμ΄ μ»¨ν μ΄λμ λ‘κ·Έκ° μΆλ ₯λκ³ Ctrl + Cλ₯Ό λλ¬μ λμ€λ μκ° μ»¨ν μ΄λκ° λͺ¨λ μ μ§λκΈ° λλ¬Έμ λλ€.
- κ·Έλ¦¬κ³ λ§μ½ -d μ΅μ μ μ¬μ©νμ§ μμμ κ²½μ°, Ctrl + Zλ₯Ό λλ¬μ attach λͺ¨λλ₯Ό detachλ‘ μ νν μ μμ΅λλ€.
down
docker-compose down 컀맨λλ docker-compose up 컀맨λμ μ λ°λμ λμμ ν©λλ€. Docker Composeμ μ μλμ΄ μλ λͺ¨λ μλΉμ€ 컨ν μ΄λλ₯Ό ν λ²μ μ μ§(stop)μν€κ³ μμ (rm)ν©λλ€. λ§μ½ λ컀 μ»΄ν¬μ¦λ‘ 컨ν μ΄λλ₯Ό λ΄λ¦¬κ³ λ λ°μ΄ν°κ° μ μ§λμ΄μΌ νλ€λ©΄ λ³Όλ₯¨μ μ¬μ©ν΄μΌ ν©λλ€.
$ docker-compose down
Stopping django-app_web_1 ... done
Stopping django-app_db_1 ... done
Removing django-app_web_1 ... done
Removing django-app_db_1 ... done
Removing network django-app_default
- μ΄λ μ΄λ―Έμ§λ₯Ό λΉλνλ€λ©΄, Dockerfileμ μμ νλλΌλ λ€μ docker-compose up νμ λ μ¬λΉλνμ§ μμμ μ μν΄μΌν©λλ€.
- λ°λΌμ μ΄λ―Έμ§κΉμ§ μ¬λΉλν΄μΌ νλ κ²½μ°, docker-compose down ν docker rmiλ‘ μ΄λ―Έμ§λ₯Ό μμ ν docker-compose upμ ν΄μΌ ν©λλ€.
start
docker-compose start 컀맨λλ λ΄λ €κ° μλ μλ νΉμ μλΉμ€ 컨ν μ΄λλ₯Ό μ¬λ¦¬κΈ° μν΄μ μ¬μ©ν©λλ€. λλΆλΆμ κ²½μ°μλ docker-compose up 컀맨λλ₯Ό μ¬μ©ν΄λ λ΄λ €κ° μλΉμ€λ₯Ό μμμ μ¬λ €μ£Όλ―λ‘ λ¬΄λ°©ν©λλ€.
$ docker-compose start web
Starting web ... done
stop
docker-compose stop 컀맨λλ docker-compose start 컀맨λμ μ λ°λμ λμμ ν©λλ€. λμκ°κ³ μλ νΉμ μλΉμ€ 컨ν μ΄λλ₯Ό μ μ§μν€κΈ° μν΄μ μ¬μ©ν©λλ€.
$ docker-compose stop web
Stopping django-app_web_1 ... done
ps
docker-compose ps 컀맨λλ Docker Composeμ μ μλμ΄ μλ λͺ¨λ μλΉμ€ 컨ν μ΄λ λͺ©λ‘μ μ‘°νν λ μ¬μ©ν©λλ€.
$ docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------------
django-app_db_1 docker-entrypoint.sh postgres Up 5432/tcp
django-app_web_1 python manage.py runserver ... Up 0.0.0.0:8000->8000/tcp
logs
docker-compose logs 컀맨λλ μλΉμ€ 컨ν μ΄λμ λ‘κ·Έλ₯Ό νμΈνκ³ μΆμ λ μ¬μ©νλ©°, λ³΄ν΅ -f μ΅μ μ λΆμ¬μ μ€μκ° λ‘κ·Έλ₯Ό νμΈν©λλ€.
$ docker-compose logs -f web
Attaching to django-app_web_1
web_1 | Watching for file changes with StatReloader
web_1 | Performing system checks...
web_1 |
web_1 | System check identified no issues (0 silenced).
web_1 |
web_1 | May 30, 2020 - 22:16:29
web_1 | Django version 3.0.6, using settings 'our_project.settings'
web_1 | Starting development server at http://0:8000/
web_1 | Quit the server with CONTROL-C.
exec
docker-compose exec 컀맨λλ μ€ν μ€μΈ μλΉμ€ 컨ν μ΄λλ₯Ό λμμΌλ‘ μ΄λ€ λͺ λ Ήμ΄λ₯Ό λ 릴 λ μ¬μ©ν©λλ€.
$ docker-compose exec db psql postgres postgres
psql (12.2 (Debian 12.2-2.pgdg100+1))
Type "help" for help.
postgres=#
run
docker-compose run 컀맨λλ μλΉμ€ 컨ν μ΄λμ νΉμ λͺ λ Ήμ΄λ₯Ό μΌνμ±μΌλ‘ μ€νν λ μ¬μ©ν©λλ€.
$ docker-compose run web env
PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=10757eb6642e
TERM=xterm
LANG=C.UTF-8
GPG_KEY=E3FF2839C048B25C084DEBE9B26995E310250568
PYTHON_VERSION=3.8.2
PYTHON_PIP_VERSION=20.1
PYTHON_GET_PIP_URL=https://github.com/pypa/get-pip/raw/1fe530e9e3d800be94e04f6428460fc4fb94f5a9/get-pip.py
PYTHON_GET_PIP_SHA256=ce486cddac44e99496a702aa5c06c5028414ef48fdfd5242cd2fe559b13d4348
PYTHONUNBUFFERED=1
HOME=/root
config
docker-compose config 컀맨λλ Docker Compose μ€μ μ νμΈν λ μ¬μ©ν©λλ€. -f μ΅μ μΌλ‘ μ¬λ¬ κ°μ μ€μ νμΌμ μ¬μ©ν λ, μ΅μ’ μ μΌλ‘ μ΄λ»κ² μ€μ μ΄ μ μ©λλμ§ νμΈν΄λ³Ό λ μ μ©ν©λλ€.
$ docker-compose config
services:
db:
environment:
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
image: postgres
web:
build:
context: /Users/dale/temp/django-app
command: python manage.py runserver 0:8000
depends_on:
- db
ports:
- 8000:8000/tcp
volumes:
- /Users/dale/temp/django-app:/web:rw
version: '3.0'
λ§μΉλ©°
- μ΄μμΌλ‘ μμ£Ό μ¬μ©λλ Docker Compose 컀맨λ μμ£Όλ‘ κ°λ¨νκ² μ΄λ»κ² μ¬μ©νλμ§ μ΄ν΄λ³΄μμ΅λλ€.
- Docker Composeμ λ€λ₯Έ 컀맨λλ Docker 곡μ λ νΌλ°μ€λ₯Ό μ°Έκ³ λ°λλλ€.
μ°Έκ³
- Docker Compose 컀맨λ μ¬μ©λ²: https://www.daleseo.com/docker-compose/
- μ¬λ¬ κ°μ docker-compose νμΌ μ¬μ©νκΈ° | multiple docker-compose files: https://another-light.tistory.com/111
'Study: DeveloperTools(DevTool) > DevTool: Container' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Docker] λ컀 λ€νΈμν¬ μ 리 (feat. docker network) (0) | 2022.10.27 |
---|---|
[Docker] Privileged Containerμ λνμ¬ (1) | 2022.10.03 |
[Docker] docker-compose VS docker compose μ°¨μ΄μ λΉκ΅ (0) | 2022.09.07 |
[Docker] docker compose μ 리 (feat. docker-compose.yml) (0) | 2022.09.05 |
[Docker] Dockerfile μ 리: Docker imageλ₯Ό μμ±νμ (feat. Docker 컀λ©λ) (0) | 2022.09.04 |