๐ย ๊ณต๋ถ ๋ด์ฉ
Docker Compose
์ฌ๋ฌ Container๋ก ์ํํธ์จ์ด๊ฐ ๊ตฌ์ฑ๋๋ ๊ฒฝ์ฐ ์ฌ์ฉํ ์ ์๋ ํด์ด์ ํ๊ฒฝ์ค์ ํ์ผ
๊ฐ๋ณ Container๋ฅผ ๋ฐ๋ก ๊ด๋ฆฌํ๋ ๊ฒ ๋ณด๋ค ๋ ์์ฐ์ฑ์ด ๋์
docker-compose.yml or docker-compose.yaml
๋ค์ํ ํ ์คํธ๋ฅผ ์ํํ ์ ์์ผ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก dev, test, prod ๋ฑ ์ฌ๋ฌ ๋ฒ์ ์ ๋ง๋ค๊ธฐ๋ ํจ
But, ๊ทธ๋งํผ ๋ฐฐ์์ผ ํ ๊ฒ์ด ๋ง๊ณ ๋ณต์กํด์ง
์ฌ์ฉ๋ฒ
- commands
| |
- version

docker-compose.y(a)ml
1. services
ํ๋ก๊ทธ๋จ์ ๊ตฌ์ฑํ๋ ์๋น์ค๋ค
๊ฐ๊ฐ Docker Image ์ง์ , Docker Container ์คํ์ผ๋ก ๊ตฌ์ฑ๋จ
(๊ฐ๊ฐ Dockerfile์ ๊ฐ๊ณ ์๊ฑฐ๋ docker Hub์์ ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋๋ฐ์์ผ ํจ)์๋น์ค๋ณ๋ก ํฌํธ๋ฒํธ, ํ๊ฒฝ๋ณ์, ๋์คํฌ ๋ณผ๋ฅจ ๋ฑ์ ์ง์
2. volumes
3. networks
๊ธฐ๋ณธ ์ด๋ฆ์ด ์๋ ๋ค๋ฅธ ์ด๋ฆ์ ํ์ผ์ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด -f ์ต์
์ฌ์ฉ
| |
์ด๋ฏธ์ง ์์ฑ๊ณผ ๊ด๋ฆฌ
docker-compose build
- service๋ค ์ค build: {path} ๋ก ์ง์ ๋ ๊ฒ์ ๋ํด ๋น๋๊ฐ ์งํ๋จ
docker-compose pull
- docker hub์์ ์ด๋ฏธ์ง๋ฅผ ์ฝ์ด์ค๋ ค ํ๋ฉฐ, image: {image_name}์ผ๋ก ์ง์ ๋จ
docker images
- build ๋ ์ด๋ฏธ์ง๋ค์ ๊ฐ๋ณ ์ด๋ฏธ์ง ์์ ํด๋ ์ด๋ฆ์ด prefix๋ก ๋ถ์

docker-compose images
- ์ปจํ ์ด๋์ ๊ทธ์ ์ํด ์คํ๋๊ณ ์๋ ์ด๋ฏธ์ง๋ค๋ง ๋ณด์ฌ์ค
docker-compose push
- docker hub ์ผ๋ก ์ด๋ฏธ์ง๋ค์ pushํ๋ ค๊ณ ํจ
์ํํธ์จ์ด ์์๊ณผ ์ค๋จ
docker-compose up
- build(&pull) -> create -> start
docker-compose down
- stop + remove (์ด๋ฏธ์ง๋ ๋จ์์์)
docker-compose stop
- ์ปจํ ์ด๋๋ฅผ ์ค๋จ
docker-compose rm
- ์ค๋จ์ํ์ธ ์ปจํ ์ด๋๋ค์ ์ญ์
docker-compose ls
- docker compose๋ก ์คํ์ํจ ์ปจํ ์ด๋๋ค์ ๊ทธ๋ฃน์ง์ด์ ๋ณด์ฌ์ค
docker-compose ps
- docker compose๋ก ์คํ์ํจ ์ปจํ ์ด๋๋ค์ ์ํ๋ฅผ ๋ณด์ฌ์ค
๋คํธ์ํน
docker๋ผ๋ฆฌ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ด ํ์ํ ๊ฒฝ์ฐ
- sevices์์ ์ง์ ํ ์ด๋ฆ์ผ๋ก host name ์์ฑ
- ๋ด๋ถ์ DNS ์๋ฒ๊ฐ ์์ฑ๋์ด ์ด๋ฆ์ ๋ด๋ถ IP๋ก ๋ณํ
๋ณ๋ ๋คํธ์ํฌ๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒฝ์ฐ
- networks ์ ๋คํธ์ํฌ๋ฅผ ๋์ดํ๊ณ , ๊ฐ ๋คํธ์ํฌ๋ฅผ ์ ์ ํ๊ฒ sevice์ ์ง์ ํด์ฃผ์ด์ผ ํจ
docker network ls

docker compose ์ค์ต
docker-compose.mac.yml
- ์ฝ์ด์ฌ ์ ์๋ ์ด๋ฏธ์ง๋ dockerhub์์ ์ฝ์ด์ค๋ฉฐ,
์ด๋ฏธ์ง๊ฐ ์๋ ๊ฒฝ์ฐ์ dockerfile์ ์์น๋ฅผ ์ ๊ณตํ์ฌ ๋น๋๋ฅผ ์งํ - ๋คํธ์ํฌ๋ฅผ ์ง์ ํ์ง ์๊ณ ๋ด๋ถ ๋คํธ์ํฌ ์ฌ์ฉ
| |
- ํด๋ฆฐ์ ํ ์๋ก ๋ง๋ docker compose ํ์ผ์ ํ์ฉํ์ฌ ์ปจํ ์ด๋๋ค์ ์คํํด๋ณด๊ธฐ
| |



docker-compose.yml ๊ฐ์ ํ๊ธฐ (1)
- ๊ฐ service์ ์ ์ ํ๊ฒ
๋คํธ์ํฌ๋ฅผ ์ง์ ํด์ค๋ค. (๋ณด์ ๊ฐํ ๋ชฉ์ ) - ๋ฐ์ดํฐ ๋ณด์กด์ ์ํด
postgresql db์ ๋ณผ๋ฅจ์ ์ง์ ํด์ค๋ค.
code
| |
docker-compose.yml ๊ฐ์ ํ๊ธฐ (2)
์๋น์ค ๊ฐ์
- depends_on : ์๋น์ค๋ค ๊ฐ ์์กด์ฑ์ด ์์ ๊ฒฝ์ฐ, ์ฌ์ ์ ์คํ๋์ด์ผ ํ๋ ์๋น์ค๋ฅผ ๊ธฐ์
| |
- healthcheck : ํด๋น ์๋น์ค์ ๊ฑด๊ฐ ์ํ(์ ์๋ํ๊ณ ์๋์ง)๋ฅผ ํ์ธํ ์ ์๋๋ก ๊ธฐ์
dockerfile์ ๊ธฐ์ ๋ ๋ด์ฉ์ overwrite ํ ์ ์์- return : service_started, service_healthy, service_completed_successfully
| |
- volumes : ํธ์คํธ์ ํด๋์ container์ ํด๋๋ฅผ ์ฐ๊ฒฐํ๋, mountํ๋ ๊ธฐ๋ฅ
| |
environment : ์๋น์ค๊ฐ ์ปจํ ์ด๋ ์์์ ์คํ๋ ๋
ํ๊ฒฝ๋ณ์๋ค์ ์ง์ (Dockerfile์ ENV)map๋ฌธ๋ฒ
1 2 3 4environment: RACK_ENV: development SHOW: "true" USER_INPUT:array๋ฌธ๋ฒ
1 2 3 4environment: - RACK_ENV=development - SHOW=true - USER_INPUTbuild : context, dockerfile, args ๋ฑ
๋น๋ ๊ด๋ จ ์ ๋ณด๋ฅผ ๋๊ฒจ์ค ์ ์์
| |
airflow์ docker-compose.yml ํ์ผ ๋ถ์
x-airflow-common
- ์ฌ๋ฌ ์๋น์ค์์ ๊ณต์ ํ๋
๊ณตํต ๊ตฌ์ฑ์ ์ ์ anchor(๋ณ์นญ) - &airflow-common- ๋์ค์ YML ํ์ผ ๋ธ๋ก์
๊ณ์น ํํ๋ก ์ฌ์ฌ์ฉ๊ฐ๋ฅํ๊ฒ ํด์ค - ์ฌ์ฌ์ฉ ๋ฌธ๋ฒ:
<<: *airflow-common
- ๋์ค์ YML ํ์ผ ๋ธ๋ก์
- version, services, volumes, networks๋ฅผ ์ ์ธํ ์ต์์ ๋ ๋ฒจ์ ํค์๋๋ ๋ชจ๋
anchor
| |
services
- postgres
- redis
- airflow-webserver
- airflow-scheduler
| |
- airflow-worker
- airflow-triggerer
- airflow-init
ํ์ด์ฌ ๋ชจ๋์ ์ถ๊ฐ๋ก ์ค์นํ๋ ๊ฒฝ์ฐ
- ๋งค๋ฒ container์ ์ ์ํด ์ค์นํ๋ ๋ฐฉ๋ฒ์ ์ ์ง๋ณด์๊ฐ ์ด๋ ต๊ณ , ๋ณด์กด๋์ง ์์ ์ ์ง๋ณด์ ์ธก๋ฉด์์ BAD
- docker-compose.yml์ ๊ฐ์ ๋ณ๊ฒฝํ๋ ๋ฐฉ์์ ์ฌ์ฉ
| |
โ ๋๋ ์
docker compose์ ๊ทธ ์ฌ์ฉ๋ฐฉ๋ฒ, .yml ์ค์ ํ์ผ ์์ฑ๋ฒ ๋ฑ์ ๋ฐฐ์ฐ๋ฉด์ ์ฌ๋ฌ ์ปจํ ์ด๋๋ฅผ ๊ฐ์ง ํ๋ก๊ทธ๋จ์ ๋์ปค๋ก ๋ฐ๊ณ ์คํํ๋ ๊ณผ์ ์ ๋ํด ์ดํดํ ์ ์์๋ค. ๊ฐ์ ๋ด์ฉ์ ์ ๋ฆฌํ๋ฉด์, ๋์ปค, ์ปจํ ์ด๋, ์ด๋ฏธ์ง, ๋์ปค ์ปดํฌ์ฆ ๋ฑ ๊ฐ๋ ์ ๋ํด ํ๋ฒ ์ ๋ฆฌํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ์ฃผ๋ง์ด๋ ๋ค์์ฃผ ๋ฐฉํ ๋์ ๊ณต๋ถํ๊ณ ์ ๋ฆฌํด์ ๋ธ๋ก๊ทธ์ ์ฌ๋ ค์ผ๊ฒ ๋ค.
๋ฐฉํ๋์ ์ด์ ์์ ์ ๋ณต์ตํด์ผ๊ฒ ๋ค๊ณ ๋๊ผ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ์ฌ CS ๊ณต๋ถ๋ ์๊ฐ ์ ํด์ ์์ํด์ผ๊ฒ ๋ค. ๋ญ์ง ์์ง๋ง, ๋ค์ผ๋ฉด ๊ธฐ์ต๋ ๋์ง๋ง ์ ํํ๊ฒ ์ค๋ช ์ ๋ชปํ๋ ๊ฐ๋ ์ด ์ ์ ๋์ด๋๊ณ ์์ด์ ๋ต๋ตํ๊ณ ๋ถ์ํ๋ค.