Docker

Docker Network ๋™์ž‘: DB ์—ฐ๊ฒฐ์‹œ localhost ๋Œ€์‹  ์„œ๋น„์Šค ์ด๋ฆ„์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ 

9taetae9 2025. 4. 8. 13:45
728x90

spring.datasource.url=jdbc:mysql://my-db:3306/mydb
spring.datasource.username=root
spring.datasource.password=pwd123
spring.datasource.driver-class-name=cohttp://m.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update

 

DB ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด์—์„œ ํ”ํžˆ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํŒจํ„ด ์ค‘ ํ•˜๋‚˜๋Š” localhost:3306๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Docker ํ™˜๊ฒฝ์œผ๋กœ ์ „ํ™˜ํ•  ๋•Œ ์ด ํŒจํ„ด์€ ๊ธฐ๋Œ€์™€ ๊ฐ™์ด ๋™์ž‘ํ•˜์ง€ ์•Š์œผ๋ฉฐ, localhost ๋Œ€์‹  ํ•ด๋‹น ์„œ๋น„์Šค ์ด๋ฆ„์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ์ด ๊ธ€์—์„œ ๊ทธ ์ด์œ ๋ฅผ Docker์˜ ๋„คํŠธ์›Œํ‚น ์›๋ฆฌ๋ฅผ ํ†ตํ•ด ์•Œ์•„๋ณด๋ ค ํ•œ๋‹ค.

 

๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ์˜ ์—ฐ๊ฒฐ

๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ localhost๋Š” ์ž์‹ ์˜ ์ปดํ“จํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํŠน๋ณ„ํ•œ ํ˜ธ์ŠคํŠธ๋ช…์ด๋‹ค. ์ด๋Š” IP ์ฃผ์†Œ 127.0.0.1์— ๋งคํ•‘๋˜๋ฉฐ, ๋ฃจํ”„๋ฐฑ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋™์ž‘ํ•œ๋‹ค.

jdbc:mysql://localhost:3306/mysql

jdbc:mysql://127.0.0.1:3306/mysql

์œ„ ๋‘ ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด์€ ๊ธฐ๋Šฅ์ ์œผ๋กœ ๋™์ผํ•˜๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์œผ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค.

  1. OS์˜ ํ˜ธ์ŠคํŠธ ํŒŒ์ผ(/etc/hosts) ๋˜๋Š” DNS ๋ฆฌ์กธ๋ฒ„๊ฐ€ localhost๋ฅผ 127.0.0.1๋กœ ํ•ด์„
  2. ๋ฃจํ”„๋ฐฑ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋กœ์ปฌ ์ปดํ“จํ„ฐ ๋‚ด์—์„œ ํŒจํ‚ท ์ „์†ก
  3. ๋„คํŠธ์›Œํฌ ์นด๋“œ(NIC)๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ๋‚ด๋ถ€์ ์œผ๋กœ ์ง์ ‘ ํ†ต์‹ 
  4. MySQL ์„œ๋ฒ„๊ฐ€ 3306 ํฌํŠธ์—์„œ ๋Œ€๊ธฐ ์ค‘์ด๋ฉด ์—ฐ๊ฒฐ ์„ฑ๊ณต

MySQL ์„œ๋ฒ„๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ˜ธ์ŠคํŠธ ๊ธฐ๋ฐ˜ ์ ‘๊ทผ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š”๋ฐ, root ์‚ฌ์šฉ์ž๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ localhost์—์„œ๋งŒ ์ ‘์†์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค์ •๋œ๋‹ค. ์ด๋กœ ์ธํ•ด ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” localhost ๋˜๋Š” 127.0.0.1์„ ํ†ตํ•œ ์ ‘์†์€ ํ—ˆ์šฉ๋˜์ง€๋งŒ, ๋‹ค๋ฅธ IP ์ฃผ์†Œ๋ฅผ ํ†ตํ•œ ์ ‘์†์€ ๋ณ„๋„์˜ ๊ถŒํ•œ ์„ค์ • ์—†์ด๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

 

Docker ํ™˜๊ฒฝ์˜ ๋„คํŠธ์›Œํฌ ๊ตฌ์กฐ

Docker๋Š” ๋ฆฌ๋ˆ…์Šค ์ปค๋„์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค(namespace) ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•ด ๊ฐ ์ปจํ…Œ์ด๋„ˆ์— ๋…๋ฆฝ์ ์ธ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•œ๋‹ค. ์ด ๋•Œ๋ฌธ์— ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ๋‹ค๋ฅธ ์„ค์ •์ด ํ•„์š”ํ•ด์ง„๋‹ค.

1. ์ปจํ…Œ์ด๋„ˆ ๊ฒฉ๋ฆฌ์™€ ๋„คํŠธ์›Œํฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค

Docker๋Š” ๋ฆฌ๋ˆ…์Šค ์ปค๋„์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค(namespace)๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ ์ปจํ…Œ์ด๋„ˆ์— ๋…๋ฆฝ์ ์ธ ๋„คํŠธ์›Œํฌ ์Šคํƒ์„ ์ œ๊ณตํ•œ๋‹ค.

  • ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋Š” ์ž์ฒด ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค, ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”, IP ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง„๋‹ค.
  • ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ localhost๋Š” ํ•ญ์ƒ ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ ์ž์‹ ๋งŒ์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
  • ์ฆ‰, ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ๋‚˜ ํ˜ธ์ŠคํŠธ ๋จธ์‹ ์„ ๊ฐ€๋ฆฌํ‚ค์ง€ ์•Š๋Š”๋‹ค.

๋•Œ๋ฌธ์— Docker ํ™˜๊ฒฝ์—์„œ localhost:3306์œผ๋กœ MySQL์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ์ด๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…Œ์ด๋„ˆ์—์„œ ํ•ด๋‹น ์ฃผ์†Œ๋กœ ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•˜๋ฉด, ์‹ค์ œ๋กœ๋Š” ์ž๊ธฐ ์ž์‹ ์˜ 3306 ํฌํŠธ์— ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ์˜ ์˜๋„๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ 3306 ํฌํŠธ๊ฐ€ ์•„๋‹Œ MySQL ์ปจํ…Œ์ด๋„ˆ ๋‚ด 3306 ํฌํŠธ๋กœ์˜ ์—ฐ๊ฒฐ์ด๋‹ค.  ๋”ฐ๋ผ์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ MySQL์—ฐ๊ฒฐ์— ์‹คํŒจํ•˜๊ฒŒ ๋œ๋‹ค. 

 

2. Docker์˜ ๋‚ด์žฅ DNS ํ•ด์„ ์‹œ์Šคํ…œ

Docker๋Š” ๋‚ด์žฅ DNS ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„๊ณผ ์„œ๋น„์Šค ์ด๋ฆ„์„ IP ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…Œ์ด๋„ˆ → "my-db" ์š”์ฒญ → Docker DNS → my-db ์ปจํ…Œ์ด๋„ˆ์˜ IP(ex: 172.18.0.3)

 

  • ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๋Š” Docker DNS ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก /etc/resolv.conf๊ฐ€ ์ž๋™ ๊ตฌ์„ฑ๋œ๋‹ค.
  • ๋‚ด์žฅ DNS๋Š” ์„œ๋น„์Šค ์ด๋ฆ„์„ ์ปจํ…Œ์ด๋„ˆ IP๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ์œ ์ง€ํ•œ๋‹ค.
  • IP ์ฃผ์†Œ๊ฐ€ ๋ฐ”๋€Œ์–ด๋„(ex: ์ปจํ…Œ์ด๋„ˆ ์žฌ์‹œ์ž‘) DNS ํ•ด์„์€ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ๋œ๋‹ค.

3. Docker Compose์˜ ์ž๋™ ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ

Docker Compose๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋ชจ๋“  ์„œ๋น„์Šค๋ฅผ ์œ„ํ•œ ๊ธฐ๋ณธ ๋ธŒ๋ฆฟ์ง€ ๋„คํŠธ์›Œํฌ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

  • ๊ฐ ์ปจํ…Œ์ด๋„ˆ์— ๋‚ด๋ถ€ IP ์ฃผ์†Œ๊ฐ€ ํ• ๋‹น๋œ๋‹ค.
  • ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๋Š” ์ด ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ๋˜์–ด ์„œ๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Docker Compose๋Š” ๋‚ด์žฅ DNS ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ ์„œ๋น„์Šค ์ด๋ฆ„์„ ์ปจํ…Œ์ด๋„ˆ IP ์ฃผ์†Œ๋กœ ์ž๋™ ํ•ด์„ํ•œ๋‹ค.

์‹ค์ œ ์ž‘๋™ ๋ฐฉ์‹ ์˜ˆ์‹œ

Docker Compose ํ™˜๊ฒฝ์—์„œ์˜ ์„ค์ •์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์ด ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด์ž.

์„œ๋น„์Šค ์ด๋ฆ„(my-db)์„ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ

  1. my-server ์ปจํ…Œ์ด๋„ˆ๊ฐ€ my-db:3306์— ์—ฐ๊ฒฐ ์‹œ๋„
  2. Docker์˜ ๋‚ด์žฅ DNS๊ฐ€ my-db๋ฅผ ์‹ค์ œ IP ์ฃผ์†Œ(ex: 172.18.0.3)๋กœ ๋ณ€ํ™˜
  3. ์—ฐ๊ฒฐ์ด 172.18.0.3:3306์œผ๋กœ ๋ผ์šฐํŒ… ๋จ
  4. ์ด ์ฃผ์†Œ๋Š” MySQL ์ปจํ…Œ์ด๋„ˆ์˜ ์‹ค์ œ IP์™€ ํฌํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ด

localhost๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ - ์‹คํŒจ

  • ์—ฐ๊ฒฐ์ด 127.0.0.1:3306(์ž๊ธฐ ์ž์‹ )์œผ๋กœ ์‹œ๋„๋จ
  • my-server ์ปจํ…Œ์ด๋„ˆ์—๋Š” MySQL์ด ์‹คํ–‰๋˜๊ณ  ์žˆ์ง€ ์•Š์œผ๋ฏ€๋กœ ์—ฐ๊ฒฐ ์‹คํŒจ

 

์ •๋ฆฌ

Docker ํ™˜๊ฒฝ์—์„œ MySQL๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•  ๋•Œ๋Š” localhost ๋Œ€์‹  ์„œ๋น„์Šค ์ด๋ฆ„์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ์ด๋Š” Docker์˜ ๋„คํŠธ์›Œํฌ ๊ฒฉ๋ฆฌ์™€ ๋‚ด์žฅ DNS ์‹œ์Šคํ…œ ๋•Œ๋ฌธ์ด๋‹ค. ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋Š” ๋…๋ฆฝ๋œ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์„ ๊ฐ€์ง€๋ฉฐ, localhost๋Š” ํ•ญ์ƒ ์ปจํ…Œ์ด๋„ˆ ์ž์‹ ์„ ๊ฐ€๋ฆฌํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ์„œ๋น„์Šค ์ด๋ฆ„์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

728x90