๐ก ๋ณธ ๋ฌธ์๋ 'docker-compose์์ links์ depends_on์ ์ฐจ์ด์ '์ ๋ํด ์ ๋ฆฌํด๋์ ๊ธ์ ๋๋ค.
Docker ์ปจํ ์ด๋๋ ์์คํ ์์ ๊ฒฉ๋ฆฌ๋ ํ๋ก์ธ์ค๋ก ์คํ๋ฉ๋๋ค. ์ด๋ Docker์์ ์ง์ํ๋ ํ๋ก์ธ์ค๊ฐ ํต์ ํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ธ links์ depends_on์ ๋ํด ์ ๋ฆฌํ์์ผ๋ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
1. docker-compose์์ links์ depends_on์ ์ฐจ์ด์
1.1 docker-compose: depends_on
depends_on ์ ์๋น์ค๊ฐ ์์๋๊ณ ์ค์ง๋์ด์ผ ํ๋ ์์๋ฅผ ์ค์ ํ๋ Docker Compose ํค์๋์ ๋๋ค.
์๋ฅผ ๋ค์ด ์น ์ฑ ์ด๋ฏธ์ง๋ก ๊ตฌ์ถํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด Postgres ์ปจํ ์ด๋ ์ดํ์ ์์๋๊ธฐ๋ฅผ ์ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. docker-compose.yml ํ์ผ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค .
services:
db:
image: postgres:latest
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
ports:
- 5432:5432
web-app:
image: web-app:latest
ports:
- 8080:8080
depends_on:
- db
Docker๋ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ง์ ๋ ์ข ์์ฑ์ ๋ฐ๋ผ ์ปจํ ์ด๋๋ฅผ ์คํํฉ๋๋ค. ๋ฐ๋ผ์ ์ด ๊ฒฝ์ฐ Postgres ์ปจํ ์ด๋๊ฐ ๋๊ธฐ์ด์์ ๊ฐ์ฅ ๋จผ์ ์คํ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ depends_on ์ ์ข ์์ฑ์ด ์ค๋น๋ ๋๊น์ง ๋ช ์์ ์ผ๋ก ๊ธฐ๋ค๋ฆฌ์ง ์๊ธฐ ๋๋ฌธ์ ์ ํ์ด ์์ต๋๋ค.
์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์ํ ๋ ์ผ๋ถ ๋ง์ด๊ทธ๋ ์ด์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํด์ผ ํ๋ค๊ณ ์์ํด ๋ด ์๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ฐ๊ฒฐ์ ํ์ฉํ์ง ์์ผ๋ฉด Postgres ์๋น์ค๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์์๋์์ง๋ง ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ํน์ ๋๊ตฌ๋ ์์ฒด ๊ด๋ฆฌ ์คํฌ๋ฆฝํ ์ ์ฌ์ฉํ์ฌ ์์ ๋๋ ์ข ๋ฃ ์์๋ฅผ ์ ์ดํ๋ฉด ์ด๋ฅผ ํผํ ์ ์์ต๋๋ค .
1.2 docker-compose: links
links ๋ Docker๊ฐ ๋คํธ์ํฌ๋ฅผ ํตํด ์ปจํ ์ด๋๋ฅผ ์ฐ๊ฒฐํ๋๋ก ์ง์ํฉ๋๋ค. ์ปจํ ์ด๋๋ฅผ ์ฐ๊ฒฐํ ๋ Docker๋ ํ๊ฒฝ ๋ณ์๋ฅผ ๋ง๋ค๊ณ ์ปจํ ์ด๋๋ฅผ ์๋ ค์ง ํธ์คํธ ๋ชฉ๋ก์ ์ถ๊ฐํ์ฌ ์๋ก๋ฅผ ๊ฒ์ํ ์ ์๋๋ก ํฉ๋๋ค.
Postgres ์ปจํ ์ด๋๋ฅผ ์คํํ๋ ๊ฐ๋จํ Docker ์์ ๋ฅผ ํ์ธํ๊ณ ์ด๋ฅผ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฐ๊ฒฐํฉ๋๋ค.
๋จผ์ Postgres ์ปจํ ์ด๋๋ฅผ ์คํํด ๋ณด๊ฒ ์ต๋๋ค.
$ docker run -d --name db -p 5342:5342 postgres:latest
๊ทธ๋ฐ ๋ค์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฐ๊ฒฐํฉ๋๋ค.
$ docker run -d -p 8080:8080 --name web-app --link db
์์ ๋ฅผ Docker Compose๋ก ๋ณํํด ๋ณด๊ฒ ์ต๋๋ค.
services:
db:
image: postgres:latest
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
ports:
- 5432:5432
web-app:
images: web-app:latest
ports:
- 8080:8080
links:
- db
1.3 docker-compose: network
์์ง ์ฌ์ฉ ์ค์ธ Docker links ๋ฅผ ์ฐพ์ ์ ์์ผ๋, Docker Compose๋ ๋ฒ์ 2๋ถํฐ docker network ๋์ ์ผ๋ก ์ธํด ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค.
์ด๋ฌํ ๋ฐฉ์์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณต์กํ ๋คํธ์ํน(์: overlay network)๊ณผ ์ฐ๊ฒฐํ ์ ์์ผ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ๋คํธ์ํฌ๋ฅผ ์ง์ ํ์ง ์์ ๋ bridge network๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ๋ณผ๋ฅจ ๋ฐ ํ๊ฒฝ ๋ณ์๋ฅผ ์ถ๊ฐํ๋ฉด์ links๋ฅผ ์ ๊ฑฐ ํ๊ณ network๋ก ๊ต์ฒดํด ๋ณด๊ฒ ์ต๋๋ค.
services:
db:
image: postgres:latest
restart: always
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
ports:
- 5432:5432
volumes:
- db:/var/lib/postgresql/data
networks:
- mynet
web-app:
image:web-app:latest
depends_on:
- db
networks:
- mynet
ports:
- 8080:8080
environment:
DB_HOST: db
DB_PORT: 5432
DB_USER: postgres
DB_PASSWORD: postgres
DB_NAME: postgres
networks:
mynet:
driver: bridge
volumes:
db:
driver: local
2. ๊ฒฐ๋ก : links ์ depends_on ์ ์ฐจ์ด์
์ข ์์ฑ ํํ์ด ํฌํจ๋์ง๋ง Docker links ์ depends_on ์ ๋ค๋ฅธ ์๋ฏธ๋ฅผ ๊ฐ์ต๋๋ค.
- depends_on: Docker์๊ฒ ์ปจํ ์ด๋ ์คํ ์์(์๋น์ค๊ฐ ์์๋๊ณ ์ค์ง๋์ด์ผ ํ๋ ์์)๋ฅผ ์๋ ค์ค๋๋ค.
- links ๋๋ networks: ๋คํธ์ํฌ๋ฅผ ํตํด ์ปจํ ์ด๋์ ๋ํ ์ฐ๊ฒฐ์ ์ค์ ํฉ๋๋ค.
์ฐธ๊ณ
[Blog] Difference Between links and depends_on in Docker Compose: https://www.baeldung.com/ops/docker-compose-links-depends-on