DrawingProcess
๋“œํ”„ DrawingProcess
DrawingProcess
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
ยซ   2025/06   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (968) N
    • Profile & Branding (25)
      • Career (18)
    • IT Trends (254)
      • Conference, Faire (Experien.. (31)
      • News (187)
      • Youtube (19)
      • TED (8)
      • Web Page (2)
      • IT: Etc... (6)
    • Contents (98) N
      • Book (67) N
      • Lecture (31)
    • Project Process (94)
      • Ideation (0)
      • Study Report (34)
      • Challenge & Award (22)
      • 1Day1Process (5)
      • Making (5)
      • KRC-FTC (Team TC(5031, 5048.. (10)
      • GCP (GlobalCitizenProject) (15)
    • Study: ComputerScience(CS) (72)
      • CS: Basic (9)
      • CS: Database(SQL) (5)
      • CS: Network (14)
      • CS: OperatingSystem (3)
      • CS: Linux (39)
      • CS: Etc... (2)
    • Study: Software(SW) (95)
      • SW: Language (29)
      • SW: Algorithms (1)
      • SW: DataStructure & DesignP.. (1)
      • SW: Opensource (15)
      • SW: Error Bug Fix (43)
      • SW: Etc... (6)
    • Study: Artificial Intellige.. (149)
      • AI: Research (1)
      • AI: 2D Vision(Det, Seg, Tra.. (35)
      • AI: 3D Vision (70)
      • AI: MultiModal (3)
      • AI: SLAM (0)
      • AI: Light Weight(LW) (3)
      • AI: Data Pipeline (7)
      • AI: Machine Learning(ML) (1)
    • Study: Robotics(Robot) (33)
      • Robot: ROS(Robot Operating .. (9)
      • Robot: Positioning (8)
      • Robot: Planning & Control (7)
    • Study: DeveloperTools(DevTo.. (83)
      • DevTool: Git (12)
      • DevTool: CMake (13)
      • DevTool: NoSQL(Elastic, Mon.. (25)
      • DevTool: Container (17)
      • DevTool: IDE (11)
      • DevTool: CloudComputing (4)
    • ์ธ์ƒ์„ ์‚ด๋ฉด์„œ (64)
      • ๋‚˜์˜ ์ทจ๋ฏธ๋“ค (7)
      • ๋‚˜์˜ ์ƒ๊ฐ๋“ค (42)
      • ์—ฌํ–‰์„ ๋– ๋‚˜์ž~ (10)
      • ๋ถ„๊ธฐ๋ณ„ ํšŒ๊ณ  (5)

๊ฐœ๋ฐœ์ž ๋ช…์–ธ

โ€œ ๋งค์ฃผ ๋ชฉ์š”์ผ๋งˆ๋‹ค ๋‹น์‹ ์ด ํ•ญ์ƒ ํ•˜๋˜๋Œ€๋กœ ์‹ ๋ฐœ๋ˆ์„ ๋ฌถ์œผ๋ฉด ์‹ ๋ฐœ์ด ํญ๋ฐœํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด๋ผ.
์ปดํ“จํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ด๋Ÿฐ ์ผ์ด ํ•ญ์ƒ ์ผ์–ด๋‚˜๋Š”๋ฐ๋„ ์•„๋ฌด๋„ ๋ถˆํ‰ํ•  ์ƒ๊ฐ์„ ์•ˆ ํ•œ๋‹ค. โ€

- Jef Raskin

๋งฅ์˜ ์•„๋ฒ„์ง€ - ์• ํ”Œ์ปดํ“จํ„ฐ์˜ ๋งคํ‚จํ† ์‹œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ฃผ๋„

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๊ธ€

์ตœ๊ทผ ๋Œ“๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
DrawingProcess

๋“œํ”„ DrawingProcess

[Docker] docker compose ์ •๋ฆฌ (feat. docker-compose.yml)
Study: DeveloperTools(DevTool)/DevTool: Container

[Docker] docker compose ์ •๋ฆฌ (feat. docker-compose.yml)

2022. 9. 5. 18:28
๋ฐ˜์‘ํ˜•
๐Ÿ’ก ๋ณธ ๋ฌธ์„œ๋Š” 'docker compose'์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋†“์€ ๊ธ€์ž…๋‹ˆ๋‹ค.
๊ฐ„๋‹จํ•˜๊ฒŒ 'docker compose'๊ฐ€ ๋ฌด์—‡์ด๋ฉฐ, 'docker-compose.yml ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•' ๋ฐ '์‹ค์ œ ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ด์šฉํ•œ ์„œ๋น„์Šค ๊ตฌ๋™'๊นŒ์ง€ ๋‹ค๋ฃจ๊ณ  ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

1. docker compose ์— ๋Œ€ํ•˜์—ฌ

1.1 docker-compose๋ž€? ๋ฉ€ํ‹ฐ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ตฌ๋™ํ•˜์ž!

๊ธฐ์กด์— Docker ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์— ์„œ๋กœ ์—ญํ• ์ด ๋ถ„๋ฆฌ๋˜์–ด ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๋ฅผ ์œ„ํ•ด์„œ Docker ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ช‡ ๊ฐœ ์ƒ์„ฑํ•˜๋ ค ํ•œ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

$ docker run elasticsearch
$ docker run kibana
$ docker run mysql
๊ทธ๋ฆฌ๊ณ  ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์„œ๋กœ ์—ฐ๋™์ด ๋˜์–ด์•ผ ํ•œ๋‹ค๋ฉด ์ปจํ…Œ์ด๋„ˆ ์‚ฌ์ด์˜ ๋งํฌ ์„ค์ •๋„ ์ž˜ ํ•ด์•ผ ํ•˜๊ธฐ์—, ์ด๋Ÿฐ ๋ถˆํŽธํ•จ์„ ์ผ๋ถ€ ํ•ด์†Œํ•  ์ˆ˜ ์žˆ๋Š” ํˆด์ด Docker Compose ๋ผ๋Š” ํˆด์ž…๋‹ˆ๋‹ค. ์ด ํˆด์€ docker build๋ฅผ ํ†ตํ•œ ์ด๋ฏธ์ง€ ์ƒ์„ฑ์„ ๋น„๋กฏํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ ์‚ฌ์ด์˜ ์„ค์ •๊ณผ docker container run ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ณผ๋ฅจ, ๋„คํŠธ์›Œํฌ, ํฌํŠธ ์ •๋ณด๋ฅผ  docker-compose.yml ๋ผ๋Š” configuration ํŒŒ์ผ์— ์„ค์ •ํ•˜์—ฌ ๋ฉ€ํ‹ฐ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ตฌ๋™์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
services:
    elasticsearch:
    	image: "elasticsearch"
    kibana:
    	image: "kibana"
    rdb:
    	image: "mysql"
  • Docker Compose๊ฐ€ Dockerfile๋กœ ์ •์˜ํ•œ Costom image๋ฅผ ๋นŒ๋“œ ์ž์ฒด๋Š” ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค๋งŒ Dockerfile์„ ๋Œ€์ฒดํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.
  • Docker Compose๋Š” ๋‹จ์ผ ํ˜ธ์ŠคํŠธ ๋จธ์‹ ์˜ ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ œ์–ดํ•˜๋Š”๋ฐ ์ ํ•ฉํ•˜๋ฉฐ, ์—ฌ๋Ÿฌ ํ˜ธ์ŠคํŠธ ๋จธ์‹ ์— ํฉ์–ด์ ธ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ์ œ์–ดํ•˜๋Š”๋ฐ๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด์„œ๋Š” Docker Swarm, kubernetes์™€ ๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ํˆด์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

 

2. docker compose ์ž‘์„ฑํ•˜๊ธฐ

2.1 docker compose ์ž‘์„ฑํ•˜๊ธฐ: YAML ํŒŒ์ผ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž (feat. docker-compose.yml)

Docker Compose ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํŒŒ์ผ์€ docker-compose.yml๋กœ YAML ํ˜•์‹์˜ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.
  • YAML ๋ฌธ๋ฒ•: http://serious-code.net/doku/doku.php?id=kb:yamltutorial
  • YAML ๋ฌธ๋ฒ• ๊ฒ€์ฆ: http://yaml-online-parser.appspot.com/
 

2.2 docker compose ์ž‘์„ฑํ•˜๊ธฐ: ์ฃผ์š” ์ง€์‹œ์ž ์†Œ๊ฐœ

docker-compose.yml ํŒŒ์ผ์—๋Š” ๋ฐ˜๋“œ์‹œ image ๋‚˜ build ์ง€์‹œ์ž๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์š” ํ‚ค๋กœ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์žˆ์Šต๋‹ˆ๋‹ค.
image
Docker Image ๋ฅผ ์ž…๋ ฅ
build
Dockerfile ์ด ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ์˜ ๊ฒฝ๋กœ๋ฅผ ์ž…๋ ฅ
command
Dockerfile ์ด๋‚˜ image ์˜ ์‹œ์ž‘ command ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œ
links
์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹ค๋ฅธ ์„œ๋น„์Šค๋“ค๊ณผ ํ†ต์‹  ๊ฐ€๋Šฅํ•˜๊ฒŒ ์—ฐ๊ฒฐํ•˜๊ณ  ์ข…์†์„ฑ์„ ์„ค์ •
external_links
์ปจํ…Œ์ด๋„ˆ๋ฅผ compose ํŒŒ์ผ ์™ธ๋ถ€์— ์žˆ๋Š” ์„œ๋น„์Šค์™€ ์—ฐ๊ฒฐ
extra_hosts
์ปจํ…Œ์ด๋„ˆ์˜ /etc/hosts ์— ์™ธ๋ถ€ ํ˜ธ์ŠคํŠธ์ •๋ณด๋ฅผ ์ถ”๊ฐ€
ports
์ปจํ…Œ์ด๋„ˆ์—์„œ ํ˜ธ์ŠคํŠธ ์™€ ํ†ต์‹ ํ•  ํฌํŠธ๋ฅผ ์ง€์ •
expose
ํ˜ธ์ŠคํŠธ์—๋Š” ๋…ธ์ถœํ•˜์ง€ ์•Š๊ณ  ์—ฐ๊ฒฐ๋œ ์„œ๋น„์Šค๋ผ๋ฆฌ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ํฌํŠธ ์ž…๋ ฅ
volumes
ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋ณผ๋ฅจ์œผ๋กœ ๋งˆ์šดํŠธํ•  ๋•Œ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‚ฌ์šฉํ•  ๊ฒฝ๋กœ๋ฅผ ์ž…๋ ฅ
volumes_from
๋‹ค๋ฅธ ์„œ๋น„์Šค๋‚˜ ์ปจํ…Œ์ด๋„ˆ์˜ ์ „์ฒด ๋ณผ๋ฅจ์„ ๋งˆ์šดํŠธ
depends_on
 ์„œ๋น„์Šค ๊ฐ„์— ์ข…์†์„ฑ์„ ์„ค์ •
deploy
 ๋„์ปค ์Šค์›œ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์—ฌ๋Ÿฌ ์˜ต์…˜๋“ค์„ ์ •์˜
secrets
 ํŒจ์Šค์›Œ๋“œ ๋“ฑ์˜ secret ์ •๋ณด๋ฅผ ์ €์žฅ์‹œ ์‚ฌ์šฉ

 

2.3 docker compose ์ž‘์„ฑํ•˜๊ธฐ: ์ง€์‹œ์ž ์šฉ๋ก€ ๋ฐ ์ž์„ธํ•œ ์„ค๋ช…

version

๋„์ปค ์ปดํฌ์ฆˆ ํŒŒ์ผ ๊ฐ€์žฅ ์œ„์˜ version์€ ๋„์ปค ์ปดํฌ์ฆˆ ์ŠคํŽ™์— ๋Œ€ํ•œ ๋ฒ„์ „์œผ๋กœ ์ด ๋ฒ„์ „์— ๋”ฐ๋ผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ๋“ค์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๊ณ , ๊ฐ™์€ ๊ธฐ๋Šฅ์ด๋ผ๋„ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•, ์ฆ‰ ๋ฌธ๋ฒ•์— ์ฐจ์ด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด๊ฐ€๋ฉฐ ์‚ฌ์šฉํ•˜๋Š” ๋ฒ„์ „์— ๋งž๋Š” ํ˜•์‹์œผ๋กœ ์ž‘์„ฑ์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Compose File Version ๊ฐ€์ด๋“œ๋ผ์ธ ๋ฌธ์„œ๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๋ฒ„์ „, ๊ฐ ๋ฒ„์ „์— ๋”ฐ๋ฅธ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ ๋ฐ ๊ฐ€์ด๋“œ๋ผ์ธ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

version: "1.x"

  • ๊ธฐ๋ณธ ์ปจํ…Œ์ด๋„ˆ ๋„คํŠธ์›Œํฌ๋กœ ๊ธฐ๋ณธ ๋ธŒ๋ฆฌ์ง€ ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 
  • ๋งŒ์•ฝ์— ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค๋ฅธ network ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์ด๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ์ง€์‹œ์ž๊ฐ€ ์—†๊ณ 
  • ์ปจํ…Œ์ด๋„ˆ๊ฐ„ ์ข…์†์„ฑ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ง€์‹œ์ž๋„ ์—†์Šต๋‹ˆ๋‹ค.

version: "2.x"

  • ๋‹ค์–‘ํ•œ ๋„คํŠธ์›Œํฌ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๊ณ  ์ปจํ…Œ์ด๋„ˆ ์ข…์†์„ฑ๋„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์‹œ์ž๋ฅผ ์ถ”๊ฐ€ํ–ˆ์œผ๋ฉฐ,
  • version ์ง€์‹œ์ž๋ฅผ ์ถ”๊ฐ€ํ–ˆ๊ณ  services ๋ผ๋Š” ์ง€์‹œ์ž ์•„๋ž˜ ์„œ๋น„์Šค๋ฅผ ๊ธฐ์ˆ ํ•˜๋„๋ก ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค.

version: "3.x"

  • Docker Swarm ์„ ์ง€์›ํ•˜๋ฉฐ,
  • V2 ์—์„œ ์ง€์›ํ•˜๋˜ ๋ช‡๋ช‡ ์ง€์‹œ์ž๊ฐ€ ๋น ์ง€๊ฑฐ๋‚˜ ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค.
 

services

๊ด€๋ จ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฌถ์„ ๊ฒฝ์šฐ, services ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค (๋‹จ์ผ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„์šธ๋•Œ์—๋„ ์‚ฌ์šฉํ•ด๋„ ๋ฌด๋ฐฉํ•ฉ๋‹ˆ๋‹ค.).
์˜ˆ๋ฅผ ๋“ค์–ด ์›น ์„œ๋น„์Šค๋ฅผ ์œ„ํ•ด FrontEnd, Application, DB ๊ฐ™์ด 3๊ฐ€์ง€ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด, ์ด๋ฅผ services ํ•˜์œ„์— ์ •์˜ํ•ด ์ค๋‹ˆ๋‹ค.
services:
  FrontEnd:
  Application:
  DB:
 

image

Docker ์ปจํ…Œ์ด๋„ˆ์˜ ๊ธฐ๋ฐ˜์ด ๋˜๋Š” ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€๋ฅผ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•œ ํ‚ค๋กœ, ๋กœ์ปฌ์— ์ด๋ฏธ์ง€๊ฐ€ ์—†์œผ๋ฉด ๊ทธ ์ด๋ฏธ์ง€๋ฅผ ์›๊ฒฉ ์ €์žฅ์†Œ์—์„œ Pull ํ•ด์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
webserver:
  image: docker/dockersample:1.0
 

build

build ํ‚ค์— Dockerfile ์ด ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ์˜ ๊ฒฝ๋กœ๋ฅผ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ, ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์˜ Dockerfile์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.
# docker-compose.yml ํŒŒ์ผ์„ ์‚ฌ์šฉ์‹œ
 
  services:
    webapp:
      build: ./dir
  
# docker-compose.yml ๋Œ€์‹  ๋‹ค๋ฅธ ๋Œ€์ฒด ํŒŒ์ผ ์‚ฌ์šฉ์‹œ
 
  services:
    webapp:
      build:
        context: ./dir
        dockerfile: Dockerfile-alternate
  
# ๋„์ปค ํŒŒ์ผ ๋‚ด๋ถ€์— ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ธ์ž ์ „๋‹ฌ ๋ฐฉ๋ฒ•
 
## Dockerfile
    ...
    ARG buildno
    RUN echo "Build number: $buildno"
    
## docker-compose.yaml
    services:
      webapp:
        build:
         context: ./dir
         args:
          - buildno: 1
 

command

์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ๋™์ž‘ํ•˜๋Š” ์ปค๋งจ๋“œ ์ง€์ •์‹œ ์‚ฌ์šฉ์‹œ command ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๋„์ปค ํŒŒ์ผ ๋‚ด๋ถ€์— ์žˆ๋Š” CMD ๊ฐ€ ์ด๋ฏธ ์žˆ๋Š” ๊ฒฝ์šฐ ์ด๋ฅผ Override ํ•ฉ๋‹ˆ๋‹ค.
webserver:
  image: ubuntu
  command: /bin/bash
 

entrypoint

์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ๋™์ž‘ํ•˜๋Š” ์—”ํŠธ๋ฆฌ ํฌ์ธํŠธ ์ง€์ •์‹œ entrypoint ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๋„์ปค ํŒŒ์ผ ๋‚ด๋ถ€์— ์žˆ๋Š” ENTRYPOINT ๊ฐ€ ์ด๋ฏธ ์žˆ๋Š” ๊ฒฝ์šฐ ์ด๋ฅผ Override ํ•ฉ๋‹ˆ๋‹ค.
webserver:
  image: ubuntu
  entrypoint: /code/entrypoint.sh
์•„๋ž˜์™€ ๊ฐ™์ด ๋ช…๋ น์„ ์ง์ ‘ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
configuration_generator:
  image: java:8-jdk
  entrypoint:
    - java
    - -cp
    - zookeeper-vertx-example-0.0.1-fat.jar
    - com.lukeolbrish.example.ConfigurationGenerator
 

links

์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹ค๋ฅธ ์„œ๋น„์Šค๋“ค๊ณผ ์—ฐ๊ฒฐ์‹œ links ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ด ์ปจํ…Œ์ด๋„ˆ์˜ /etc/hosts ํŒŒ์ผ์— ๊ทธ ๋‚ด์šฉ์ด ์ถ”๊ฐ€๋˜์–ด์„œ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ ๋“ค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
links:
 - db
 - db:database
 - redis
์œ„์™€ ๊ฐ™์ด ์„ค์ •์„ ํ•˜๊ฒŒ ๋˜๋ฉด /etc/hosts ํŒŒ์ผ์— ๋‚ด์šฉ์ด ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ€๊ฒฝ๋˜์–ด ๋งํฌ๋œ ์ปจํ…Œ์ด๋„ˆ์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
192.168.1.186 db
192.168.1.186 database
192.168.1.187 redis
๋˜ํ•œ ๋งํฌ๋Š” depends_on๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์„œ๋น„์Šค ๊ฐ„์˜ ์ข…์†์„ฑ์„ ํ‘œํ˜„ํ•˜๋ฏ€๋กœ ์„œ๋น„์Šค ์‹œ์ž‘ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค(์ฆ‰ links ์— ๊ธฐ์ˆ ํ•œ ์„œ๋น„์Šค๊ฐ€ ๋จผ์ € ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.).
 

external_links

links ์™€ ๋น„์Šทํ•œ ๋ฐฉ์‹์œผ๋กœ ์„ค์ •ํ•˜์ง€๋งŒ compose ๋‚ด๋ถ€์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์•„๋‹ˆ๋ผ compose ์™ธ๋ถ€์— ์žˆ๋Š” ์„œ๋น„์Šค ํ˜น์€ ์ปจํ…Œ์ด๋„ˆ์™€ ์—ฐ๊ฒฐ์‹œ external_links ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
external_links:
  - redis
  - project_db:mysql
 

extra_hosts

์ปจํ…Œ์ด๋„ˆ์˜ /etc/hosts ์— ์™ธ๋ถ€ ํ˜ธ์ŠคํŠธ์ •๋ณด๋ฅผ ์ถ”๊ฐ€์‹œ external_hosts ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, DNS ์ง€์ •ํ•  ๋•Œ์—๋„ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์•„์ดํ”ผ๋ฅผ ๋„๋ฉ”์ธ์œผ๋กœ ๋งตํ•‘ํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.
extra_hosts:
  - "somehost: 162.168.2.31"
์œ„์™€ ๊ฐ™์ด ์„ค์ •์„ ํ•˜๊ฒŒ ๋˜๋ฉด /etc/hosts ํŒŒ์ผ์— ๋‚ด์šฉ์ด ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.
162.168.2.31 somehost

๋ฆฌ๋ˆ…์Šค์˜ ๊ฒฝ์šฐ์—๋Š” host.docker.internal์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด extra_hosts์— ์ถ”๊ฐ€ํ•ด ์ฃผ์–ด์•ผ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค!

extra_hosts:
- "host.docker.internal:host-gateway"
  • ์ถœ์ฒ˜: stackoverflow, What is linux equivalent of "host.docker.internal"
 

volumes

์ปจํ…Œ์ด๋„ˆ์— ๋ณผ๋ฅจ์„ ๋งˆ์šดํŠธ(mount) ์‹œ volumes ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณผ๋ฅจ์„ ready only ์œผ๋กœ ๋งˆ์šดํŠธ ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ :ro ๋ฅผ ๋ถ™์ž„ (์„ค์ • ํŒŒ์ผ๋“ฑ์— ์œ ์šฉ)
  • ๋ณผ๋ฅจ์„ ready write ๋กœ ๋งˆ์šดํŠธ ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ :rw ๋ฅผ ๋ถ™์ž„

๋ณผ๋ฅจ type ์„ค์ •

  • type: volume ์ธ ๊ฒฝ์šฐ, NamedVolume (๊ฒฝ๋กœ๋ฅผ ํŠน์ • ์ด๋ฆ„์œผ๋กœ ์„ค์ •) ์„ ๋งํ•˜๊ณ 
  • type: bind ์ธ ๊ฒฝ์šฐ, ์ •์  bind ( source: ํ˜ธ์ŠคํŠธ ๋ณผ๋ฅจ ) ๋ฐ ๋™์  bind (source ๋ฅผ ๋น„์›Œ๋†“์Œ) ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
version: "3.2"
services:
web:
  image: nginx:alpine
  volumes:
   # Named Volumes 
   - type: volume
     source: mydata
     target: /data
     volume:
       nocopy: true
  # Host Volumes
   - type: bind
     source: ./static
     target: /opt/app/static

db:
  image: postgres:latest
  volumes:
    #SHORT SYNTAX
   - "/var/run/postgres/postgres.sock:/var/run/postgres/postgres.sock"
   - "dbdata:/var/lib/postgresql/data"

# Named Volumes
volumes:
  mydata:
  dbdata:
 

environment

์ปจํ…Œ์ด๋„ˆ ๋‚ด์˜ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ง€์ •์‹œ environment ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
#๋ฐฐ์—ด ํ˜•์‹์œผ๋กœ ์ง€์ •
environment:
  - HOGE=fuga
  - FOO

#hash ํ˜•์‹์œผ๋กœ ์ง€์ •
environment:  
  HOGE: fuga
  FOO:
 

env_file

ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•œ ํŒŒ์ผ์„ ํ˜ธ์ถœํ•˜๋Š” ํŒŒ์ผ์„ ์ง€์ •์‹œ env_file ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์„ค์ •ํ•˜๊ณ ์ž ํ•˜๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ env_file ์— ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ’์„ ๋„ฃ์–ด๋†“๊ณ  ์ด๋ฅผ ๊ฐ€์ ธ๋‹ค ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ํ•„์š”ํ•˜๋‹ค.
#ํ™˜๊ฒฝ๋ณ€์ˆ˜ ํŒŒ์ผ ์ฝ๊ธฐ
env_file: .env

#์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ํŒŒ์ผ ์ฝ๊ธฐ
env_file:
  - ./common.env
  - ./apps/web.env
  - /opt/secrets.env
 

depends_on

์„œ๋น„์Šค๊ฐ„ ๋ช…์‹œ์  ์ข…์†์„ฑ์„ ๋ถ€์—ฌํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ depends_on ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค์ •ํ•˜๋ฉด db์™€ redis ์‹œ์ž‘์ „์— ์‹œ์ž‘ web ์ด ๋จผ์ € ๊ตฌ๋™๋ฉ๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” links ๋กœ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ์™€ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•˜๋ฉด ์•”์‹œ์ ์œผ๋กœ ์—ฐ๊ฒฐ์ด ํ•„์š”ํ•œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋จผ์ € ๊ตฌ๋™์‹œํ‚ต๋‹ˆ๋‹ค.
version: '3'
services:
  web:
    build: .
    depends_on:
       - db
       - redis
  redis:
    image: redis
  db:
    image: postgres
 

devices

ํ˜ธ์ŠคํŠธ์˜ ์žฅ์น˜๋ฅผ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฐ๊ฒฐ์‹œ devices ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
devices:
  - "/dev/ttyUSB0:/dev/ttyUSB0"
 

ports

์ปจํ…Œ์ด๋„ˆ์—์„œ ํ˜ธ์ŠคํŠธ์™€ ํ†ต์‹ ํ•  ํฌํŠธ๋ฅผ ์ง€์ •์‹œ ports ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ๋‹ค์Œ์˜ ํ˜•์‹์œผ๋กœ ์ž…๋ ฅ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • <์ปจํ…Œ์ด๋„ˆ ํฌํŠธ>
  • <ํ˜ธ์ŠคํŠธ ํฌํŠธ>:<์ปจํ…Œ์ด๋„ˆ ํฌํŠธ>
  • <ํ˜ธ์ŠคํŠธ ํฌํŠธ>:<์ปจํ…Œ์ด๋„ˆ ํฌํŠธ>/<ํ”„๋กœํ† ์ฝœ>
# ์ปจํ…Œ์ด๋„ˆ ํฌํŠธ๋งŒ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ
mysql:
  image: mysql:5.7
  ports:
    - 3306
# ํ˜ธ์ŠคํŠธ ํฌํŠธ์™€ ์ปจํ…Œ์ด๋„ˆ ํฌํŠธ๋ฅผ ๋‘˜ ๋‹ค ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ
mysql:
  image: mysql:5.7
  ports:
    - 3333:3306
ํ˜ธ์ŠคํŠธ ํฌํŠธ๋ฅผ ์ƒ๋žตํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ ํฌํŠธ๋งŒ ์ง€์ •ํ•˜๋ฉด ํ˜ธ์ŠคํŠธ ํฌํŠธ๋Š” ๋žœ๋ค์œผ๋กœ ์ง€์ •๋˜๋ฉฐ, ํ”„๋กœํ† ์ฝœ์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ์œผ๋กœ tcp ํ†ต์‹ ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
# ํ˜ธ์ŠคํŠธ ํฌํŠธ์™€ ์ปจํ…Œ์ด๋„ˆ ํฌํŠธ๋ฅผ ๋‘˜ ๋‹ค ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ
$ docker-compose ps
Name      Command                            State       Ports
-------------------------------------------------------------------------------------
mysql_1   docker-entrypoint.sh mysqld     Up         0.0.0.0:3333->3306/tcp

# ์ปจํ…Œ์ด๋„ˆ ํฌํŠธ๋งŒ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ
$ docker-compose ps
Name      Command                           State       Ports
-------------------------------------------------------------------------------------
mysql_1   docker-entrypoint.sh mysqld    Up         0.0.0.0:32769->3306/tcp
 

expose

ํ˜ธ์ŠคํŠธ์—๋Š” ๋…ธ์ถœํ•˜์ง€ ์•Š๊ณ  ์—ฐ๊ฒฐ๋œ ์„œ๋น„์Šค๋ผ๋ฆฌ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ํฌํŠธ๋ฅผ ์ž…๋ ฅ์‹œ expose ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ด๋Š” dockerfile ์˜ EXPOSE ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
์ด ํฌํŠธ๋Š” ํ˜ธ์ŠคํŠธ์—์„œ ์ ‘๊ทผ ํ•  ์ˆ˜ ์—†๊ณ  docker-compose up ์‹œ ์—ฐ๊ฒฐํ•  ํฌํŠธ๋ฅผ ์ง€์ •ํ•œ๋‹ค.
mysql:
  image: mysql:5.7 
  expose:
    - 3306/tcp
์•„๋ž˜์™€ ๊ฐ™์ด host ์ชฝ๊ณผ ์—ฐ๊ฒฐ ์ •๋ณด๊ฐ€ ์—†๋‹ค.
$ docker-compose ps

  Name      Command                               State              Ports
  -------------------------------------------------------------------------------------
  mysql_1    docker-entrypoint.sh mysqld       Up                3306/tcp
 

dns

์ปจํ…Œ์ด๋„ˆ์—์„œ ์‚ฌ์šฉํ•  DNS ์„œ๋ฒ„๋ฅผ ์„ค์ •ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ dns ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
dns:
  - 8.8.8.8
  - 9.9.9.9
 

dns-search

์ปจํ…Œ์ด๋„ˆ์—์„œ ์‚ฌ์šฉํ•  DNS ๊ฒ€์ƒ‰ ๋„๋ฉ”์ธ์„ ์„ค์ •ํ•˜๋Š” ๊ฒฝ์šฐ dns-search ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
dns_search:
  - dc1.example.com
  - dc2.example.com

 

network-mode

์ปจํ…Œ์ด๋„ˆ์˜ ๋„คํŠธ์›Œํฌ ๋ชจ๋“œ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒฝ์šฐ network-mode ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
# Docker ๋„คํŠธ์›Œํฌ ๋ธŒ๋ฆฌ์ง€์— ์ƒˆ ๋„คํŠธ์›Œํฌ๋ฅผ ์ƒ์„ฑ
network_mode: "bridge"

# ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ํ˜ธ์ŠคํŠธ์˜ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ
network_mode: "host"

# ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉ์•ˆํ•จ
network_mode: "none"

# ๋‹ค๋ฅธ ์„œ๋น„์Šค์˜ ๋„คํŠธ์›Œํฌ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉ
network_mode: "service:[service name]"

# ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ์˜ ๋„คํŠธ์›Œํฌ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉ
network_mode: "container:[container name/id]"

networks 

๋„คํŠธ์›Œํฌ๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์ƒ์œ„ ํ‚ค, ์ดํ•˜ ์˜ต์…˜ ํ‚ค๋“ค์„ ์กฐํ•ฉํ•˜์—ฌ ๋„คํŠธ์›Œํฌ๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค.

driver

bridge / overlay / host / none ์ธ ๊ฒฝ์šฐ๋ฅผ ์ง€์ •ํ•˜๋Š”๋ฐ host ๋‚˜ none ์ธ ๊ฒฝ์šฐ๋Š” network_mode ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด ๋” ํŽธํ•ฉ๋‹ˆ๋‹ค.
version: "3.3"
services:
  wordpress:
    image: wordpress
    ports:
      - "8080:80"
    networks:
      mynet1:
        driver: overlay

networks:
  mynet1:
์ด์™ธ ์˜ต์…˜๋“ค์ด ๋งŽ์ด ์žˆ์œผ๋ฉฐ, ํ•˜๋‹จ์˜ ํŽ˜์ด์ง€์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • https://docs.docker.com/compose/compose-file/#network-configuration-reference
 

healthcheck

์„œ๋น„์Šค์˜ ์ƒํƒœ๋ฅผ ์ฒดํฌํ•˜๋ ค๋Š” ๊ฒฝ์šฐ healthcheck ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
# ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘ํ•˜๊ณ  40์ดˆ ํ›„๋ถ€ํ„ฐ 1๋ถ„ 30 ์ดˆ๋งˆ๋‹ค ์›น ์„œ๋ฒ„๊ฐ€ 10์ดˆ ์ด๋‚ด์— 
# ๊ธฐ๋ณธ ํŽ˜์ด์ง€๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ™•์ธ
# ์‹คํŒจ์‹œ 3๋ฒˆ ์žฌ์‹œ๋„ ํ•จ
#
healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost"]
  interval: 1m30s
  timeout: 10s
  retries: 3
  start_period: 40s

 

secrets

v3.1 ์ด์ƒ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์„œ๋น„์Šค์— ์•”ํ˜ธํ™”๊ฐ€ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์œผ๋ ค๋Š” ๊ฒฝ์šฐ secrets ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
# psql_user, psql_password ๋ฅผ ์•”ํ˜ธํ™” 
# ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ environment ์—์„œ ์‚ฌ์šฉํ•จ
#
version: "3.1"

services:
  psql:
    image: postgres
    secrets:
      - psql_user
      - psql_password
    environment:
      POSTGRES_PASSWORD_FILE: /run/secrets/psql_password
      POSTGRES_USER_FILE: /run/secrets/psql_user

secrets:
  psql_user:
    file: ./psql_user.txt
  psql_password:
    file: ./psql_password.txt
์‚ฌ์‹ค ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋ณด๋‹ค๋Š” secret ์— ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์€ ๋ฐ”๋กœ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  secret ์˜ค๋ธŒ์ ํŠธ๋ฅผ CLI ์—์„œ ๋งŒ๋“ค๋ฉด ๋ฉ๋‹ˆ๋‹ค.
# psql_user, psql_password ๋ฅผ ์•”ํ˜ธํ™” 
# ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ environment ์—์„œ ์‚ฌ์šฉํ•จ
#
version: "3.1"

services:
  psql:
    image: postgres
    secrets:
      - psql_user
      - psql_password
    environment:
      POSTGRES_PASSWORD_FILE: /run/secrets/psql_password
      POSTGRES_USER_FILE: /run/secrets/psql_user

secrets:
  psql_user:
    external: true
  psql_password:
    external: true
# echo "<string>" | docker secret create psql_user - <value>

$ echo "aaafba" | docker secret create psql-password -
#asdoaiuer34543490$#apdf

$ echo "aaafba" | docker secret create psql-user - 
wer$%$#%&fgsfgsdf456ghj

 

2.4 docker compose ์ž‘์„ฑํ•˜๊ธฐ: Exercise

 

docker run ์œผ๋กœ ์‹œ์ž‘ํ•ด์„œ ์„œ๋น„์Šค๋ฅผ ๊ตฌ๋™ํ•ด๋ณด๊ณ  ์ด๋ฅผ docker-compose.yaml ์— ๊ธฐ์ˆ ํ•˜์—ฌ ๋ฉ€ํ‹ฐ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ตฌ๋™ํ•˜๋Š” ์—ฐ์Šต์„ ํ•ด๋ด…์‹œ๋‹ค.
ํ•ด๋‹น App ์€ ์‚ฌ์šฉ์ž๊ฐ€ voting-app ์„ ํ†ตํ•ด ํˆฌํ‘œ๋ฅผ ํ•˜๋ฉด result-app ์„ ํ†ตํ•ด ํ†ตํ•ฉ ๊ฒฐ๊ณผ๋ฅผ ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๋Š” ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹จ์ˆœํžˆ ์ด ๊ตฌ์กฐ๋ฅผ ์—ฐ๊ฒฐ ๋งํฌ ๊ด€๊ณ„์—†์ด ์•„๋ž˜์™€ ๊ฐ™์ด ์ปจํ…Œ์ด๋„ˆ๋งŒ ๊ตฌ๋™ํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ๊ฐ„์€ 
$ docker run -d --name=redis redis
$ docker run -d --name=db
$ docker run -d --name vote -p 5000:80 voting-app
$ docker run -d --name=result -p 5001:80 result-app
$ docker run -d --name=worker worker
๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ์˜ ์กด์žฌ๋ฅผ ๋ชจ๋ฅด๋ฏ€๋กœ ์•„๋ž˜์˜ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.
 
๋”ฐ๋ผ์„œ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์— ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ํ™•์ธํ•ด ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
voting-app (python) ์›น ์„œ๋ฒ„ ์ฝ”๋“œ ์กฐ๊ฐ์„ ๋ณด๋ฉด ์›น ์„œ๋ฒ„๊ฐ€ ์‹œ์ž‘๋˜๋ฉด redis ๋ฅผ ์ฐพ๋Š”๋‹ค.
 
 
result-app (node-js) ์›น ์„œ๋ฒ„ ์ฝ”๋“œ ์กฐ๊ฐ์„ ๋ณด๋ฉด ์›น ์„œ๋ฒ„๊ฐ€ ์‹œ์ž‘๋˜๋ฉด db ๋ฅผ ์ฐพ๋Š”๋‹ค.
 
 
worker (.NET) ์›น ์„œ๋ฒ„ ์ฝ”๋“œ ์กฐ๊ฐ์„ ๋ณด๋ฉด ๋ฐฑ์—”๋“œ ํ”„๋กœ์„ธ์Šค๋Š” db ์™€ redis ๋ฅผ ๋ชจ๋‘ ํ™•์ธํ•œ๋‹ค.
 
์ฆ‰ ๊ฐ ๋งํฌ ๊ด€๊ณ„๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๋งํฌ๊ฐ€ ๋งบ์–ด์ง€๋ฏ€๋กœ
 
 
 docker run ๋ช…๋ น์— ์•„๋ž˜์™€ ๊ฐ™์ด --link ์˜ต์…˜์„ ๋” ์ฃผ์–ด์•ผ ํ•œ๋‹ค.
$ docker run -d --name=redis redis
$ docker run -d --name=db
$ docker run -d --name vote -p 5000:80  --link redis:redis voting-app
$ docker run -d --name=result -p 5001:80 --link db:db result-app
$ docker run -d --name=worker --link db:db --link redis:redis worker
๊ทธ๋ฆฌ๊ณ  voting-app ์— ์ ‘๊ทผํ•ด์„œ /etc/hosts ํŒŒ์ผ์„ ํ™•์ธํ•ด ๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ€๊ฒฝ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
 
์ด์ œ ์ด ๊ณผ์ •์„ docker-compose.yml ํŒŒ์ผ์— ๋…น์—ฌ๋ณด์ž.
๋จผ์ € ํ• ์ผ์€ docker-compose.yml ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์„ ๋„ฃ๋Š”๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๊ฐ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‚ฌ์šฉํ•œ ์ด๋ฏธ์ง€๋ฅผ ๋„ฃ๋Š”๋‹ค.
 
๊ทธ ๋‹ค์Œ ์‚ฌ์šฉํ•œ ํฌํŠธ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.
 
๋งˆ์ง€๋ง‰์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋งํฌ ์ •๋ณด๋ฅผ ๋„ฃ๋Š”๋‹ค.
 
์œ„์˜ ๊ฒฝ์šฐ docker compose v1 ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑํ•˜์˜€๋Š”๋ฐ
์—ฌ๊ธฐ์— ๋”ํ•ด ๋งŒ์•ฝ ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉ์ž ํŠธ๋ž˜ํ”ฝ์„ ๋ฐ›์„ front-end ์™€ ์•ฑ ํ†ต์‹ ์—์„œ ์‚ฌ์šฉํ•  back-end ๋กœ ๋‚˜๋ˆ„์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด ๋ณด์ž. 
 
   
 
์ด ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ€๊ฒฝํ•˜๋ฉด ๋œ๋‹ค.
 
๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ ๊ฐ„๋‹จํžˆ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌ๋™ํ•˜๋ฉด ๋œ๋‹ค.
docker-compose up

 

์ฐธ๊ณ 

  • 12. Docker Compose: https://kin3303.tistory.com/18
  • ๋„์ปค ์ปดํฌ์ฆˆ(Docker Compose): https://velog.io/@dong5854/%EB%8F%84%EC%BB%A4-%EC%BB%B4%ED%8F%AC%EC%A6%88Docker-Compose 
๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Study: DeveloperTools(DevTool) > DevTool: Container' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Docker] ๋„์ปค ๋„คํŠธ์›Œํฌ ์ •๋ฆฌ (feat. docker network)  (0) 2022.10.27
[Docker] Privileged Container์— ๋Œ€ํ•˜์—ฌ  (1) 2022.10.03
[Docker] docker-compose VS docker compose ์ฐจ์ด์  ๋น„๊ต  (0) 2022.09.07
[Docker] Docker Compose ์ปค๋งจ๋“œ ์‚ฌ์šฉ๋ฒ•  (0) 2022.09.06
[Docker] Dockerfile ์ •๋ฆฌ: Docker image๋ฅผ ์ƒ์„ฑํ•˜์ž (feat. Docker ์ปค๋ฉ˜๋“œ)  (0) 2022.09.04
    'Study: DeveloperTools(DevTool)/DevTool: Container' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [Docker] Privileged Container์— ๋Œ€ํ•˜์—ฌ
    • [Docker] docker-compose VS docker compose ์ฐจ์ด์  ๋น„๊ต
    • [Docker] Docker Compose ์ปค๋งจ๋“œ ์‚ฌ์šฉ๋ฒ•
    • [Docker] Dockerfile ์ •๋ฆฌ: Docker image๋ฅผ ์ƒ์„ฑํ•˜์ž (feat. Docker ์ปค๋ฉ˜๋“œ)
    DrawingProcess
    DrawingProcess
    ๊ณผ์ •์„ ๊ทธ๋ฆฌ์ž!

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”