๊ด€๋ฆฌ ๋ฉ”๋‰ด

<Hello Hosung๐Ÿ˜Ž/>

[Docker] ๋„์ปค์˜ ๋„คํŠธ์›Œํฌ๋ž€? ๋ณธ๋ฌธ

๐Ÿณ Docker

[Docker] ๋„์ปค์˜ ๋„คํŠธ์›Œํฌ๋ž€?

์ขŒ์ถฉ์šฐ๋Œ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž ์ผ๊ธฐ๐Ÿง 2024. 11. 26. 17:34

 

Docker ๋„คํŠธ์›Œํฌ๋Š” Docker ์ปจํ…Œ์ด๋„ˆ ๊ฐ„, ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ์™€ ์™ธ๋ถ€ ์‹œ์Šคํ…œ ๊ฐ„์˜ ํ†ต์‹ ์„ ์„ค์ •ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” Docker์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•„์š”์— ๋”ฐ๋ผ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ฒฉ๋ฆฌํ•˜๊ฑฐ๋‚˜ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” Docker ๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•ด ์•Œ๊ธฐ ์‰ฝ๊ฒŒ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.


Docker ๋„คํŠธ์›Œํฌ๋ž€?

Docker๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋…๋ฆฝ์ ์ธ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ๋„คํŠธ์›Œํฌ๋Š” ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ณ , ์™ธ๋ถ€์™€ ์—ฐ๊ฒฐ๋˜๋Š” ํ†ต๋กœ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์˜ ํ†ต์‹ , ๋ณด์•ˆ ์„ค์ •, ๋‹ค๋ฅธ ์‹œ์Šคํ…œ๊ณผ์˜ ์—ฐ๊ฒฐ์„ ์†์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


Docker ๋„คํŠธ์›Œํฌ์˜ ์ฃผ์š” ๊ธฐ๋Šฅ

  1. ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ํ†ต์‹ 
    • ๊ฐ™์€ ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ๋œ ์ปจํ…Œ์ด๋„ˆ๋ผ๋ฆฌ๋Š” ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, ์›น ์„œ๋ฒ„ ์ปจํ…Œ์ด๋„ˆ์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋™์ผํ•œ ๋„คํŠธ์›Œํฌ์— ์žˆ์œผ๋ฉด ์›น ์„œ๋ฒ„๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์ปจํ…Œ์ด๋„ˆ์™€ ์™ธ๋ถ€ ํ†ต์‹ 
    • ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ(์˜ˆ: ์ธํ„ฐ๋„ท)์™€ ์—ฐ๊ฒฐํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์—…๋ฐ์ดํŠธ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ฑฐ๋‚˜, ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ๋ณด์•ˆ ์ œ๊ณต
    • ๋„คํŠธ์›Œํฌ๋ฅผ ๊ฒฉ๋ฆฌํ•˜๊ฑฐ๋‚˜ ๋ถ„๋ฆฌํ•˜์—ฌ ํŠน์ • ๋„คํŠธ์›Œํฌ์—์„œ๋งŒ ํ†ต์‹ ์„ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋Š” ์™ธ๋ถ€ ์ ‘๊ทผ์„ ์ฐจ๋‹จํ•˜๊ณ  ๋‚ด๋ถ€์—์„œ๋งŒ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ • ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  4. ํ™•์žฅ์„ฑ
    • ์—ฌ๋Ÿฌ ํ˜ธ์ŠคํŠธ์— ๊ฑธ์ณ ๋„คํŠธ์›Œํฌ๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์–ด, ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ๊ตฌ์„ฑ ์‹œ์—๋„ ํšจ์œจ์ ์œผ๋กœ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค.

Docker ๋„คํŠธ์›Œํฌ์˜ ์œ ํ˜•

Docker๋Š” ๋‹ค์–‘ํ•œ ๋„คํŠธ์›Œํฌ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ๊ฐ๊ฐ ๋‹ค๋ฅธ ๋ชฉ์ ๊ณผ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์ฃผ์š” ๋„คํŠธ์›Œํฌ ์œ ํ˜•์ž…๋‹ˆ๋‹ค:

1. Bridge ๋„คํŠธ์›Œํฌ (๊ธฐ๋ณธ ๋„คํŠธ์›Œํฌ)

  • ์„ค๋ช…: ๋‹จ์ผ ํ˜ธ์ŠคํŠธ ๋‚ด์—์„œ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ํ†ต์‹ ์„ ์ง€์›ํ•˜๋Š” ๋„คํŠธ์›Œํฌ.
  • ํŠน์ง•:
    • ๊ธฐ๋ณธ์ ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด bridge ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
    • ๋„คํŠธ์›Œํฌ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.
  • ์˜ˆ์‹œ:
docker run --name web-server --network bridge nginx

 

2. Host ๋„คํŠธ์›Œํฌ

  • ์„ค๋ช…: ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ˜ธ์ŠคํŠธ ๋จธ์‹ ์˜ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.
  • ํŠน์ง•:
    • ์ปจํ…Œ์ด๋„ˆ๋Š” ๋ณ„๋„์˜ IP๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๊ณ  ํ˜ธ์ŠคํŠธ์˜ IP๋ฅผ ์‚ฌ์šฉ.
    • ๋„คํŠธ์›Œํฌ ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•˜๊ฑฐ๋‚˜ ํฌํŠธ ์ถฉ๋Œ์„ ํ”ผํ•ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉ.
  • ์˜ˆ์‹œ:
docker run --network host nginx

3. Overlay ๋„คํŠธ์›Œํฌ

  • ์„ค๋ช…: ์—ฌ๋Ÿฌ ํ˜ธ์ŠคํŠธ ๊ฐ„์— ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋ถ„์‚ฐ ๋„คํŠธ์›Œํฌ.
  • ํŠน์ง•:
    • Docker Swarm์ด๋‚˜ Kubernetes์™€ ๊ฐ™์€ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋„๊ตฌ์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ.
    • ๋™์ผ ๋„คํŠธ์›Œํฌ์— ์†ํ•œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ˜ธ์ŠคํŠธ์— ์ƒ๊ด€์—†์ด ํ†ต์‹  ๊ฐ€๋Šฅ.
  • ์˜ˆ์‹œ:
docker network create -d overlay my-overlay-network

4. None ๋„คํŠธ์›Œํฌ

  • ์„ค๋ช…: ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋„คํŠธ์›Œํฌ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ์„ค์ •.
  • ํŠน์ง•:
    • ๋„คํŠธ์›Œํฌ ๊ฒฉ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๊ฑฐ๋‚˜, ๋„คํŠธ์›Œํฌ ์—†์ด ๋™์ž‘ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉ.
  • ์˜ˆ์‹œ:
docker run --network none nginx

5. Custom ๋„คํŠธ์›Œํฌ

  • ์„ค๋ช…: ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ •์˜ํ•œ ๋„คํŠธ์›Œํฌ.
  • ํŠน์ง•:
    • ๋„คํŠธ์›Œํฌ์˜ ์„œ๋ธŒ๋„ท, ๊ฒŒ์ดํŠธ์›จ์ด ๋“ฑ ์„ธ๋ถ€ ์„ค์ • ๊ฐ€๋Šฅ.
    • ์ปจํ…Œ์ด๋„ˆ๋ผ๋ฆฌ ์ด๋ฆ„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ†ต์‹ (DNS) ๊ฐ€๋Šฅ.
  • ์˜ˆ์‹œ:
docker network create my-custom-network
docker run --network my-custom-network --name app-container nginx

Docker ๋„คํŠธ์›Œํฌ ๋ช…๋ น์–ด ์‚ฌ์šฉ๋ฒ•

1. ๋„คํŠธ์›Œํฌ ํ™•์ธ

ํ˜„์žฌ Docker์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋„คํŠธ์›Œํฌ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

docker network ls

 

์ถœ๋ ฅ ์˜ˆ์‹œ:

NETWORK ID     NAME      DRIVER    SCOPE
d036b3cbe30a   bridge    bridge    local
5da38442164a   host      host      local
fdddb8422404   none      null      local

2. ๋„คํŠธ์›Œํฌ ์ƒ์„ฑ

์ƒˆ๋กœ์šด ๋„คํŠธ์›Œํฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

docker network create my-network

 

3. ์ปจํ…Œ์ด๋„ˆ ์—ฐ๊ฒฐ

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํŠน์ • ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

docker run --network my-network --name my-app nginx

 

4. ๊ธฐ์กด ์ปจํ…Œ์ด๋„ˆ ์—ฐ๊ฒฐ

์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ธฐ์กด ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

docker network connect my-network my-app

5. ๋„คํŠธ์›Œํฌ ์‚ญ์ œ

์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

docker network rm my-network

Docker ๋„คํŠธ์›Œํฌ ์‹ค์Šต ์˜ˆ์ œ

์˜ˆ์ œ 1: ๋‹จ์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ

์›น ์„œ๋ฒ„(Nginx)์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(MySQL)๋ฅผ ๊ฐ™์€ ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

# ๋„คํŠธ์›Œํฌ ์ƒ์„ฑ
docker network create app-network

# ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰
docker run --network app-network --name web-server nginx
docker run --network app-network --name db-server mysql

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด web-server์™€ db-server๊ฐ€ app-network ์•ˆ์—์„œ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 


์˜ˆ์ œ 2: ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ์ด๋ฆ„ ๊ธฐ๋ฐ˜ ํ†ต์‹ 

๊ฐ™์€ ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ๋œ ์ปจํ…Œ์ด๋„ˆ๋Š” DNS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฆ„์œผ๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ db-server๋กœ Ping ํ…Œ์ŠคํŠธ
docker exec -it web-server ping db-server

Docker ๋„คํŠธ์›Œํฌ์˜ ์žฅ์ 

  1. ์œ ์—ฐํ•œ ํ†ต์‹  ์„ค์ •: ๋‹จ์ผ ํ˜ธ์ŠคํŠธ๋ถ€ํ„ฐ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ๊นŒ์ง€ ๋‹ค์–‘ํ•œ ํ†ต์‹  ์„ค์ • ๊ฐ€๋Šฅ.
  2. ๋ณด์•ˆ ๊ฐ•ํ™”: ๋„คํŠธ์›Œํฌ๋ฅผ ๊ฒฉ๋ฆฌํ•˜๊ฑฐ๋‚˜ ์™ธ๋ถ€ ์ ‘๊ทผ์„ ์ œํ•œํ•˜์—ฌ ๋ณด์•ˆ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Œ.
  3. ํ™•์žฅ์„ฑ ์ œ๊ณต: ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ์™€ ํ˜ธ์ŠคํŠธ์— ๊ฑธ์นœ ๋ณต์žกํ•œ ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ.

 

๋งˆ๋ฌด๋ฆฌ

Docker ๋„คํŠธ์›Œํฌ๋Š” ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์—์„œ ํ†ต์‹ ๊ณผ ๋ณด์•ˆ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ์œ ํ˜•๊ณผ ์„ค์ • ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•˜๋ฉด, ๋” ์œ ์—ฐํ•˜๊ณ  ํšจ์œจ์ ์ธ ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.