๐ ์๋ก ์๊ฒ๋ ์
- docker-compose network ๋ถ๋ถ back๊ณผ front๋ก ๋๋๊ธฐ
- docker-compose up์ # build => create => start ๊ณผ์
- docker-compose ์ต์ ์ค healthcheck
Docker Compose๋?
๋ค์์ Container๋ก ์ํํธ์จ์ด๊ฐ ๊ตฌ์ฑ๋๋ ๊ฒฝ์ฐ ์ฌ์ฉํ ์ ์๋ ํ๊ฒฝ ์ค์ ํ์ผ
ํ์ผ : docker-compose.yaml ํน์ .yml
- ๋ค๋ฅธ ์ด๋ฆ ํ์ผ ์ฌ์ฉ์ -f ์ต์ ์ฌ์ฉ
docker-compose -f docker-compose.mac.yml up
Docker Compose v.1.27+ ๋ถํฐ v2์ v3๊ฐ ํฉ์ณ์ง
- v1์ docker-compose, v2๋ docker compose์ธ๋ฐ, ๋๋ถ๋ถ์ ๋ฌธ์๊ฐ docker-compose ์ค์ฌ์
- ๋ฒ์ ํ์ธ : docker-compose --version
#๏ธโฃ 1. ๊ตฌ์ฑ
- services: ๋ค์์ผ๋ก ํ๋ก๊ทธ๋จ์ ๊ตฌ์ฑํ๋ ์๋น์ค๋ค์ ์ง์
- ๊ฐ ์๋น์ค๋ ์์ ์ Dockerfile ๊ฐ๊ณ ์์
- ๊ฐ ์๋น์ค๋ ๋ณ๋์ docker Image ์ง์ ๊ณผ Docker Container ์คํ์ผ๋ก ๊ตฌ์ฑ๋จ
- ์๋น์ค๋ณ๋ก ํฌํธ๋ฒํธ, ํ๊ฒฝ๋ณ์, ๋์คํฌ ๋ณผ๋ฅจ๋ฑ์ ์ง์
- ์๋น์ค ์ด๋ฆ์ ์๋ฌด ์ด๋ฆ์ด๋ ๊ฐ๋ฅ
- volumes : docker volume๋ค์ ์ง์
- networks : network๋ค์ ์ง์
- ์ง์ ์ ํ๋ฉด “default” ์ด๋ฆ์ผ๋ก ๊ธฐ๋ณธ ๋คํธ์ํฌ ๋ง๋ค์ด์ง๊ณ , ๊ฐ์ docker-compose ๊ทธ๋ฃน ๋ด์์ ๋ชจ๋ ์ฐ๊ฒฐ๋จ
- services์ ์ค ์ด๋ฆ์ผ๋ก ํธ์คํธ ์ด๋ฆ์ด ์์ฑ๋จ
- ๋ด๋ถ์ DNS ์๋ฒ๊ฐ ํ๋ ์์ฑ๋์ด ์ด๋ฆ์ ๋ด๋ถ IP๋ก ๋ณํํด์ค
์์ docker-compose.yaml
services:
web:
build: .
ports:
- "8000:5000"
volumes:
- .:/code
environment:
FLASK_DEBUG: "true"
redis:
image: "redis:alpine"
https://docs.docker.com/compose/gettingstarted/
#๏ธโฃ 2. ๊ด๋ จ ๋ช ๋ น์ด
docs : Overview of docker compose CLI
- docker-compose build : compose ํ์ผ ๋น๋
- docker-compose start : ์๋น์ค ์์
- docker-compose stop : ์๋น์ค ์ค์ง
- docker-compose create: ์๋น์ค๋ฅผ ์ํ ์ปจํ ์ด๋ ์์ฑ
- docker-compose up : # build => create => start
- docker-compose pull : docker hub์์ ์ด๋ฏธ์ง ์ฝ์ด์ด
- docker-compose push : docker hub๋ก ์ด๋ฏธ์ง push
- docker-compose images : ์ปจํ ์ด๋๋ก ์คํ๋๊ณ ์๋ ์ด๋ฏธ์ง ๋ชฉ๋ก
- docker-compose ps : ์ปจํ ์ด๋ ๋ชฉ๋ก
- docker-compose down : ์ปจํ ์ด๋ ์ค์ง ๋ฐ ๋คํธ์ํฌ์ ํจ๊ป ์ญ์
- docker-compose rm : ์ค์ง๋ ์ปจํ ์ด๋ ์๋น์ค ์ญ์
- docker-compose ls : docker-compose๋ฅผ ๊ทธ๋ฃน๋ณ๋ก ๋ณด์ฌ์ค
- docker compose —help
Usage: docker compose [OPTIONS] COMMAND
Define and run multi-container applications with Docker.
Options:
--ansi string Control when to print ANSI control characters ("never"|"always"|"auto") (default "auto")
--compatibility Run compose in backward compatibility mode
--env-file stringArray Specify an alternate environment file.
-f, --file stringArray Compose configuration files
--parallel int Control max parallelism, -1 for unlimited (default -1)
--profile stringArray Specify a profile to enable
--project-directory string Specify an alternate working directory
(default: the path of the, first specified, Compose file)
-p, --project-name string Project name
Commands:
build Build or rebuild services
config Parse, resolve and render compose file in canonical format
cp Copy files/folders between a service container and the local filesystem
create Creates containers for a service.
down Stop and remove containers, networks
events Receive real time events from containers.
exec Execute a command in a running container.
images List images used by the created containers
kill Force stop service containers.
logs View output from containers
ls List running compose projects
pause Pause services
port Print the public port for a port binding.
ps List containers
pull Pull service images
push Push service images
restart Restart service containers
rm Removes stopped service containers
run Run a one-off command on a service.
start Start services
stop Stop services
top Display the running processes
unpause Unpause services
up Create and start containers
version Show the Docker Compose version information
Run 'docker compose COMMAND --help' for more information on a command.
#๏ธโฃ 3. docker-compose ํ์ผ ์ค์
docs : https://docs.docker.com/compose/compose-file/compose-file-v3/
โ build
๋น๋ ์ ์ ์ฉ๋๋ ๊ตฌ์ฑ ์ต์
๊ฐ๋จํ๊ฒ ๊ตฌ์ฑํ๋ฉด ์๋ ์ฒ๋ผ ์์ฑํ ์ ์๋ค.
version: "3.9"
services:
webapp:
build: ./dir
์ง์ ๋ ๊ฒฝ๋ก/์ด๋ฆ์ ๊ฐ์ง ๊ฒฝ์ฐ ์๋ ์ฒ๋ผ ์ถ๊ฐ๋ก ์์ฑ ๊ฐ๋ฅํ๋ค.
version: "3.9"
services:
webapp:
build:
context: ./dir
dockerfile: Dockerfile-alternate
args:
buildno: 1
โ healthcheck
์๋น์ค ์ํ ์ฒดํฌ (Dockerfile์์๋ ์์ฑ ๊ฐ๋ฅ)
healthcheck:
test: ["CMD", "curl", "-f", "<http://localhost>"]
interval: 1m30s
timeout: 10s
retries: 3
start_period: 40s
- test: healthcheckํ๋ ๋ช ๋ น์ด ์ง์
- interval: healthcheck ์คํํ๋ ์ฃผ๊ธฐ
- timeout: healthcheck ์์ฒญ ์ต๋ ์๊ฐ (์ด๊ณผ์ ์คํจ๋ก ๋จ)
- retries: healthcheck ์คํจ ์ ์ฌ์๋ ํ์
- start_period: ์ปจํ ์ด๋ ์์๋ ํ healthcheck๋ฅผ ์์ํ๊ธฐ๊น์ง ๋๊ธฐ์๊ฐ
โ depends_on
ํด๋น ์๋น์ค๊ฐ ์คํ๋๊ธฐ ์ํด์ ๋จผ์ ์คํ๋์ด์ผ ํ๋ ์๋น์ค๋ค ๊ธฐ์
1. short syntax ์์
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
2. long syntax ์์
services:
web:
build: .
depends_on:
db:
condition: service_healthy
restart: true
redis:
condition: service_started
redis:
image: redis
db:
image: postgres
- condition์ ํด๋น ์๋น์ค์ health ์กฐ๊ฑด์ ๋ง์กฑํ ๋ ์คํ๋จ์ ์๋ฏธํจ
- service_started: short syntax๊ณผ ๋์ผ. healthy ์ํ
- service_healthy: healthcheck๊ฐ health์ํ๋ก ํต๊ณผ๋ ๊ฒฝ์ฐ์๋ง ์ถฉ์กฑ๋จ
- service_completed_successfully: dependency๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์คํ๋์ด์ผ ํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋จ
โ environment
(Dockerfile ENV)ํด๋น ์๋น์ค๊ฐ ์ปจํ ์ด๋ ์์์ ์คํ๋ ๋ ํ๊ฒฝ๋ณ์๋ค์ ์ง์
์์ฑ ๋ฐฉ์ : Map(์)๊ณผ Array(์๋) ๋ฐฉ์
environment:
RACK_ENV: development
SHOW: 'true'
SESSION_SECRET:
environment:
- RACK_ENV=development
- SHOW=true
- SESSION_SECRET
โ entrypoint
๊ธฐ๋ณธ entrypoint๋ฅผ ์ค๋ฒ๋ผ์ด๋ํจ
entrypoint: /code/entrypoint.sh
Dockefile์ฒ๋ผ ๋ฆฌ์คํธ๋ก๋ ์์ฑ ๊ฐ๋ฅํ๋ค.
entrypoint: ["php", "-d", "memory_limit=-1", "vendor/bin/phpunit"]
โ networks
ํด๋น ์๋น์ค์ ๋คํธ์ํฌ ์ง์
services:
some-service:
networks:
- some-network
- other-network
alias๋ฅผ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ์ ํด๋น ์๋น์ค์ ๋ํ ๋ณ์นญ(ํธ์คํธ ์ด๋ฆ) ๋ฑ๋ก ๊ฐ๋ฅ
services:
some-service:
networks:
some-network:
aliases:
- alias1
- alias3
other-network:
aliases:
- alias2
์๋ฏธ : ‘some-service’๋ ๋ ๊ฐ์ ๋คํธ์ํฌ(some-network, other-network)์ ์ํ๋ค.
์ด๋, some-network๋ alias1๊ณผ alias3 ๋ณ์นญ์ ๊ฐ๊ณ , other-network๋ alias2 ๋ณ์นญ์ ๊ฐ๋๋ค.
'#๏ธโฃ Cloud&Container > Docker' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Docker] ํ๋ก๋์ ํ๊ฒฝ์์ Docker ์ฌ์ฉ ์ ์ฃผ์์ฌํญ: ์๋ฒ ๊ด๋ฆฌ์ ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ (K8s) (0) | 2023.06.16 |
---|---|
[Docker] Volume๊ณผ Network (0) | 2023.06.14 |
Docker ๊ธฐ๋ณธ ์ ๋ฆฌ ๋ฐ Airflow์์ Docker์ ํ์์ฑ (0) | 2023.06.12 |
[Docker] ๋์ปค๋? (0) | 2023.02.12 |
[Docker] ์ปจํ ์ด๋ ๊ธฐ๋ณธ ๋ช ๋ น์ด (0) | 2023.02.12 |