[Docker] Docker network for communication among containers

2023. 4. 23. 16:57ยท๊ธฐํƒ€/Docker

 

๐ŸŽฏ Goals

  • Docker ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋„คํŠธ์›Œํฌ ๋ชจ๋“œ 4๊ฐ€์ง€๋ฅผ ์•Œ์•„๋ณธ๋‹ค.
  • host - container ๊ฐ„ ํ†ต์‹ ๊ณผ ์ฐจ์ด์ ์„ ์•ˆ๋‹ค.
  • container ๊ฐ„ ํ†ต์‹ ํ•˜๋Š” ๋ฒ•์„ ์•Œ์•„๋ณธ๋‹ค.

 

Docker Netowrk Mode 4

๋ชจ๋“œ๋ผ๊ณ  ํ–ˆ์ง€๋งŒ --network, --net ์˜ '์ด๋ฆ„'์ด๊ธฐ๋„ ํ•˜๋‹ค.
 

bridge (default)

๋ณ„๋„์˜ ๋„คํŠธ์›Œํฌ ์„ค์ •์ด ์—†๋Š”๊ฒฝ์šฐ ์ด ๊ฐ’์œผ๋กœ ์ง€์ •๋œ๋‹ค.
docker0 ์œผ๋กœ ๋„์ปค ์„ค์น˜์‹œ ๊ธฐ๋ณธ ๋‚ด์žฅ๋œ๋‹ค.
172.17.0.1 ์„ Gateway ๋กœ ๊ฐ–๊ณ ์žˆ๋‹ค.
์ด ๋ชจ๋“œ๋กœ ์ถ”๊ฐ€๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋Š” veth ๋กœ ์ปจํ…Œ์ด๋„ˆ ์™ธ๋ถ€์™€ (๋ณดํ†ต bridge์™€) ์—ฐ๊ฒฐ๋˜๊ณ , eth๋Š” ๋‚ด๋ถ€ Network Interface ๋ผ๊ณ  ๋ณด๋ฉด๋œ๋‹ค.
 

veth

Virtual Network Adapter๋กœ Virtual Ethernet ์˜ ์•ฝ์ž๋‹ค.
๊ฐ€์ƒ์˜ ์—ฌ๋Ÿฌ ๋žœ์นด๋“œ๋ฅผ ๊ฐ€์ง„ ๊ฒƒ๊ณผ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

L2 Layer ์ด๋”๋„ท ํ”„๋กœํ† ์ฝœ์„ ์ง€์›ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์†Œํ”„ํŠธ์›จ์–ด์ ์œผ๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค๊ณ  ๋ณด๋ฉด๋œ๋‹ค.
 
eth
Ethernet ์•ฝ์ž๋กœ ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ๋งํ•˜๋Š” Network Interface Card (NIC) ๋‹ค. eth0 eth1 ๋กœ ๋„ค์ด๋ฐํ•œ๋‹ค.
Layer2 ๋กœ ํ”„๋ ˆ์ž„ ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒํ•œ๋‹ค.
 

host

ํ˜ธ์ŠคํŠธ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ณต์œ ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

์ฆ‰, ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ˜ธ์ŠคํŠธ IP, Port ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

์˜ค๋กœ์ง€ Linux ์—์„œ๋งŒ ์ •์ƒ ์ž‘๋™ํ•œ๋‹ค.
Mac, Windows ์—์„œ๋Š” --network host ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์ œ์•ฝ์ด ์žˆ๋‹ค.

์•„๋ž˜ ํฌ์ŠคํŠธ๋ฅผ ์ฐธ์กฐํ•˜์‹œ๋ผ

 

Getting around Docker’s host network limitation on Mac

I usually use linux for my dev work. With the recent WFH situation, however, I didn’t have access to my remote linux machine temporarily…

medium.com

none

๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์—†๋Š” ์ƒํƒœ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

container

ํŠน์ • ์ปจํ…Œ์ด๋„ˆ์˜ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
๋ณ„๋„ IP/Mac ์ด ํ• ๋‹น๋˜์ง€ ์•Š๋Š”๋‹ค.
 
 

Host - Container ๊ฐ„ ํ†ต์‹ 

(1) 172.17.0.1

Docker biridge network ๊ฒŒ์ดํŠธ์›จ์ด ๋„๋ฉ”์ธ
Host <-> Container ์—ฐ๊ฒฐ์— ์œ ์šฉํ•˜๋‹ค.

 

(2)`host.docker.internal`

๊ฐœ๋ฐœ ๋ชฉ์ ์œผ๋กœ host ์— ์˜ํ•ด ์“ฐ์ธ๋‹ค.
Container -> Host ์š”์ฒญ์— ์œ ์šฉํ•˜๋‹ค.
 
์ž๋™์œผ๋กœ Host OS ์˜ 'localhost' IP ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜์‹œํ‚จ๋‹ค.
๋™์  IP ๋ฅผ ๊ฐ–๋Š” Host IP ์ฃผ์†Œ์— ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•œ Special DNS Domain ์ด๋‹ค.
ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—๋Š” ์“ฐ์ด์ง€ ์•Š๋Š”๋‹ค.
 

 

Container ๊ฐ„ ํ†ต์‹ 

 

์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„ ๊ทธ ์ž์ฒด๊ฐ€ ๋„๋ฉ”์ธ์ด ๋œ๋‹ค.

 
๋™์ผํ•œ Host ๋‚ด์— ์กด์žฌํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋Š” ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์„ ๋ช…์‹œํ•ด์„œ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
 
์ปจํ…Œ์ด๋„ˆ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•ด docker ์—์„œ๋Š” ๋„คํŠธ์›Œํฌ ์ƒ์„ฑ์„ ๊ถŒ์žฅํ•œ๋‹ค.

๋„คํŠธ์›Œํฌ ์ด๋ฆ„์„ ์ง€์ •ํ•˜์—ฌ ์ƒ์„ฑํ•ด๋ณด์ž.

 

 
์•„๋ž˜์™€ ๊ฐ™์ด ๋„คํŠธ์›Œํฌ๋ฅผ ์ƒ์„ฑํ•˜๊ณ 

$ docker network create node-mongo-network  
c198debcc15699d3aa2ec18c1988bccb141a5fe92fdc48e17880d5a3f0bbdb0b

 

๋„์ปค ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์‹œ --network ์˜ต์…˜์œผ๋กœ ์‹คํ–‰ํ•˜๋ฉด ํ•ด๋‹น ๋„คํŠธ์›Œํฌ ๋‚ด์—์„œ ์ปจํ…Œ์ด๋„ˆ์˜ ์ด๋ฆ„๋งŒ์œผ๋กœ IP์ฃผ์†Œ๊ฐ€ ๋ฐ”์ธ๋”ฉ๋œ๋‹ค.

app.listen(4000, async ()=>{
  console.log('express server is loaded')
  try {
    // container name ์ด IP ์ฃผ์†Œ ๋Œ€์‹  ์˜จ๋‹ค.
    await mongoose.connect('mongodb://mongodb:27017');
    console.log('mongoDB is connected')
  } catch (e) {
    console.error(e);
  }
});

mongodb ๋ผ๋Š” ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์˜ IP ๋ฅผ ๊ทธ๋Œ€๋กœ ๋”ฐ์˜จ๋‹ค.
 
 

๊ทธ๋ž˜์„œ ๋ณต์žกํ•˜๊ฒŒ ๋„คํŠธ์›Œํฌ ์ƒ์„ฑํ•˜๋ฉด ๋ญ๊ฐ€ ์ข‹์€๋ฐ์š”?

ํฌํŠธ ๋ฐ”์ธ๋”ฉ์ด ํ•„์š” ์—†์–ด์ง„๋‹ค.
์•„๋ž˜์™€ ๊ฐ™์ด -p ์˜ต์…˜์œผ๋กœ ๋กœ์ปฌํ˜ธ์ŠคํŠธ ๋˜๋Š” ์™ธ๋ถ€ ์ปจํ…Œ์ด๋„ˆ ํฌํŠธ์™€ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ํฌํŠธ๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค.
--network ๋กœ ๊ฐ™์€ ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด๋ง์ด๋‹ค.

$ docker run --it --name "container-name" -p <localhost-port>:<container-port> <image-name>

 

--network ๋ฅผ ํ†ตํ•ด ์ด๋กœ์จ ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๊ฐ„ ํ†ต์‹ ์ด ์šฉ์ดํ•œ Virtual Private Network ๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.
 

๊ทผ๋ฐ ์–ด๋–ป๊ฒŒ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„๋งŒ์œผ๋กœ ํ†ต์‹ ์ด๋˜์ฃ ?

์šฐ์„ , ๊ฐ™์€ ๋„คํŠธ์›Œํฌ๋ฅผ ์“ด๋‹ค๋Š”๊ฑด Container ๊ฐ€ ๋™์ผํ•œ VPC ๋‚ด์— ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
์‹ค์ œ, Private IP๋กœ ๋งคํ•‘๋˜๋Š” ์‹œ์ ์€ Container ์—์„œ HTTP Request ์š”์ฒญ์ด Container ๋ฐ”๊นฅ์œผ๋กœ ๋น ์ ธ๋‚˜๊ฐ€๋Š” ์‹œ์ ์ด๋‹ค.
๋„์ปค๋Š” ๊ฐ ์ปจํ…Œ์ด๋„ˆ์˜ ์‹คํ–‰ ํ™˜๊ฒฝ(๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ ์ •๋ณด)๋ฅผ ์•Œ๊ณ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์š”์ฒญ์ด ์ปจํ…Œ์ด๋„ˆ ๋ฐ–์œผ๋กœ ๋‚˜๊ฐ€๋Š” ์‹œ์ ์— IP ๋ฅผ ๋งคํ•‘ํ•˜์—ฌ ๋ณด๋‚ธ๋‹ค.
์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์„ ๊ฐ€์ง€๊ณ  ์‚ฌ์„ค IP ๋กœ ๋งคํ•‘์‹œํ‚ค๋Š” ์‹œ์ ์ด ์ด๋•Œ๋‹ค.
 
๋ฐ˜๋Œ€๋กœ ์ธํ„ฐ๋„ท ๋ธŒ๋ผ์šฐ์ €๋‚˜ ์™ธ๋ถ€์—์„œ ์˜ค๋Š” ์š”์ฒญ์€ docker ๊ฐ€ ์–ด์ฐŒ ๋งคํ•‘ํ•  ๋ฐฉ๋„๊ฐ€ ์—†๋‹ค.
 
 

์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์„ hostname ์œผ๋กœ ์“ฐ๋ ค๋ฉด 
user-defined network ๋ฅผ ์ƒ์„ฑ ๋ฐ ์ ์šฉํ•ด์•ผํ•œ๋‹ค.

 

์‹คํ—˜ ๋งํฌ

 

Failed to connect to mongodb · Issue #1 · milkcoke/docker-practice

mongoose.connect( 'mongodb://max:secret@goals-mongodb:27017/course-goals?authSource=admin', ) Already set mongodb -e FAILED TO CONNECT TO MONGODB 2023-04-25T22:59:36.462919176Z MongoError: Authenti...

github.com

default bridge network ๋Š” ์ž๋™์œผ๋กœ DNS ์„œ๋น„์Šค๊ฐ€ ์ œ๊ณต๋˜์ง€ ์•Š์•„ container name - hostname ์ด ๋งคํ•‘๋˜์ง€ ์•Š๋Š”๋‹ค.

์˜ค๋กœ์ง€ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ๋ช…์‹œํ•ด์„œ ๋งŒ๋“  ๋„คํŠธ์›Œํฌ์—๋งŒ  container name - hostname ์ด ๋งคํ•‘๋œ๋‹ค.

์ด๊ฒŒ ์‹ซ๋‹ค๋ฉด ๊ทธ๋ƒฅ docker-compose ๊ฐ™์€ ๊ฑธ ์“ฐ๋Š”๊ฒŒ ์ •์‹ ๊ฑด๊ฐ•์— ์ข‹๋‹ค.

 

๊ทธ๋Ÿผ, nginx + apache ๊ฐ™์€ ๊ฒฝ์šฐ์—”?

nginx.config ๋Š” ์–ด๋–ป๊ฒŒ ์ง€์ •ํ•ด์•ผํ• ๊นŒ?
container name ์„ ํ•ด๋‹น ํŒŒ์ผ ๋‚ด์— ์ •์˜ํ•ด๋„ ๊ดœ์ฐฎ์„๊นŒ?
๋ณดํ†ต docker-compose ๋กœ ๊ฐ™์ด ๋„์šฐ๊ณ , ์„œ๋น„์Šค๋ช…์œผ๋กœ ๋ช…์‹œํ•œ๋‹ค.

 

 

 

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๊ธฐํƒ€ > Docker' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Docker] Multi Stage  (0) 2024.09.20
[Docker] credential  (0) 2024.08.09
[Docker] Host to container network  (0) 2023.04.19
[Docker] volume with CLI  (0) 2022.05.19
[Docker] volume ์‚ฌ์šฉํŒ  (0) 2022.05.18
'๊ธฐํƒ€/Docker' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Docker] Multi Stage
  • [Docker] credential
  • [Docker] Host to container network
  • [Docker] volume with CLI
M_Falcon
M_Falcon
  • M_Falcon
    Falcon
    M_Falcon
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (432)
      • Web (16)
        • Nodejs (14)
        • Javascript (23)
        • FrontEnd (4)
      • DataBase (39)
        • Fundamental (1)
        • Redis (4)
        • PostgreSQL (10)
        • NoSQL (4)
        • MySQL (9)
        • MSSQL (3)
        • Error (4)
      • Algorithm (79)
        • Algorithm (๋ฌธ์ œํ’€์ด) (56)
        • Algorithm (์ด๋ก ) (23)
      • JVM (65)
        • Spring (13)
        • JPA (5)
        • Kotlin (13)
        • Java (24)
        • Error (7)
      • ๊ธฐํƒ€ (70)
        • Kafka (3)
        • Kubernetes (3)
        • Docker (13)
        • git (19)
        • ์žก๋™์‚ฌ๋‹ˆ (27)
      • ์žฌํ…Œํฌ (11)
        • ์„ธ๋ฌด (4)
        • ํˆฌ์ž (3)
        • ๋ณดํ—˜ (0)
      • BlockChain (2)
        • BitCoin (0)
      • C (32)
        • C (10)
        • C++ (17)
        • Error (3)
      • Low Level (8)
        • OS (3)
        • ์‹œ์Šคํ…œ ๋ณด์•ˆ (5)
      • ๋„คํŠธ์›Œํฌ (3)
      • LINUX (30)
        • Linux (26)
        • Error (4)
      • ์ €์ž‘๊ถŒ๊ณผ ์Šค๋งˆํŠธํฐ์˜ ์ดํ•ด (0)
      • ์ƒ๊ฐ ๋ญ‰์น˜ (6)
      • ๊ถ๊ธˆ์ฆ (2)
      • Private (4)
        • ์ด์ง ๊ฒฝํ—˜ (0)
        • ๊ฟˆ์„ ์ฐพ์•„์„œ (1)
      • Android (21)
        • OS (4)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • WEB
    • ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • DataBase
    • Linux
    • Mobile
    • C
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • github
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    Bitcoin
    docker
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    Git
    kafka
    JPA
    algorithm
    ubuntu
    C++
    ๋ฐฑ์ค€
    PostgreSQL
    Spring
    javascript
    android
    Kotlin
    database
    java
    linux
    Programmers
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
M_Falcon
[Docker] Docker network for communication among containers
์ƒ๋‹จ์œผ๋กœ

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