tool

Docker ๊ฐœ๋… ๋ฐ ์˜ˆ์ œ

dddzr 2026. 4. 7. 09:42

๐Ÿ“Œ 0. Docker ๊ฐœ๋…

โœ… 0-1. ๊ฐœ๋…

Docker๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๊ณผ ๊ทธ ์˜์กด์„ฑ์„ ํ•˜๋‚˜์˜ ํŒจํ‚ค์ง€๋กœ ๋ฌถ์–ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ ๊ธฐ์ˆ 

  • Docker: ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ์—”์ง„
  • ์ปจํ…Œ์ด๋„ˆ ์—”์ง„: ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด (์ปจํ…Œ์ด๋„ˆ ๊ตฌํ˜„ ๊ธฐ์ˆ )
  • ์ปจํ…Œ์ด๋„ˆ: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒฉ๋ฆฌ๋œ ์‹คํ–‰ ํ™˜๊ฒฝ (OS์ปค๋„ ๊ณต์œ , VM๋ณด๋‹ค ๊ฐ€๋ณ๊ณ  ๋น ๋ฆ„) 

*VM: OS๊นŒ์ง€ ํฌํ•จํ•œ ์™„์ „ํ•œ ๊ฐ€์ƒํ™˜๊ฒฝ
์ปจํ…Œ์ด๋„ˆ: OS ์—†์ด ์‹คํ–‰ ํ™˜๊ฒฝ๋งŒ ๊ฒฉ๋ฆฌ

 

โœ… 0-2. ์‚ฌ์šฉ ์ด์œ 

๐Ÿ‘‰ ์„ฑ๋Šฅ ๋•Œ๋ฌธ โŒ
๐Ÿ‘‰ ์šด์˜/๊ด€๋ฆฌ ๋•Œ๋ฌธ โญ•

  • ํ™˜๊ฒฝ ํ†ต์ผ: ๋‚ด PC·ํŒ€์›·์„œ๋ฒ„ ์–ด๋””์„œ๋“  ๋™์ผํ•œ ์‹คํ–‰ ํ™˜๊ฒฝ ๋ณด์žฅ
  • ๋ฒ„์ „ ๊ด€๋ฆฌ: ์ด๋ฏธ์ง€๋กœ ๋ฒ„์ „์„ ๊ณ ์ •ํ•˜์—ฌ ํ™˜๊ฒฝ ์ถฉ๋Œ ์—†์ด ์•ˆ์ •์ ์ธ ์‹คํ–‰ ๊ฐ€๋Šฅ
  • ํ•œ ๋ฒˆ์— ์‹คํ–‰: DB·Redis·์„œ๋น„์Šค ๋“ฑ์„ ํ•œ ๋ฒˆ์— ์‹คํ–‰ํ•˜์—ฌ ์„ธํŒ… ์‹œ๊ฐ„ ์ตœ์†Œํ™”
  • ๊ฒฉ๋ฆฌ (Isolation): ์„œ๋น„์Šค๋ณ„๋กœ ๋ถ„๋ฆฌ๋˜์–ด ํฌํŠธ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถฉ๋Œ ๋ฐฉ์ง€
  • ์‚ญ์ œ/์ดˆ๊ธฐํ™” ์‰ฌ์›€: ๋ช…๋ น์–ด ํ•œ ๋ฒˆ์œผ๋กœ ํ™˜๊ฒฝ์„ ๋น ๋ฅด๊ฒŒ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ์žฌ๊ตฌ์„ฑ ๊ฐ€๋Šฅ
  • ํ™•์žฅ์„ฑ: ์„œ๋น„์Šค๋ฅผ ์‰ฝ๊ฒŒ ์ถ”๊ฐ€·ํ™•์žฅํ•˜๊ณ  ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ ๋ฐ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ

 

โญ Tip

๐Ÿ”นDocker ์ด๋ฏธ์ง€๋Š” ๋ณดํ†ต ์ธํ„ฐ๋„ท์—์„œ ๋‹ค์šด๋กœ๋“œ

Docker Hub / ์‚ฌ์„ค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ → pull → ๋กœ์ปฌ ์ €์žฅ

 

๐Ÿ”นํ์‡ ๋ง์—์„œ๋Š”?

์ด๋ฏธ์ง€ ํŒŒ์ผ๋กœ ์˜ฎ๊น€

docker save -o mariadb.tar mariadb:10.6

docker load -i mariadb.tar

โœ” ์™ธ๋ถ€๋ง → ๋‚ด๋ถ€๋ง ์ด๋™ ๊ฐ€๋Šฅ

โœ” ํ์‡„๋ง์—์„œ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

 

โœ… 0-3. ์„ค์น˜ ๊ฐ€๋Šฅ ์„œ๋น„์Šค ์˜ˆ์‹œ

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ ์บ์‹œ (RDBMS: MariaDB / NoSQL: MongoDB / ์บ์‹œ: Redis ๋“ฑ)
  • ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค (Kafka, RabbitMQ ๋“ฑ)
  • ์›น ์„œ๋ฒ„ ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ (์›น ์„œ๋ฒ„: Nginx / ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„: Tomcat ๋“ฑ)
  • ๊ฐœ๋ฐœ ๋„๊ตฌ (CI/CD ํˆด: Jenkins / ์ฝ”๋“œ ํ’ˆ์งˆ ๋ถ„์„: ESLint / ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ: Adminer )
  • ๋น…๋ฐ์ดํ„ฐ ๋ฐ ๋ถ„์„ ( Hadoop / Elasticsearch + Kibana (ELK Stack) / Spark )
  • ๋„คํŠธ์›Œํฌ ๋ฐ ๋ณด์•ˆ (ํ”„๋ก์‹œ ์„œ๋ฒ„ / ๋ณด์•ˆ ์Šค์บ๋„ˆ)
  • ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋กœ๊น… 
  • ๋จธ์‹ ๋Ÿฌ๋‹ ๋ฐ ๋ฐ์ดํ„ฐ ์‚ฌ์ด์–ธ์Šค
  • ๊ธฐํƒ€ (๋ฒ„์ „ ๊ด€๋ฆฌ ๋ฐ ํ˜‘์—…: Git, SVN / CMS / VPN ๋ฐ ๋„คํŠธ์›Œํฌ ๊ด€๋ฆฌ)
  • ์šด์˜ ์ž๋™ํ™” (Ansible AWX, Terraform)




๐Ÿ“Œ 1. Docker ๊ธฐ๋ณธ

โœ… 1-1. Docker ์„ค์น˜ (์œˆ๋„์šฐ ๊ธฐ์ค€) ๐Ÿ› 

๐Ÿ‘‰ Docker Desktop ์„ค์น˜

https://www.docker.com/products/docker-desktop/

 

โœ” ๊ทธ๋ƒฅ Next Next ์„ค์น˜
โœ” WSL2 ์ž๋™ ์„ค์ •

 

์„ค์น˜ ์™„๋ฃŒ ์‹œ ์•„๋ž˜ ๋‘๊ฐœ ์ฐฝ์ด ๋œธ. (๋‘˜ ๋‹ค ๋‹ซ์•„๋„ ๋œ๋‹ค.)

๐Ÿ”น Docker Desktop => ์ž‘์—…ํ‘œ์‹œ์ค„์—์„œ Docker Desktop์ด ์‹คํ–‰์ค‘์ธ์ง€ ํ™•์ธ (๋ฏธ์‹คํ–‰ ์ค‘์ด๋ฉด docker ๋ช…๋ น์–ด ์•ˆ ๋จน์Œ)

๐Ÿ”น WSL(Windows Subsystem for Linux) => WSL ์ง์ ‘ ์“ธ ํ•„์š” ๊ฑฐ์˜ ์—†์Œ, ๊ทธ๋ƒฅ Docker ์“ฐ๋ฉด ์ž๋™์œผ๋กœ ๋Œ์•„๊ฐ

 

๐Ÿ‘‰ ํ™•์ธ ๋ฐฉ๋ฒ•. Version์ด 2๋ฉด ์ œ๋Œ€๋กœ ์‹คํ–‰์ค‘.

$ wsl -l -v
  NAME              STATE           VERSION
* docker-desktop    Running         2

*ํ›„์— ์„ฑ๋Šฅ ์ตœ์ ํ™” ํ•„์š”์‹œ wsl์— ์šฐ๋ถ„ํˆฌ๋ฅผ ๊น”๊ณ , wsl ๋‚ด๋ถ€์—์„œ ๋„์ปค ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๋‚˜ ์ง€๊ธˆ์€ ๋„˜์–ด๊ฐ„๋‹ค!

 

๐Ÿ‘‰ ์„ค์น˜ ํ›„

# ์„ค์น˜ ๋ฒ„์ „ ํ™•์ธ
docker --version

# Docker Desktop ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธ
docker p

 

โœ…1-2. ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ํ™•์ธ

๐Ÿ”น ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰

docker run hello-world

โœ” Docker ์„ค์น˜ํ•˜๋ฉด docker ๋ช…๋ น์–ด๊ฐ€ ์‹œ์Šคํ…œ PATH์— ๋“ฑ๋ก๋จ ์–ด๋А ๊ฒฝ๋กœ์—์„œ๋“  ๋ช…๋ น์–ด ์‹คํ–‰ ๊ฐ€๋Šฅ

 

๐Ÿ‘‰ ์„ฑ๊ณตํ•˜๋ฉด ๋„์ปค ์ •์ƒ ์ž‘๋™ (์„ฑ๊ณต ์ถœ๋ ฅ)

$ docker run hello-world
Unable to find image 'hello-world:latest' locally # โœ”๏ธ์ด๋ฏธ์ง€ ๋กœ์ปฌ์—์„œ ์ฐพ์„ ์ˆ˜ ์—†์–ด์„œ ๋‹ค์šด๋กœ๋“œ ์‹œ์ž‘
latest: Pulling from library/hello-world # โœ”๏ธDocker Hub์—์„œ ์ด๋ฏธ์ง€ ๋ฐ›์•„์˜ด
17eec7bbc9d7: Pull complete
ea52d2000f90: Download complete
Digest: sha256:85404b3c53951c3ff5d40de0972b1bb21fafa2e8daa235355baf44f33db9dbdd
Status: Downloaded newer image for hello-world:latest

Hello from Docker! # โœ”๏ธ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์„ฑ๊ณต
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/โ€‹


๐Ÿ“Œ2. ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ

โœ…2-1. Docker ํ•ต์‹ฌ ๋ช…๋ น์–ด ์ •๋ฆฌ

๋ช…๋ น์–ด ์„ค๋ช… ์–ธ์ œ ์”€ ์˜ˆ์‹œ
docker ps ์‹คํ–‰ ์ค‘ ์ปจํ…Œ์ด๋„ˆ๋งŒ ์กฐํšŒ ์ง€๊ธˆ ๋Œ์•„๊ฐ€๋Š” ๊ฒƒ ํ™•์ธ docker ps
docker ps -a ์ „์ฒด ์ปจํ…Œ์ด๋„ˆ ์กฐํšŒ (์ข…๋ฃŒ ํฌํ•จ) ๊ณผ๊ฑฐ ์‹คํ–‰ ๊ธฐ๋ก ํ™•์ธ docker ps -a
docker run ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ + ์‹คํ–‰ ์ฒ˜์Œ ์‹คํ–‰ํ•  ๋•Œ docker run nginx
docker start ์ค‘์ง€๋œ ์ปจํ…Œ์ด๋„ˆ ๋‹ค์‹œ ์‹œ์ž‘ ์žฌ์‚ฌ์šฉ docker start my-container
docker stop ์‹คํ–‰ ์ค‘ ์ปจํ…Œ์ด๋„ˆ ์ข…๋ฃŒ ์ข…๋ฃŒํ•  ๋•Œ docker stop my-container
docker restart ์žฌ์‹œ์ž‘ ์„ค์ • ๋ณ€๊ฒฝ ํ›„ docker restart my-container
docker rm ์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œ ์™„์ „ํžˆ ์ œ๊ฑฐ docker rm my-container
docker images ์ด๋ฏธ์ง€ ๋ชฉ๋ก ์กฐํšŒ ๋‹ค์šด๋กœ๋“œ๋œ ์ด๋ฏธ์ง€ ํ™•์ธ docker images
docker rmi ์ด๋ฏธ์ง€ ์‚ญ์ œ ์šฉ๋Ÿ‰ ์ •๋ฆฌ docker rmi nginx
docker logs ์ปจํ…Œ์ด๋„ˆ ๋กœ๊ทธ ํ™•์ธ ์—๋Ÿฌ/๋””๋ฒ„๊น… docker logs my-container
docker exec ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ์ ‘์† DB ํ™•์ธ, ํ…Œ์ŠคํŠธ docker exec -it my-container bash
docker pull ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ ๋ฏธ๋ฆฌ ๋ฐ›์•„๋‘˜ ๋•Œ docker pull nginx
docker build ์ด๋ฏธ์ง€ ์ง์ ‘ ์ƒ์„ฑ Dockerfile ์‚ฌ์šฉ ์‹œ docker build .

 

โœ…2-2. ๊ฐœ๋ณ„ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰

๊ฐ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ผ์ผ์ด docker run์œผ๋กœ ์‹คํ–‰ํ•ด์•ผ ํ•ด์„œ ์ž˜ ์“ฐ์ง€ ์•Š๋Š”๋‹ค!!

# MariaDB
docker run -d \
 --name mariadb \
 -e MYSQL_ROOT_PASSWORD=root \
 -p 3306:3306 \
 -v mariadb_data:/var/lib/mysql \
 mariadb:10.6

# Redis
docker run -d \
 --name redis \
 -p 6379:6379 \
 -v redis_data:/data \
 redis

 

๐Ÿ”น ๋‹จ์ 

  • ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ์˜์กด์„ฑ ๊ด€๋ฆฌ ํž˜๋“ฆ (depends_on ๊ฐ™์€ ๊ธฐ๋Šฅ ์—†์Œ)
  • ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์ง์ ‘ ์„ค์ • ํ•„์š”
  • ์„œ๋น„์Šค ์ถ”๊ฐ€/์‚ญ์ œ ์‹œ ๋ช…๋ น์–ด ๊ธธ๊ฒŒ ๋ฐ˜๋ณต
  • ๋ฉ€ํ‹ฐ ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ ์ˆœ์„œ ๊ด€๋ฆฌ ์–ด๋ ค์›€

๐Ÿ“Œ 3. Docker Compose

โœ… 3-1. Docker Compose ๊ฐœ๋…

Docker Compose = ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ•œ ๋ฒˆ์— ์ •์˜ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋„๊ตฌ

  • docker-compose.yml ํ•œ ํŒŒ์ผ ์•ˆ์—์„œ ์„œ๋น„์Šค(์ปจํ…Œ์ด๋„ˆ) ์ •์˜ + ํฌํŠธ + ํ™˜๊ฒฝ ๋ณ€์ˆ˜ + ๋ณผ๋ฅจ + ๋„คํŠธ์›Œํฌ ๋ชจ๋‘ ๊ด€๋ฆฌ
  • ๋ช…๋ น์–ด ํ•œ ๋ฒˆ(docker-compose up -d)์œผ๋กœ ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰, ์—ฐ๊ฒฐ, ๋ฐ์ดํ„ฐ ์˜์†์„ฑ๊นŒ์ง€ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
  • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ MSA/์ธํ”„๋ผ ์ „์ฒด ์Šคํƒ ๊ตฌ์„ฑํ•  ๋•Œ ๋งค์šฐ ์œ ์šฉ

๐Ÿ”น ์žฅ์ 

ํ•ญ๋ชฉ ์žฅ์ 
์ž๋™ํ™” ๋‹จ์ผ ๋ช…๋ น์–ด๋กœ ๋ชจ๋“  ์„œ๋น„์Šค ์‹คํ–‰ ๊ฐ€๋Šฅ
์—ฐ๊ฒฐ ๊ด€๋ฆฌ ์ปจํ…Œ์ด๋„ˆ๋ผ๋ฆฌ ๋„คํŠธ์›Œํฌ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๋กœ ํ†ต์‹  ๊ฐ€๋Šฅ
ํ™˜๊ฒฝ ๋ถ„๋ฆฌ dev/test/prod ํ™˜๊ฒฝ ๋ณ„ Compose ํŒŒ์ผ ๊ฐ€๋Šฅ
์žฌํ˜„์„ฑ ํŒ€์› ๋ชจ๋‘ ๋™์ผ ํ™˜๊ฒฝ ์žฌํ˜„ ๊ฐ€๋Šฅ

 

โœ… 3-2. docker-compose.yml ์ž‘์„ฑ

docker-compose.yml์€ “ํ”„๋กœ์ ํŠธ ํด๋” ๋ฃจํŠธ”์— ๋‘”๋‹ค.

 

๐Ÿ“– Spring Boot(application.properties) ์˜ˆ์‹œ

# DB (3307)
spring.datasource.url=jdbc:mariadb://localhost:3307/mydb
# ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ ‘๊ทผํ•  ๋•Œ (localhost X → ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„, 3306)
# spring.datasource.url=jdbc:mariadb://mariadb:3306/mydb
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.hibernate.ddl-auto=update #ํ…Œ์ด๋ธ” ์ž๋™ ์ƒ์„ฑ

# Redis
spring.redis.host=localhost
spring.redis.port=6379

* mariadb๋Š” ์ด๋ฏธ ๋กœ์ปฌ์—์„œ 3306์œผ๋กœ ์ˆ˜ํ–‰ ์ค‘. 

ํ•™์Šต์„ ์œ„ํ•ด 3307๋กœ ํ…Œ์ŠคํŠธ. ์‹ค์ œ๋กœ๋Š” ์ด๋ฏธ ๋ฐ์ดํ„ฐ ๋“ค์–ด์žˆ์–ด์„œ ๊ทธ๋ƒฅ ๋กœ์ปฌ ์ผ์Œ.

service.msc์—์„œ ๋กœ์ปฌ db ์ข…๋ฃŒํ•˜๊ณ  ๋„์ปค์—์„œ 3306์จ๋„ ๋จ. (๋™์‹œ ์‹คํ–‰ ๋ถˆ๊ฐ€)

 

๐Ÿ“– docker-compose.yml ์˜ˆ์‹œ

services:
  mariadb:
    image: mariadb:10.6
    container_name: mariadb
    environment:
      MYSQL_ROOT_PASSWORD: root
    ports:
      - "3307:3306" # ๋กœ์ปฌ PC์— mariaDB๊ฐ€ ์žˆ์–ด์„œ ํฌํŠธ ๋ณ€๊ฒฝ
    volumes:
      - mariadb_data:/var/lib/mysql   # DB ๋ฐ์ดํ„ฐ ์˜๊ตฌ ์ €์žฅ

  redis:
    image: redis
    container_name: redis
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data             # Redis ๋ฐ์ดํ„ฐ ์ €์žฅ

volumes:
  mariadb_data:
  redis_data:โ€‹

 

๐Ÿ”น ์„ค์ • ํ•ญ๋ชฉ

ํ•ญ๋ชฉ ์—ญํ•  ์˜ˆ์‹œ
ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ์„ค์ • ์ „๋‹ฌ MYSQL_ROOT_PASSWORD=root
ํฌํŠธ ํ˜ธ์ŠคํŠธ ↔ ์ปจํ…Œ์ด๋„ˆ ๋งคํ•‘ 3306:3306, 6379:6379
๋„คํŠธ์›Œํฌ ์ปจํ…Œ์ด๋„ˆ๋ผ๋ฆฌ ํ†ต์‹  app ↔ mariadb ๋™์ผ ๋„คํŠธ์›Œํฌ
๋ณผ๋ฅจ ๋ฐ์ดํ„ฐ ์˜์†์„ฑ /var/lib/mysql → mariadb_data

 

โœ… 3-3. ์‹คํ–‰/์ข…๋ฃŒ

ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ๊ฒฝ๋กœ(docker-compose.yml์™€ ๊ฐ™์€ ๊ฒฝ๋กœ)์—์„œ ์‹คํ–‰.

 

๐Ÿ”น์ƒ์„ฑ, ์‹คํ–‰: up

docker-compose up -d
  • ์ปจํ…Œ์ด๋„ˆ ์—†์œผ๋ฉด → ์ƒ์„ฑ + ์‹คํ–‰
  • ์ปจํ…Œ์ด๋„ˆ ์žˆ์œผ๋ฉด → (Compose.yml ์ˆ˜์ •) ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ฐ˜์˜ํ•ด์„œ   ์žฌ์ƒ์„ฑ + ์‹คํ–‰
  • *Dockerfile ์ˆ˜์ • ์‹œ: docker-compose up -d --build ์‹œ์ž‘ + ์ƒ์„ฑ + ์‹คํ–‰

 

๐Ÿ”น์ œ๊ฑฐ: down

docker-compose down
  • ์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œ
  • ๋„คํŠธ์›Œํฌ ์‚ญ์ œ
  • โœ” “์™„์ „ํžˆ ์ข…๋ฃŒ + ์ œ๊ฑฐ”
  • โ—volume์€ ๊ธฐ๋ณธ ์œ ์ง€

 

๐Ÿ”น์ •์ง€: stop

docker-compose stop
  • ์ปจํ…Œ์ด๋„ˆ “์ •์ง€”๋งŒ ํ•จ
  • ์‚ญ์ œ ์•ˆ ํ•จ “์ผ์‹œ์ •์ง€ ๋А๋‚Œ”

 

๐Ÿ”น์žฌ์‹คํ–‰: start

docker-compose start
  • stop๋œ ์ปจํ…Œ์ด๋„ˆ ๋‹ค์‹œ ์‹คํ–‰
  • โœ” “์žฌ์‹œ์ž‘ (์ด๋ฏธ ์กด์žฌํ•ด์•ผ ํ•จ)”

 

๐Ÿ”น์ •์ง€, ์žฌ์‹คํ–‰: restrart

docker-compose restart
  • stop + start

 


๐Ÿ“Œ4. ๋ณผ๋ฅจ(volume) 

โœ…4-1. Volume ๊ฐœ๋…

Volume=๋ฐ์ดํ„ฐ ์˜์†์„ฑ

  • Docker ๋ณผ๋ฅจ = ์ปจํ…Œ์ด๋„ˆ ์™ธ๋ถ€์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„
  • ์ปจํ…Œ์ด๋„ˆ๋Š” ์›๋ž˜ ์ž„์‹œ ๊ณต๊ฐ„์—์„œ ๋™์ž‘ → ์‚ญ์ œ ์‹œ ๋ฐ์ดํ„ฐ๋„ ์‚ญ์ œ
  • ๋ณผ๋ฅจ์„ ์“ฐ๋ฉด ์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œ ํ›„์—๋„ ๋ฐ์ดํ„ฐ ์œ ์ง€ ๊ฐ€๋Šฅ

๐Ÿ“– ์˜ˆ์‹œ: DB ๋ฐ์ดํ„ฐ ์ €์žฅ

  • ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ๊ธฐ์ค€: /var/lib/mysql (MariaDB)
  • ์—ฌ๊ธฐ ์•ˆ์— DB ํŒŒ์ผ, ํ…Œ์ด๋ธ”, ์ธ๋ฑ์Šค, ๋กœ๊ทธ ๋“ฑ ๋ชจ๋‘ ์ €์žฅ

โœ… 4-2. ๋ณผ๋ฅจ ์ข…๋ฅ˜

์ข…๋ฅ˜ ์„ค๋ช… ์˜ˆ์‹œ
Named Volume (์ถ”์ฒœ) Docker๊ฐ€ ๊ด€๋ฆฌ, ์•ˆ์ „ํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ ์œ ์ง€ mariadb_data:/var/lib/mysql
Bind Mount PC ๊ฒฝ๋กœ์™€ ์ปจํ…Œ์ด๋„ˆ ์—ฐ๊ฒฐ, ํŒŒ์ผ ์ง์ ‘ ํ™•์ธ ๊ฐ€๋Šฅ ./dbdata:/var/lib/mysql
โœ” ์‹ค๋ฌด ๊ธฐ์ค€: ๊ธฐ๋ณธ์€ Named Volume, ํ•„์š” ์‹œ Bind Mount

โœ… 4-3. ๋ณผ๋ฅจ ํ™•์ธ ๋ฐฉ๋ฒ•

1๏ธโƒฃ ๋ณผ๋ฅจ ๋ฆฌ์ŠคํŠธ ํ™•์ธ

docker volume ls

2๏ธโƒฃ ๋ณผ๋ฅจ ์‹ค์ œ ๊ฒฝ๋กœ ํ™•์ธ

docker volume inspect mariadb_data

๐Ÿ“– ๊ฒฐ๊ณผ ์˜ˆ์‹œ:

[
 {
   "Name": "mariadb_data",
   "Mountpoint": "/var/lib/docker/volumes/mariadb_data/_data"
 }
]

โœ” /var/lib/docker/volumes/mariadb_data/_data ← ์‹ค์ œ DB ํŒŒ์ผ ์ €์žฅ ์œ„์น˜

 

โœ… 4-4. ์ธํ”„๋ผ ์ดˆ๊ธฐํ™” ์˜ˆ์ œ

๋งŽ์ด ์“ฐ๋Š” ์™ธ๋ถ€ ์ธํ”„๋ผ MariaDB์™€ Redis๋กœ ์‹ค์Šตํ•ด๋ณด์•˜๋‹ค.

*GUI์—์„œ๋„ ์ƒ์„ฑ/ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค!!

 

๐Ÿš€ ์ธํ”„๋ผ ์ดˆ๊ธฐํ™” ์ด์ •๋ฆฌ

  1. docker-compose up -d → ๊ณต์šฉ MariaDB, Redis, ES ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰
  2. MariaDB ์ ‘์† → ์„œ๋น„์Šค๋ณ„ DB ์ƒ์„ฑ (orders, products)
  3. ํ…Œ์ด๋ธ” ์ƒ์„ฑ → SQL ์ง์ ‘ ์ž‘์„ฑ ๋˜๋Š” Spring Boot JPA ์ž๋™ ์ƒ์„ฑ
  4. Redis ์ดˆ๊ธฐํ™” → redis-cli ์‚ฌ์šฉ
  5. ์„œ๋น„์Šค ์‹คํ–‰ → DB/Redis ์—ฐ๊ฒฐ ํ™•์ธ → ๋ณผ๋ฅจ ๋•๋ถ„์— ๋ฐ์ดํ„ฐ ์˜๊ตฌ ์ €์žฅ

โœ… 4-4-1. mariaDB

1๏ธโƒฃ MariaDB ์ ‘์† ๋ฐ DB ์ƒ์„ฑ

โ‘  ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ์ ‘์†

docker exec -it common-mariadb mysql -uroot -p
# ๋น„๋ฐ€๋ฒˆํ˜ธ: root

 

โ‘ก ํ˜ธ์ŠคํŠธ์—์„œ ์ ‘์† (ํฌํŠธ ๋งคํ•‘ ํ™œ์šฉ)

mysql -h 127.0.0.1 -P 3306 -uroot -p

 

 

โ‘ข ์„œ๋น„์Šค๋ณ„ DB ์ƒ์„ฑ

-- Order ์„œ๋น„์Šค์šฉ DB
CREATE DATABASE orders;

-- Product ์„œ๋น„์Šค์šฉ DB
CREATE DATABASE products;

-- ๊ถŒํ•œ ๋ถ€์—ฌ (root ๊ณ„์ •์€ ๊ธฐ๋ณธ์œผ๋กœ ๋ชจ๋“  DB ์ ‘๊ทผ ๊ฐ€๋Šฅ, ํ•„์š” ์‹œ ๋ณ„๋„ ๊ณ„์ • ์ƒ์„ฑ)
GRANT ALL PRIVILEGES ON orders.* TO 'root'@'%';
GRANT ALL PRIVILEGES ON products.* TO 'root'@'%';
FLUSH PRIVILEGES;

๐Ÿ’ก ํฌ์ธํŠธ: ๊ณต์šฉ MariaDB ํ•˜๋‚˜์ง€๋งŒ, DB ์ด๋ฆ„๋งŒ ๋‹ค๋ฅด๊ฒŒ ์ƒ์„ฑ → MSA ์„œ๋น„์Šค๋ณ„ ๋ฐ์ดํ„ฐ ๋ถ„๋ฆฌ

 

2๏ธโƒฃ ํ…Œ์ด๋ธ” ์ƒ์„ฑ

๐Ÿ”น ๋ฐฉ๋ฒ• 1: SQL ์ง์ ‘ ์ž‘์„ฑ (๊ธฐ์กด ์ฝ”๋“œ ์—†์„ ๋•Œ!!)

-- orders DB
USE orders;

CREATE TABLE order_info (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  user_id BIGINT NOT NULL,
  product_id BIGINT NOT NULL,
  quantity INT NOT NULL,
  status VARCHAR(50) DEFAULT 'ORDERED',
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

๐Ÿ”น ๋ฐฉ๋ฒ• 2: Spring Boot JPA ์ž๋™ ์ƒ์„ฑ (๊ธฐ์กด ์ฝ”๋“œ ์žˆ์„ )

- application.properties ์˜ˆ์‹œ (Order ์„œ๋น„์Šค ๊ธฐ์ค€)

# DB
spring.datasource.url=jdbc:mariadb://localhost:3306/orders
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
  • JPA ์—”ํ‹ฐํ‹ฐ ๊ธฐ๋ฐ˜์œผ๋กœ ํ…Œ์ด๋ธ” ์ž๋™ ์ƒ์„ฑ
  • ์žฅ์ : ์ฝ”๋“œ ์ค‘์‹ฌ ํ…Œ์ด๋ธ” ๊ด€๋ฆฌ, ์ปจํ…Œ์ด๋„ˆ ์žฌ์‹œ์ž‘ํ•ด๋„ ๋ณผ๋ฅจ ๋•๋ถ„์— ๋ฐ์ดํ„ฐ ์œ ์ง€
  • ๋‹จ์ : ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” SQL ์Šคํฌ๋ฆฝํŠธ/๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํˆด ๊ถŒ์žฅ

 

3๏ธโƒฃ ํ…Œ์ด๋ธ” ์กฐํšŒ

๐Ÿ”น ๋ฐฉ๋ฒ• 1: Docker Desktop → ์ปจํ…Œ์ด๋„ˆ ์ ‘์†

mariadb ์ปจํ…Œ์ด๋„ˆ Terminal์—์„œ.

mysql -u root -p
๋น„๋ฒˆ: root
SHOW DATABASES;
USE orders;
SHOW TABLES;

 

๐Ÿ”น ๋ฐฉ๋ฒ• 2: DB ํˆด (์ถ”์ฒœ ๐Ÿ‘)

๐Ÿ”ฅ ์—ฐ๊ฒฐ ์ •๋ณด

host: localhost

port: 3307 (๋‚˜๋Š” ๋กœ์ปฌ์— mariaDB๊ฐ€ 3306์จ์„œ ์ด๋ ‡๊ฒŒ ์„ค์ •ํ•จ)

user: root

password: root

database: orders

 

# DB

spring.datasource.url=jdbc:mariadb://localhost:3307/orders

 

โœ… IDE์—์„œ ์‹คํ–‰ํ•  ๋•Œ

jdbc:mariadb://localhost:3307/orders

 

โœ… Docker ์•ˆ์—์„œ ์‹คํ–‰ํ•  ๋•Œ

jdbc:mariadb://mariadb:3306/orders

 

โœ… 4-4-2. Redis ์ดˆ๊ธฐํ™” / ํ™•์ธ

๐Ÿ”น ์ปจํ…Œ์ด๋„ˆ ์ ‘์†:

docker exec -it common-redis redis-cli

 

๐Ÿ”น ๋ฐ์ดํ„ฐ ํ™•์ธ / ์‚ญ์ œ

> KEYS *          # ๋ชจ๋“  key ํ™•์ธ

> FLUSHALL        # ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์‚ญ์ œ (์ดˆ๊ธฐํ™”)

 

๐Ÿ’ก Redis๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜์ด๋ผ ์ดˆ๊ธฐํ™”๋Š” ์ด๋ ‡๊ฒŒ CLI๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ฐ€๋Šฅ


๐Ÿ“Œ 5. Docker ๋„คํŠธ์›Œํฌ & DNS

๐Ÿ”น ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฐ๊ฐ localhost๋ฅผ ๊ฐ€์ง„๋‹ค

  • ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋Š” ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ ์ทจ๊ธ‰
  • localhost = ์ž๊ธฐ ์ž์‹ 

๐Ÿ”น ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ํ†ต์‹  ๋ฐฉ๋ฒ•

  • Docker Compose๋Š” ์ปจํ…Œ์ด๋„ˆ๋ผ๋ฆฌ ํ†ต์‹ ์šฉ DNS๋ฅผ ์ž๋™ ์ƒ์„ฑํ•œ๋‹ค. 
  • ์„œ๋น„์Šค ์ด๋ฆ„์œผ๋กœ ํ†ต์‹  (eureka-server)

๐Ÿ”น ์™ธ๋ถ€ ↔ ์ปจํ…Œ์ด๋„ˆ ํ†ต์‹ 

  • ํฌํŠธ ๋งคํ•‘ (8761:8761)
  • ํฌํŠธ ํฌ์›Œ๋”ฉ(port mapping) => ๋‚ด ๋กœ์ปฌ PC์—์„œ ์‹คํ–‰์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ or ๋ธŒ๋ผ์šฐ์ €๋กœ ์ง์ ‘ ์ ‘์† ์‹œ์—๋Š”, localhost๋กœ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰์ค‘์ธ ์„œ๋น„์Šค์— ์ ‘์†๊ฐ€๋Šฅํ•˜๋‹ค!!

 

๐Ÿ”น ์ปจํ…Œ์ด๋„ˆ → ๋กœ์ปฌ PC ์ ‘๊ทผ

  • Host.docker.internal => Docker๊ฐ€ ํŠน๋ณ„ํžˆ ์ œ๊ณตํ•˜๋Š” ๊ฐ€์งœ DNS ์ด๋ฆ„
  • *Linux๋Š” ์•ˆ ๋ ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

 

๐Ÿš€ ๋„คํŠธ์›Œํฌ ํ๋ฆ„ ์ด์ •๋ฆฌ

[๋‚ด PC]
   localhost:8080  → ์ปจํ…Œ์ด๋„ˆ (ํฌํŠธํฌ์›Œ๋”ฉ)
   localhost:8761  → ์ปจํ…Œ์ด๋„ˆ (ํฌํŠธํฌ์›Œ๋”ฉ)

[์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€]
   localhost       → ์ž๊ธฐ ์ž์‹  โŒ
   eureka-server   → ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ โœ…
   host.docker.internal → ๋‚ด PC โœ…

 


๐Ÿ“Œ 6. ํ™˜๊ฒฝ๋ณ€์ˆ˜

๋กœ์ปฌ/์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ํ™˜๊ฒฝ์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •์ด ํ•„์š”ํ•˜๋‹ค.

Docker-compose.yml์— ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •ํ•˜๋ฉด application.yml ์„ค์ • ๋ฎ์–ด์จ์„œ ๋กœ์ปฌ์‹คํ–‰, ๋„์ปค์‹คํ–‰ ๋‘˜๋‹ค ๊ฐ€๋Šฅํ•˜๋‹ค.

 

โœ… 6-1. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ด๋ฆ„

Spring boot ์„ค์ •ํŒŒ์ผ (application.yml or application-properties)๋ž‘ ๋งคํ•‘๋œ๋‹ค.

eureka.client.service-url.defaultZone

EUREKA_CLIENT_SERVICEURL_DEFAULTZONE

 

๐Ÿ“– ์˜ˆ์‹œ

# ๋กœ์ปฌ pc์—์„œ ์„œ๋น„์Šค ์‹คํ–‰ ์‹œ (eureka, gateway)
# application.yml
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
↓
# ๋„์ปค์“ฐ๋ฉด ์„œ๋น„์Šค ๋„ค์ž„์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ํ†ต์‹ 
# docker-compose.yml
environment:
 - EUREKA_CLIENT_SERVICEURL_DEFAULTZONE=http://eureka-server:8761/eureka/

 


๐Ÿ“Œ 7. ์‹ค์Šต: MSA ๊ณตํ†ต ์ธํ”„๋ผ ์ž๋™ ์‹คํ–‰

๊ธฐ์กด ์กด์žฌํ•˜๋˜ MSA ํ”„๋กœ์ ํŠธ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธํ”„๋ผ๋ฅผ ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ ์‹œ ๊ฐ™์ด ์‹คํ–‰๋˜๊ฒŒ ํ•˜๋ ค๊ณ ํ•œ๋‹ค! 

  • eureka-server์™€ api-gateway๋Š” ๊ณตํ†ต ์ธํ”„๋ผ๋Š” ๋ณ€๊ฒฝ์ด ์ ๊ณ , ํ•ญ์ƒ ๋จผ์ € ์‹คํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค.
  • ์ปจํ…Œ์ด๋„ˆ๋กœ ๊ณ ์ • ์‹คํ–‰ํ•˜์—ฌ ์•ˆ์ •์ ์œผ๋กœ ์„œ๋น„์Šค ์˜์กด์„ฑ ์ˆœ์„œ ๋ณด์žฅ (eureka → gateway → ์„œ๋น„์Šค)ํ•˜๊ณ ์ž ํ•œ๋‹ค.
  • ๋น„์ฆˆ๋‹ˆ์Šค ์„œ๋น„์Šค(order, product ๋“ฑ)๋Š” ๊ฐœ๋ณ„๋กœ ์ˆ˜๋™ ์‹คํ–‰

 

โœ… 7-1. Compose.yml ์ˆ˜์ • (๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์€ 3๋ฒˆ ์˜ˆ์ œ ์ฐธ๊ณ !)

  • ํฌํŠธ ๋งคํ•‘
  • Healthcheck๊ณผ depends_on์œผ๋กœ ์‹คํ–‰ ์ˆœ์„œ ์ œ์–ด. (์˜์กด์„ฑ ๊ด€๋ฆฌ)
  • Environment๋กœ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
  • Profile ์„ค์ •
 # =====================
  # ์ž๋™ ์‹œ์ž‘ MSA
  # =====================
  eureka-server:
    build: ./eureka
    container_name: eureka-server
    ports:
      - "8761:8761"
    depends_on:  # ๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹ (์˜ˆ์‹œ์ž„. ์–˜๋Š” ์˜์กด์„ฑ ํ•„์š”์—†๋‹ค)
      - mariadb
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8761/actuator/health"]
      interval: 5s
      retries: 10

  api-gateway:
    build: ./gateway
    container_name: api-gateway
    ports:
      - "8080:8080"
    Depends_on: # ๊ฐ์ฒด ๋ฐฉ์‹
        mariadb:
            condition: service_started
        eureka-server:
            condition: service_healthy
    environment:
      - EUREKA_CLIENT_SERVICEURL_DEFAULTZONE=http://eureka-server:8761/eureka/
    # healthcheck:
    #   test: ["CMD", "curl", "-f", "http://localhost:8080/actuator/health"]
    #   interval: 5s
    #   retries: 10


# =====================
# ๋‹ค๋ฅธ ์„œ๋น„์Šค (์ˆ˜๋™ ์‹คํ–‰)
# =====================
  order-service:
    build: ./order-service
    container_name: order-service
    profiles: ["optional"]
    ports:
      - "8085:8080"
    depends_on:
      eureka-server:
        condition: service_healthy
    environment:
      - EUREKA_CLIENT_SERVICEURL_DEFAULTZONE=http://eureka-server:8761/eureka/
  product-service:
    build: ./product-service
    container_name: product-service
    profiles: ["optional"]
    ports:
      - "8083:8080"
    depends_on:
      eureka-server:
        condition: service_healthy
    environment:
      - EUREKA_CLIENT_SERVICEURL_DEFAULTZONE=http://eureka-server:8761/eureka/โ€‹

 

โœ… 7-2. JAR ํŒŒ์ผ ์ค€๋น„

1๏ธโƒฃ Build.gradle

tasks.bootJar {
    archiveFileName = 'gateway.jar'                // JAR ์ด๋ฆ„
    destinationDirectory = file("$buildDir/target") // ๊ฒฝ๋กœ
}

2๏ธโƒฃ \gradlew bootJar ์ˆ˜ํ–‰

3๏ธโƒฃ build/target/{}.jar ํŒŒ์ผ ์ƒ์„ฑ ํ™•์ธ.

 

โœ…7-3. ๋„์ปค ์ด๋ฏธ์ง€ ์ค€๋น„

๊ฐ ์„œ๋น„์Šค(ํด๋”) ์•ˆ์— Dockerfile ํ•„์š”

- Dockerfile (eureka)

FROM eclipse-temurin:17-jdk # jdk๋ฒ„์ „ ์œ ์˜ (์œ ํšจ๋ฒ„์ „ ๊ฒ€์ƒ‰)
COPY build/target/eureka-server.jar /app.jar # ์‹ค์ œ jar ์œ„์น˜
ENTRYPOINT ["java", "-jar", "/app.jar"]

 

โœ… 7-4. docker-compose up ์‹คํ–‰ ์˜ต์…˜

๐Ÿ”น ๊ธฐ๋ณธ ์‹คํ–‰

profile ์†์„ฑ์ด ์—†๋Š” ์„œ๋น„์Šค ์ „์ฒด ์‹คํ–‰

docker-compose up -d

 

๐Ÿ”น profile ํฌํ•จ ์‹คํ–‰

profiles: ["optional"] ์†์„ฑ ํฌํ•จ ์ „์ฒด ์„œ๋น„์Šค ์‹คํ–‰

*๋น„์ฆˆ๋‹ˆ์Šค ์„œ๋น„์Šค ๊ฐœ๋ฐœ ์‹œ์—๋Š” ๋กœ์ปฌPC IDE์—์„œ ์‹คํ–‰, ์šด์˜์—์„œ๋Š” ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅ!!

docker-compose --profile optional up -d

 

๐Ÿ”น๊ฐœ๋ณ„ ์„œ๋น„์Šค ์‹คํ–‰

Profiles์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด ๊ฐœ๋ณ„๋กœ ์‹คํ–‰๊ฐ€๋Šฅ.

docker-compose up -d order-service

์—ฌ๋Ÿฌ๊ฐœ ์„ ํƒ ์‹คํ–‰๋„ ๊ฐ€๋Šฅ.

docker-compose up -d  eureka-server api-gateway mariadb redis

 

1๏ธโƒฃ ์Šคํ”„๋ง๋ถ€ํŠธ Jar ํŒŒ์ผ ์ง์ ‘ ์‹คํ–‰ (Dockerfile ์—†์ด)

  • ์ด๋ฏธ ๋นŒ๋“œ๋œ jar ํŒŒ์ผ์ด ์žˆ๋‹ค๋ฉด image: + command:๋กœ ๋ฐ”๋กœ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ๊ฐ€๋Šฅ
api-gateway:
 image: openjdk:17
 container_name: api-gateway

 ports:
   - "8080:8080"

 volumes:
   - ./api-gateway/target:/app

 working_dir: /app
 command: ["java", "-jar", "api-gateway.jar"]
 depends_on:
   - eureka-server

โœ”  ./api-gateway/target/api-gateway.jar ๊ฒฝ๋กœ์— ์‹ค์ œ jar ํŒŒ์ผ ์žˆ์–ด์•ผ ํ•จ

โœ”  Dockerfile ์—†์ด๋„ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅ

 

๐Ÿ”น ํ™•์ธ

# ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ ํ™•์ธ
docker ps

# Eureka ์„œ๋ฒ„๊ฐ€ ์ •์ƒ ๊ตฌ๋™๋๋Š”์ง€ ํ™•์ธ
docker logs eureka-server

# Gateway ์ •์ƒ ๊ตฌ๋™ ํ™•์ธ
docker logs api-gateway