๊ฐ์ ์ฌํญ ์งํ
1. Docker Compose ํ๊ฒฝ ๋ณ๋ก ๊ตฌ๋ถํ๊ธฐ.
2. ๋คํธ์ํฌ ๊ด๋ จ ์ฐพ์๋ณด๊ธฐ
Docker Compose ๊ตฌ๋ถํ๊ธฐ
๋จ์ผ docker-compose.yml ์ multi-compose.yml ๋ก ๋ถํ .
docker-compose ํ์ผ ๋ด์์๋ if case ๊ฐ์ ์กฐ๊ฑด๋ฌธ์ ์์ฑ์ด ๋ถ๊ฐ๋ฅํ๋ค.
์กฐ๊ฑด๋ฌธ์ ์์ฑ์ด ๋ถ๊ฐ๋ฅ ํ์ฌ Multi-compose file ํํ๋ก ์์ฑ์ ํ๊ธฐ๋ก ํ์๋ค.
docker-compose ์ต์ ์ค, -f ์ต์ ์ ์ง์ ํ์ฌ compose ํ์ผ์ ์ฌ์ ์ํ ์ ์๋ค. (์ต์ ์ฐธ๊ณ )
์ฌ๊ธฐ์ ์ฌ์ ์๋, ๊ธฐ์กด compose ํ์ผ ์ธ์ ๋ค๋ฅธ ํ์ผ์ ์ง์ ํ์ฌ ๋ฎ์ด ์ฐ๋ ํ์๋ก, ๊ฐ์ ๋ค์ด๋ฐ์ ์ต์ ์ด ์๋ค๋ฉด ๋์ค์ ์ง์ ํ ํ์ผ์ ์ต์ ์ด ๋ฎ์ด์์์ง๊ณ ์๋ก์ด ์ต์ ์ธ ๊ฒฝ์ฐ ํด๋น ์ต์ ์ ์ถ๊ฐํ์ฌ ํ๋์ compose ํ์ผ๋ก ํฉ์น ํ ์คํํ๋ ๊ฒ์ด๋ค.
์ถ๊ฐ์ ์ผ๋ก, ๊ฐ ํ๊ฒฝ๋ง๋ค ๋ค๋ฅธ ๋ณ์ ๋๋ ๊ฐ ๋๋ฌธ์ .env ํ์ผ์ ๋ง๋ค์ด ํ๊ฒฝ๋ณ์ ํํ๋ก ๊ฐ ํ๊ฒฝ ๋ณ ๋ง๋ ๊ฐ์ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ/์ด์ ํ๊ฒฝ์ ๊ตฌ๋ถ์ ํ๊ธฐ๋ก ํ๋ค.
1. docker-compose.yml - base file
# docker-compose (base)
# base file
# ๊ธฐ๋ณธ์ ์ผ๋ก ์คํ๋ ์ฝ๋๋ค์ ์ ์ํ๋ค.
# docker-compose -f docker-compose.yml -f docker-compose.{env}.yml up ์ผ๋ก
# ์ค๋ฒ๋ผ์ด๋ฉ ํ ํ์ผ์ ์ ํํ์ฌ ์คํํ๋ค.
version: "3.7"
services:
app:
# Dockerfile - FROM
image: adoptopenjdk/openjdk8
# Dockerfile - EXPOSE
ports:
- 8080:8080
# network ์ถ๊ฐ
networks:
# - default
- boot-network
# image build dir
build:
context: .
# Dockerfile - ARG
# args:
# WAR-FILE: ${DEV_WAR_FILE}
# Dockerfile - ENTRYPOINT
entrypoint:
- java
- '-jar'
- /app.war
# Dockerfile - COPY command
# command: "COPY ${WAR_FILE} app.war"
# # link : ์ฐธ์กฐํ ๋ค๋ฅธ ์ปจํ
์ด๋ ์ฐ๊ฒฐ - application.yml ๋ด DB ์ฐ๊ฒฐ ๋ค์ด๋ฐ ์ฐธ๊ณ .
# links:
# - db:Postgresql
# # ์ข
์์ฑ ์ ์. ์ฌ๊ธฐ์์ db ์คํ ํ์ app ์คํํจ์ ์๋ฏธ.
# depends_on:
# - db
# db:
# # DB ์ด๋ฏธ์ง
# image: postgres:12.9-alpine
# # ํฌํธ ์ง์
# ports:
# - 5432:5432
# # -e ํ๊ฒฝ ๋ณ์ : docker run ๋ช
๋ น ์ฐธ๊ณ
# environment:
# - POSTGRES_PASSWORD=1tkdlqjvpn!
# # ๋ณผ๋ฅจ ์ง์ : ๋๋ ํ ๋ฆฌ ๋ง์ดํ
# volumes:
# - ${DEV_VOLUME_DIR}:/var/lib/postgresql/data
# Docker Network : boot-network ๋ ์ด๋ฆ์ bridge ๋คํธ์ํฌ ์ถ๊ฐ
# {projectName}_{networkName} ์ผ๋ก ์์ฑ๋จ.
# ์์ผ๋ฉด, default ๋คํธ์ํฌ๋ก ์ฐ๊ฒฐ
networks:
boot-network:
driver: bridge
#default:
# external:
# name: boot-sample-network
2. docker-compose.dev.yml - ๊ฐ๋ฐ ํ๊ฒฝ ์ ์ ์ ์ฌ์ฉ
# docker-compose.dev
# ๊ฐ๋ฐ ํ๊ฒฝ ์ ์
# ๊ฐ๋ฐ์ธ ๊ฒฝ์ฐ, postgresql docker ์ด๋ฏธ์ง๋ฅผ ๋์ ์ฌ์ฉํ๋ค.
version: "3.7"
services:
app:
# Dockerfile - COPY command
command: "COPY ${DEV_WAR_FILE} app.war"
# link : ์ฐธ์กฐํ ๋ค๋ฅธ ์ปจํ
์ด๋ ์ฐ๊ฒฐ - application.yml ๋ด DB ์ฐ๊ฒฐ ๋ค์ด๋ฐ ์ฐธ๊ณ .
links:
- db:Postgresql
# ์ข
์์ฑ ์ ์. ์ฌ๊ธฐ์์ db ์คํ ํ์ app ์คํํจ์ ์๋ฏธ.
depends_on:
- db
db:
# DB ์ด๋ฏธ์ง
image: postgres:12.9-alpine
# network ์ถ๊ฐ
networks:
# - default
- boot-network
# ํฌํธ ์ง์
ports:
- 5432:5432
# -e ํ๊ฒฝ ๋ณ์ : docker run ๋ช
๋ น ์ฐธ๊ณ
environment:
- POSTGRES_PASSWORD=${DEV_POSTGRES_PASSWORD}
# ๋ณผ๋ฅจ ์ง์ : ๋๋ ํ ๋ฆฌ ๋ง์ดํ
volumes:
- ${DEV_VOLUME_DIR}:/var/lib/postgresql/data
3. .env ํ์ผ - ํ๊ฒฝ๋ณ์๊ฐ ์ ์๋์ด์๋ค.
# docker-compose ํ์ผ์ ๋ณ์ ํ ๋นํ๊ธฐ ์ํ ์ค์ ํ์ผ
# ๊ฐ ํ๊ฒฝ ๋ณ๋ก ์ฌ์ฉํ ๋ณ์ ๋ฐ ๋ด์ฉ์ ์ ์
# dev
DEV_WAR_FILE=build/libs/boot-sample-0.0.1-SNAPSHOT.war
DEV_VOLUME_DIR=/boot-sample-db
DEV_POSTGRES_PASSWORD={password}
# demo
DEMO_WAR_FILE=build/libs/boot-sample-0.0.1-SNAPSHOT.war
DEMO_VOLUME_DIR=/boot-sample-db
DEMO_POSTGRES_PASSWORD=
# prod
PROD_WAR_FILE=build/libs/boot-sample-0.0.1-SNAPSHOT.war
PROD_VOLUME_DIR=/boot-sample-db
PROD_POSTGRES_PASSWORD=
์์ ๊ฐ์ด ํ๊ฒฝ์ ๊ตฌ์ฑํ๊ฒ ๋๋ฉด ๊ฐ ํ๊ฒฝ(๊ฐ๋ฐ/๋ฐ๋ชจ/์ด์ ๋ฑ)๋ณ๋ก compose ํ์ผ์ ์์ฑํ์ฌ docker-compose ๊ตฌ๋ ์, ์ฌ์ ์ ํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌ๋ํ๋ฉด ๋๋ค.
.env์ ์ง์ ๋ ํ๊ฒฝ ๋ณ์๋ค๋ก ๊ฐ ์ต์ ์ ๋ง๊ฒ ๋ฃ์ด์ฃผ๊ฒ ๋๋ฉด ๋ฐ๋ก ๊ตฌ๋ ์์ ํ๊ฒฝ๋ณ์๋ฅผ ์ฌ์ง์ ํ๊ฑฐ๋ ๋ฃ์ด์ค ํ์๊ฐ ์๋ค.
Docker Network in Docker-compose
docker network ์ ๋ํด์๋ ์๋์ ๋งํฌ๋ฅผ ์ฐธ๊ณ .
- docker networking ๊ฐ์
https://docs.docker.com/network/
Networking overview
docs.docker.com
- docker network plugin
https://ziwon.github.io/post/designing-scalable-portable-docker-container-networks/
[๋ฒ์ญ] ํ์ฅ์ฑ ์๊ณ , ์ด์์ฑ ์๋ ๋์ปค ์ปจํ ์ด๋ ๋คํธ์ํฌ ์ค๊ณ | ziwon.github.io
์๋ฌธ: Docker Reference Architecture: Designing Scalable, Portable Docker Container Networks (์ค์ญ ๋ฐ ์คํ๋ ๋๊ธ๋ก ์๋ ค์ฃผ์ธ์) โป ์ปจํ ์ด๋๊ฐ ์๋ Pod๊ฐ์ Kubernetes ๋คํธ์ํน ๋ชจ๋ธ์ ๋์ปค ๋คํธ์ํน ๋ชจ๋ธ๊ณผ ์ข ๋ค๋ฆ
ziwon.github.io
์ฐ์ ์ํ ์์์ ์๋ ํ๋
"๋์ปค ๋คํธ์ํฌ" ๋ฅผ cli ํ๊ฒฝ์์ ์ฐ์ ์์ฑ --> compose ์์ external ๋ก ์ฌ์ฉ์ ํ์ง ์์๋ ๋๋ค.
๋คํธ์ํฌ๋ฅผ compose ์ ์ง์ ํ๋ ๊ฒฝ์ฐ ์๋์ผ๋ก ์ฐพ๊ฑฐ๋, default netwrok ์ ์ฐ๊ฒฐํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ค๋ง, ์์ฑ์ ํ๋ ์ํ๋ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ผ๋ฉด, ๊ฐ ์๋น์ค๋ง๋ค ์ต์ ์ผ๋ก network ์ ์ฐ๊ฒฐํด์ฃผ์ด์ผ ํ๋ค.
1. db ์๋น์ค ๋คํธ์ํฌ ์ง์
2. app ์๋น์ค ๋คํธ์ํฌ ์ง์
๋คํธ์ํฌ ์์ฑ์ ์๋ ๋ผ์ธ์ ์ฐธ๊ณ ํ๋ค.
# Docker Network : boot-network ๋ ์ด๋ฆ์ bridge ๋คํธ์ํฌ ์ถ๊ฐ
# {projectName}_{networkName} ์ผ๋ก ์์ฑ๋จ.
# ์์ผ๋ฉด, default ๋คํธ์ํฌ๋ก ์ฐ๊ฒฐ
networks:
boot-network:
driver: bridge
#default:
# external:
# name: boot-sample-network
'๐Docker' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Docker CentOS7] CentOS7 locale language ko_KR ์ค์ (0) | 2022.06.23 |
---|---|
[์ค์ต] Docker Spring Boot + Postgresql (2) (0) | 2022.01.24 |
[์ค์ต] Docker Spring boot + Postgresql (1) (1) | 2022.01.20 |
MS : Docker ์์ต์ ์ ๋ฆฌ (0) | 2022.01.13 |
[MS ์์ต์] Docker Application build Python ์๋ฌ ํด๊ฒฐ (2) | 2022.01.10 |
๋๊ธ