A A
[Docker] Docker Network: 도컀 λ„€νŠΈμ›Œν¬

이번 ν¬μŠ€νŠΈμ—μ„œλŠ” Docker λ„€νŠΈμ›Œν¬μ— λŒ€ν•΄ 심도 있게 λ‹€λ£¨μ–΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

 

Docker λ„€νŠΈμ›Œν¬λŠ” μ»¨ν…Œμ΄λ„ˆ κ°„μ˜ 톡신을 κ°€λŠ₯ν•˜κ²Œ ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μœ μ—°μ„±κ³Ό ν™•μž₯성을 크게 ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€.

이 κΈ€μ—μ„œλŠ” Docker λ„€νŠΈμ›Œν¬μ˜ κΈ°λ³Έ κ°œλ…λΆ€ν„° μ‹€μŠ΅ μ˜ˆμ œκΉŒμ§€ μžμ„Ένžˆ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.


Docker λ„€νŠΈμ›Œν¬λž€?

Docker λ„€νŠΈμ›Œν¬λŠ” μ»¨ν…Œμ΄λ„ˆ κ°„μ˜ 톡신을 κ°€λŠ₯ν•˜κ²Œ ν•˜λŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€. DockerλŠ” 기본적으둜 λͺ‡ 가지 ν‘œμ€€ λ„€νŠΈμ›Œν¬ λ“œλΌμ΄λ²„λ₯Ό μ œκ³΅ν•˜λ©°, 이λ₯Ό 톡해 μ»¨ν…Œμ΄λ„ˆλ“€μ΄ μ„œλ‘œ λ˜λŠ” ν˜ΈμŠ€νŠΈμ™€ 톡신할 수 μžˆλ„λ‘ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

Docker λ„€νŠΈμ›Œν¬λ₯Ό ν™œμš©ν•˜λ©΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ ꡬ성 μš”μ†Œλ“€μ„ μœ μ—°ν•˜κ²Œ μ—°κ²°ν•˜κ³  관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ™œ Docker λ„€νŠΈμ›Œν¬λ₯Ό μ‚¬μš©ν•΄μ•Ό ν• κΉŒμš”?

  • 격리: μ„œλ‘œ λ‹€λ₯Έ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ³„λ„μ˜ λ„€νŠΈμ›Œν¬λ‘œ κ²©λ¦¬ν•˜μ—¬ λ³΄μ•ˆμ„ κ°•ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μœ μ—°μ„±: μ»¨ν…Œμ΄λ„ˆλ₯Ό λ‹€μ–‘ν•œ λ„€νŠΈμ›Œν¬μ— μ‰½κ²Œ μ—°κ²°ν•˜κ±°λ‚˜ 뢄리할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • ν™•μž₯μ„±: μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 규λͺ¨κ°€ 컀지더라도 λ„€νŠΈμ›Œν¬ 섀정을 톡해 μ†μ‰½κ²Œ ν™•μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Docker λ„€νŠΈμ›Œν¬ λ“œλΌμ΄λ²„

DockerλŠ” μ—¬λŸ¬ λ„€νŠΈμ›Œν¬ λ“œλΌμ΄λ²„λ₯Ό μ œκ³΅ν•˜λ©°, 각각의 λ“œλΌμ΄λ²„λŠ” νŠΉμ •ν•œ λ„€νŠΈμ›Œν‚Ή μš”κ΅¬μ‚¬ν•­μ„ μΆ©μ‘±μ‹œν‚΅λ‹ˆλ‹€.
μ£Όμš” λ“œλΌμ΄λ²„λŠ” Bridge, Host, None이며, 이 외에도 μ‚¬μš©μž μ •μ˜ λ„€νŠΈμ›Œν¬ λ“œλΌμ΄λ²„λ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

Bridge

Bridge λ„€νŠΈμ›Œν¬λŠ” Docker의 κΈ°λ³Έ λ„€νŠΈμ›Œν¬ λ“œλΌμ΄λ²„λ‘œ, λ™μΌν•œ 호슀트 λ‚΄μ—μ„œ μ—¬λŸ¬ μ»¨ν…Œμ΄λ„ˆκ°€ μ„œλ‘œ 톡신할 수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.
기본적으둜 μƒμ„±λ˜λŠ” bridge λ„€νŠΈμ›Œν¬κ°€ 이에 ν•΄λ‹Ήν•©λ‹ˆλ‹€.
  • νŠΉμ§•:
    • 각 μ»¨ν…Œμ΄λ„ˆλŠ” 고유의 IP μ£Όμ†Œλ₯Ό ν• λ‹Ήλ°›μŠ΅λ‹ˆλ‹€.
    • μ»¨ν…Œμ΄λ„ˆ 이름을 톡해 μƒν˜Έ 톡신할 수 μžˆμŠ΅λ‹ˆλ‹€.
    • 격리된 λ„€νŠΈμ›Œν¬ ν™˜κ²½μ„ μ œκ³΅ν•©λ‹ˆλ‹€.

Host

Host λ„€νŠΈμ›Œν¬λŠ” μ»¨ν…Œμ΄λ„ˆκ°€ ν˜ΈμŠ€νŠΈμ™€ λ™μΌν•œ λ„€νŠΈμ›Œν¬ μŠ€νƒμ„ κ³΅μœ ν•˜λ„λ‘ ν•©λ‹ˆλ‹€.
즉, μ»¨ν…Œμ΄λ„ˆλŠ” 호슀트의 λ„€νŠΈμ›Œν¬ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 직접 μ‚¬μš©ν•©λ‹ˆλ‹€.
  • νŠΉμ§•:
    • λ„€νŠΈμ›Œν¬ μ„±λŠ₯이 ν–₯상될 수 μžˆμŠ΅λ‹ˆλ‹€.
    • 포트 맀핑이 ν•„μš” μ—†μŠ΅λ‹ˆλ‹€.
    • μ»¨ν…Œμ΄λ„ˆμ™€ 호슀트 κ°„μ˜ μ™„μ „ν•œ λ„€νŠΈμ›Œν¬ 곡유.

None

None λ„€νŠΈμ›Œν¬λŠ” μ»¨ν…Œμ΄λ„ˆμ— λ„€νŠΈμ›Œν¬ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
λ„€νŠΈμ›Œν¬ 연결이 μ „ν˜€ μ—†λŠ” 격리된 ν™˜κ²½μ„ 원할 λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.
  • νŠΉμ§•:
    • λ„€νŠΈμ›Œν¬ 격리.
    • μ»¨ν…Œμ΄λ„ˆ κ°„ 톡신 λΆˆκ°€.
    • λ³΄μ•ˆ 강화에 유용.

Docker λ„€νŠΈμ›Œν¬ 관리

Docker λ„€νŠΈμ›Œν¬λ₯Ό 생성, μ‚­μ œ, λͺ©λ‘ 확인 λ“± κ΄€λ¦¬ν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

λ„€νŠΈμ›Œν¬ λͺ©λ‘ ν™•μΈν•˜κΈ°

ν˜„μž¬ Docker에 μƒμ„±λœ λͺ¨λ“  λ„€νŠΈμ›Œν¬λ₯Ό ν™•μΈν•˜λ €λ©΄ docker network ls λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
docker network ls

μ˜ˆμ‹œ 좜λ ₯

NETWORK ID     NAME      DRIVER    SCOPE
ad3b106567c1   bridge    bridge    local
2977184da9cf   host      host      local
667542d81661   none      null      local
  • bridge: κΈ°λ³Έ λΈŒλ¦¬μ§€ λ„€νŠΈμ›Œν¬.
  • host: 호슀트 λ„€νŠΈμ›Œν¬.
  • none: λ„€νŠΈμ›Œν¬κ°€ μ—†λŠ” μ»¨ν…Œμ΄λ„ˆλ₯Ό μœ„ν•œ λ„€νŠΈμ›Œν¬.

λ„€νŠΈμ›Œν¬ μƒμ„±ν•˜κΈ°

μ‚¬μš©μž μ •μ˜ λ„€νŠΈμ›Œν¬λ₯Ό μƒμ„±ν•˜λ €λ©΄ docker network create λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. κΈ°λ³Έ λ“œλΌμ΄λ²„λŠ” bridgeμž…λ‹ˆλ‹€.
docker network create my-first-network

μ‹€ν–‰ κ²°κ³Ό

8b6061ee68673cde9ee5ff37695c85a7f71f052e61bbc8b6457888023c831f11

μƒμ„±λœ λ„€νŠΈμ›Œν¬λ₯Ό ν™•μΈν•˜λ €λ©΄ λ‹€μ‹œ docker network lsλ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.

docker network ls

μ˜ˆμ‹œ 좜λ ₯

NETWORK ID     NAME               DRIVER    SCOPE
ad3b106567c1   bridge             bridge    local
2977184da9cf   host               host      local
8b6061ee6867   my-first-network   bridge    local
667542d81661   none               null      local

λ„€νŠΈμ›Œν¬ μ‚­μ œν•˜κΈ°

μ‚¬μš©μž μ •μ˜ λ„€νŠΈμ›Œν¬λŠ” docker network rm λͺ…λ Ήμ–΄λ‘œ μ‚­μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€.
단, κΈ°λ³Έ μ œκ³΅λ˜λŠ” λ„€νŠΈμ›Œν¬ (bridge, host, none)λŠ” μ‚­μ œν•  수 μ—†μŠ΅λ‹ˆλ‹€.
docker network rm my-first-network

μ‹€ν–‰ κ²°κ³Ό

my-first-network

μ‚­μ œλœ λ„€νŠΈμ›Œν¬λ₯Ό ν™•μΈν•˜λ €λ©΄ λ‹€μ‹œ docker network lsλ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.

docker network ls

μ˜ˆμ‹œ 좜λ ₯

NETWORK ID     NAME      DRIVER    SCOPE
ad3b106567c1   bridge    bridge    local
2977184da9cf   host      host      local
667542d81661   none      null      local

μ£Όμ˜μ‚¬ν•­: κΈ°λ³Έ μ œκ³΅λ˜λŠ” λ„€νŠΈμ›Œν¬λŠ” μ‚­μ œν•  수 μ—†μœΌλ©°, μ‚­μ œ μ‹œ μ—λŸ¬κ°€ λ°œμƒν•©λ‹ˆλ‹€.

docker network rm bridge

μ‹€ν–‰ κ²°κ³Ό

Error response from daemon: bridge is a pre-defined network and cannot be removed

μ»¨ν…Œμ΄λ„ˆμ— λ„€νŠΈμ›Œν¬ μ—°κ²°ν•˜κΈ°

μ»¨ν…Œμ΄λ„ˆλ₯Ό 생성할 λ•Œ λ„€νŠΈμ›Œν¬λ₯Ό μ§€μ •ν•˜κ±°λ‚˜, μ‹€ν–‰ 쀑인 μ»¨ν…Œμ΄λ„ˆμ— λ„€νŠΈμ›Œν¬λ₯Ό μ—°κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ„€νŠΈμ›Œν¬ μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ—¬ μ»¨ν…Œμ΄λ„ˆ μ‹€ν–‰ν•˜κΈ°

μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•  λ•Œ --network μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ—¬ νŠΉμ • λ„€νŠΈμ›Œν¬μ— μ—°κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
docker container run \
  --name mbti \
  -e PORT=3000 \
  --rm \
  -d \
  --network mbti-network \
  daehyunbigbread/mbti:embedded-db

λͺ…λ Ήμ–΄ μ„€λͺ…

  • --name mbti: μ»¨ν…Œμ΄λ„ˆ 이름을 mbti둜 지정.
  • -e PORT=3000: PORT ν™˜κ²½ λ³€μˆ˜λ₯Ό 3000으둜 μ„€μ •.
  • --rm: μ»¨ν…Œμ΄λ„ˆκ°€ μ’…λ£Œλ˜λ©΄ μžλ™μœΌλ‘œ μ‚­μ œ.
  • -d: μ»¨ν…Œμ΄λ„ˆλ₯Ό λ°±κ·ΈλΌμš΄λ“œμ—μ„œ μ‹€ν–‰.
  • --network mbti-network: mbti-network λ„€νŠΈμ›Œν¬μ— μ—°κ²°.
  • daehyunbigbread/mbti:embedded-db: μ‹€ν–‰ν•  Docker 이미지.

κΈ°μ‘΄ μ»¨ν…Œμ΄λ„ˆμ— λ„€νŠΈμ›Œν¬ μ—°κ²°ν•˜κΈ°

μ»¨ν…Œμ΄λ„ˆ μ‹€ν–‰ μ‹œ λ„€νŠΈμ›Œν¬ μ˜΅μ…˜μ„ μ§€μ •ν•˜μ§€ μ•Šμ•˜λ‹€λ©΄, λ‚˜μ€‘μ— docker network connect λͺ…λ Ήμ–΄λ‘œ λ„€νŠΈμ›Œν¬μ— μ—°κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

docker network connect mbti-network mbti

λͺ…λ Ήμ–΄ μ„€λͺ…

  • mbti-network: μ—°κ²°ν•  λ„€νŠΈμ›Œν¬ 이름.
  • mbti: μ—°κ²°ν•  μ»¨ν…Œμ΄λ„ˆ 이름.

μ»¨ν…Œμ΄λ„ˆ λ„€νŠΈμ›Œν¬ 정보 ν™•μΈν•˜κΈ°

μ»¨ν…Œμ΄λ„ˆμ˜ λ„€νŠΈμ›Œν¬ 섀정을 ν™•μΈν•˜λ €λ©΄ docker container inspect λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
docker container inspect mbti

μ£Όμš” 정보 확인

"NetworkSettings": {
    "Networks": {
        "mbti-network": {
            "IPAddress": "172.19.0.2",
            "Aliases": [
                "mbti-network",
                "c499727720e4"
            ]
        }
    }
}
  • IPAddress: μ»¨ν…Œμ΄λ„ˆμ˜ IP μ£Όμ†Œ.
  • Aliases: μ»¨ν…Œμ΄λ„ˆμ˜ DNS 이름 (μ»¨ν…Œμ΄λ„ˆ 이름 및 고유 ID).

λ„€νŠΈμ›Œν¬ λ‚΄ μ»¨ν…Œμ΄λ„ˆ κ°„ 톡신

같은 λ„€νŠΈμ›Œν¬μ— μ†ν•œ μ»¨ν…Œμ΄λ„ˆλ“€μ€ μ»¨ν…Œμ΄λ„ˆ μ΄λ¦„μœΌλ‘œ μ„œλ‘œλ₯Ό μ°Έμ‘°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
이λ₯Ό 톡해 IP μ£Όμ†Œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³ λ„ μ†μ‰½κ²Œ 톡신할 수 μžˆμŠ΅λ‹ˆλ‹€.

포트 맀핑 및 λ…ΈμΆœ

μ»¨ν…Œμ΄λ„ˆμ˜ λ‚΄λΆ€ 포트λ₯Ό ν˜ΈμŠ€νŠΈμ— λ…ΈμΆœν•˜μ—¬ μ™ΈλΆ€μ—μ„œ μ ‘κ·Όν•  수 μžˆλ„λ‘ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이λ₯Ό 포트 맀핑 (Port Mapping) λ˜λŠ” 포트 바인딩 (Port Binding)이라고 ν•©λ‹ˆλ‹€.

포트 맀핑 μ„€μ •

μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•  λ•Œ -p μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ—¬ 포트λ₯Ό 맀핑할 수 μžˆμŠ΅λ‹ˆλ‹€.

docker container run \
  --name mbti \
  -e PORT=3000 \
  --rm \
  -d \
  -p 3003:3000 \
  daehyunbigbread/mbti:embedded-db

λͺ…λ Ήμ–΄ μ„€λͺ…

  • -p 3003:3000: 호슀트의 3003 포트λ₯Ό μ»¨ν…Œμ΄λ„ˆμ˜ 3000 ν¬νŠΈμ— 맀핑.

확인 방법

docker container ls

μ˜ˆμ‹œ 좜λ ₯

CONTAINER ID   IMAGE                              COMMAND           CREATED         STATUS         PORTS                    NAMES
61676ab5ccbc   daehyunbigbread/mbti:embedded-db   "npm run start"   5 seconds ago   Up 5 seconds   0.0.0.0:3003->3000/tcp   mbti
  • PORTS: 0.0.0.0:3003->3000/tcpλŠ” 호슀트의 λͺ¨λ“  μΈν„°νŽ˜μ΄μŠ€μ—μ„œ 3003 포트둜 λ“€μ–΄μ˜€λŠ” νŠΈλž˜ν”½μ„ μ»¨ν…Œμ΄λ„ˆμ˜ 3000 포트둜 전달함을 μ˜λ―Έν•©λ‹ˆλ‹€.

Expose μ˜΅μ…˜

EXPOSE μ§€μ‹œμ–΄λŠ” Dockerfileμ—μ„œ μ‚¬μš©λ˜λ©°, μ»¨ν…Œμ΄λ„ˆκ°€ νŠΉμ • 포트λ₯Ό μ²­μ·¨ν•˜κ³  μžˆμŒμ„ λͺ…μ‹œν•©λ‹ˆλ‹€.
μ΄λŠ” λ¬Έμ„œν™” λͺ©μ μ΄λ©°, μ‹€μ œλ‘œ 포트λ₯Ό κ³΅κ°œν•˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€.
EXPOSE 3000

μ»¨ν…Œμ΄λ„ˆ μ‹€ν–‰ μ‹œ --expose μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ—¬ νŠΉμ • 포트λ₯Ό λ…ΈμΆœν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

docker container run \
  --name mbti \
  -e PORT=3000 \
  --rm \
  -d \
  --expose 3000 \
  daehyunbigbread/mbti:embedded-db

확인 방법

docker container inspect mbti

μ˜ˆμ‹œ 좜λ ₯

"Config": {
    "ExposedPorts": {
        "3000/tcp": {}
    }
}

μ£Όμ˜μ‚¬ν•­: EXPOSEλŠ” 포트λ₯Ό κ³΅κ°œν•˜μ§€ μ•ŠμœΌλ©°, μ‹€μ œ 접근을 원할 경우 -p μ˜΅μ…˜μ„ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.


예제: λ„€νŠΈμ›Œν¬ κ°„ 톡신 ν…ŒμŠ€νŠΈ

μ‹€μ œλ‘œ λ„€νŠΈμ›Œν¬λ₯Ό μƒμ„±ν•˜κ³ , 두 개의 μ»¨ν…Œμ΄λ„ˆλ₯Ό μ„œλ‘œ λ‹€λ₯Έ λ„€νŠΈμ›Œν¬μ— μ—°κ²°ν•œ ν›„, λ„€νŠΈμ›Œν¬ κ°„ 톡신을 ν…ŒμŠ€νŠΈν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

λ„€νŠΈμ›Œν¬ 생성

λ¨Όμ €, μ‚¬μš©μž μ •μ˜ λ„€νŠΈμ›Œν¬λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

docker network create mbti-network

μ‹€ν–‰ κ²°κ³Ό

5d54f1726b1fcfb9d1874d33f55ea5b81c08956df37ae4004fb559cfd82bb207

μ»¨ν…Œμ΄λ„ˆ μ‹€ν–‰

μ»¨ν…Œμ΄λ„ˆ #1: mbti-with-bridge-network

κΈ°λ³Έ λΈŒλ¦¬μ§€ λ„€νŠΈμ›Œν¬μ— μ†ν•œ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.

docker container run \
  --name mbti-with-bridge-network \
  -e PORT=3000 \
  --rm \
  -d \
  daehyunbigbread/mbti:embedded-db

μ»¨ν…Œμ΄λ„ˆ #2: mbti-with-mbti-network

μ‚¬μš©μž μ •μ˜ mbti-network에 μ†ν•œ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.

docker container run \
  --name mbti-with-mbti-network \
  -e PORT=3000 \
  --rm \
  -d \
  --network mbti-network \
  daehyunbigbread/mbti:embedded-db

μ»¨ν…Œμ΄λ„ˆ λ„€νŠΈμ›Œν¬ 정보 확인

각 μ»¨ν…Œμ΄λ„ˆμ˜ IP μ£Όμ†Œμ™€ DNS 이름을 ν™•μΈν•©λ‹ˆλ‹€.

μ»¨ν…Œμ΄λ„ˆ #1: mbti-with-bridge-network

docker container inspect mbti-with-bridge-network

μ£Όμš” 정보

"NetworkSettings": {
    "Networks": {
        "bridge": {
            "IPAddress": "172.17.0.2",
            "Aliases": null
        }
    }
}
  • IPAddress: 172.17.0.2
  • Aliases: κΈ°λ³Έ λΈŒλ¦¬μ§€ λ„€νŠΈμ›Œν¬λŠ” DNS 이름을 μ œκ³΅ν•˜μ§€ μ•ŠμŒ.

μ»¨ν…Œμ΄λ„ˆ #2: mbti-with-mbti-network

docker container inspect mbti-with-mbti-network

μ£Όμš” 정보

"NetworkSettings": {
    "Networks": {
        "mbti-network": {
            "IPAddress": "172.18.0.2",
            "DNSNames": "mbti-with-mbti-network"
        }
    }
}
  • IPAddress: 172.18.0.2
  • DNSNames: mbti-with-mbti-network

λ„€νŠΈμ›Œν¬ κ°„ 톡신 ν…ŒμŠ€νŠΈ

κΈ°λ³Έ λΈŒλ¦¬μ§€ λ„€νŠΈμ›Œν¬μ— μ†ν•œ μ»¨ν…Œμ΄λ„ˆμ—μ„œ mbti-with-bridge-network μ»¨ν…Œμ΄λ„ˆμ— μš”μ²­ 보내기

κΈ°λ³Έ λ„€νŠΈμ›Œν¬μ˜ μ»¨ν…Œμ΄λ„ˆλŠ” λ‹€λ₯Έ λ„€νŠΈμ›Œν¬μ— μ†ν•œ μ»¨ν…Œμ΄λ„ˆμ™€ 직접 톡신할 수 μ—†μŠ΅λ‹ˆλ‹€.
κ·ΈλŸ¬λ‚˜ 동일 λ„€νŠΈμ›Œν¬ λ‚΄μ—μ„œ IPλ₯Ό 톡해 μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.
docker container run \
  --rm \
  -it \
  curlimages/curl \
  curl 172.17.0.2:3000/api/healthcheck

μ‹€ν–‰ κ²°κ³Ό

{"status":"ok"}%

μ‚¬μš©μž μ •μ˜ λ„€νŠΈμ›Œν¬μ— μ†ν•œ μ»¨ν…Œμ΄λ„ˆμ—μ„œ mbti-with-mbti-network μ»¨ν…Œμ΄λ„ˆμ— μš”μ²­ 보내기

docker container run \
  --rm \
  -it \
  --network mbti-network \
  curlimages/curl \
  curl mbti-with-mbti-network:3000/api/healthcheck

μ‹€ν–‰ κ²°κ³Ό

{"status":"ok"}%

μ„€λͺ…:

  • κΈ°λ³Έ λΈŒλ¦¬μ§€ λ„€νŠΈμ›Œν¬ μ»¨ν…Œμ΄λ„ˆ (172.17.0.2): 직접 IPλ₯Ό 톡해 μ ‘κ·Ό.
  • μ‚¬μš©μž μ •μ˜ λ„€νŠΈμ›Œν¬ μ»¨ν…Œμ΄λ„ˆ (mbti-with-mbti-network): μ»¨ν…Œμ΄λ„ˆ 이름을 톡해 μ ‘κ·Ό κ°€λŠ₯.

포트 바인딩을 ν†΅ν•œ μ™ΈλΆ€ μ ‘κ·Ό

μ»¨ν…Œμ΄λ„ˆμ˜ 포트λ₯Ό ν˜ΈμŠ€νŠΈμ— λ§€ν•‘ν•˜μ—¬ μ™ΈλΆ€μ—μ„œλ„ μ ‘κ·Όν•  수 μžˆλ„λ‘ μ„€μ •ν•©λ‹ˆλ‹€.

docker container run \
  --name mbti \
  -e PORT=3000 \
  --rm \
  -d \
  -p 3003:3000 \
  daehyunbigbread/mbti:embedded-db

확인 방법

docker container ls

μ˜ˆμ‹œ 좜λ ₯

CONTAINER ID   IMAGE                              COMMAND           CREATED         STATUS         PORTS                    NAMES
61676ab5ccbc   daehyunbigbread/mbti:embedded-db   "npm run start"   5 seconds ago   Up 5 seconds   0.0.0.0:3003->3000/tcp   mbti
  • PORTS: 0.0.0.0:3003->3000/tcpλŠ” 호슀트의 3003 ν¬νŠΈκ°€ μ»¨ν…Œμ΄λ„ˆμ˜ 3000 포트둜 맀핑됨을 μ˜λ―Έν•©λ‹ˆλ‹€.

λΈŒλΌμš°μ €μ—μ„œ 확인

λΈŒλΌμš°μ €μ—μ„œ http://localhost:3003/home으둜 μ ‘μ†ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ •μƒμ μœΌλ‘œ μ‹€ν–‰λ˜λŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.


μΆ”κ°€ 팁 및 μ£Όμ˜μ‚¬ν•­

Docker λ„€νŠΈμ›Œν¬λ₯Ό 효율적으둜 ν™œμš©ν•˜κΈ° μœ„ν•΄ λͺ‡ 가지 팁과 μ£Όμ˜μ‚¬ν•­μ„ μ†Œκ°œν•©λ‹ˆλ‹€.

μ‚¬μš©μž μ •μ˜ λ„€νŠΈμ›Œν¬ μ‚¬μš© ꢌμž₯

  • DNS 이름 μ‚¬μš©: μ‚¬μš©μž μ •μ˜ λ„€νŠΈμ›Œν¬λ₯Ό μ‚¬μš©ν•˜λ©΄ μ»¨ν…Œμ΄λ„ˆ μ΄λ¦„μœΌλ‘œ μ‰½κ²Œ μ ‘κ·Όν•  수 μžˆμ–΄ IP μ£Όμ†Œλ₯Ό 직접 관리할 ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.
  • 격리 및 λ³΄μ•ˆ: μ‚¬μš©μž μ •μ˜ λ„€νŠΈμ›Œν¬λŠ” νŠΉμ • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄λ‚˜ μ„œλΉ„μŠ€ 그룹을 κ²©λ¦¬ν•˜λŠ” 데 μœ μš©ν•©λ‹ˆλ‹€.

포트 맀핑과 Expose의 차이 μ΄ν•΄ν•˜κΈ°

  • Port Mapping (-p): ν˜ΈμŠ€νŠΈμ™€ μ»¨ν…Œμ΄λ„ˆ 간에 포트λ₯Ό λ§€ν•‘ν•˜μ—¬ μ™ΈλΆ€μ—μ„œ μ ‘κ·Όν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.
  • Expose (--expose): Dockerfileμ΄λ‚˜ μ‹€ν–‰ μ‹œ 포트λ₯Ό λ…ΈμΆœν•˜μ§€λ§Œ, μ‹€μ œλ‘œλŠ” ν˜ΈμŠ€νŠΈμ— λ§€ν•‘λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ΄λŠ” 주둜 λ¬Έμ„œν™” λͺ©μ μž…λ‹ˆλ‹€.

λ„€νŠΈμ›Œν¬ λ“œλΌμ΄λ²„ 선택

  • Bridge: κΈ°λ³Έ λ„€νŠΈμ›Œν¬ λ“œλΌμ΄λ²„λ‘œ, λŒ€λΆ€λΆ„μ˜ 단일 호슀트 ν™˜κ²½μ—μ„œ μΆ©λΆ„ν•©λ‹ˆλ‹€.
  • Host: λ„€νŠΈμ›Œν¬ μ„±λŠ₯이 μ€‘μš”ν•œ 경우 μ‚¬μš©ν•˜μ§€λ§Œ, μ»¨ν…Œμ΄λ„ˆμ™€ 호슀트 κ°„μ˜ μ™„μ „ν•œ λ„€νŠΈμ›Œν¬ 곡유둜 인해 λ³΄μ•ˆμƒ μ£Όμ˜κ°€ ν•„μš”ν•©λ‹ˆλ‹€.
  • None: μ™„μ „ν•œ λ„€νŠΈμ›Œν¬ 격리가 ν•„μš”ν•œ 경우 μ‚¬μš©ν•©λ‹ˆλ‹€.

λ„€νŠΈμ›Œν¬ μ‚­μ œ μ‹œ μ£Όμ˜μ‚¬ν•­

κΈ°λ³Έ μ œκ³΅λ˜λŠ” λ„€νŠΈμ›Œν¬ (bridge, host, none)λŠ” μ‚­μ œν•  수 μ—†μœΌλ―€λ‘œ, μ‚¬μš©μž μ •μ˜ λ„€νŠΈμ›Œν¬λ§Œ μ‚­μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ„€νŠΈμ›Œν¬ μ‚­μ œ μ‹œ ν•΄λ‹Ή λ„€νŠΈμ›Œν¬μ— μ—°κ²°λœ λͺ¨λ“  μ»¨ν…Œμ΄λ„ˆκ°€ 영ν–₯을 받을 수 μžˆμœΌλ―€λ‘œ μ‹ μ€‘ν•˜κ²Œ κ΄€λ¦¬ν•˜μ„Έμš”.

닀쀑 λ„€νŠΈμ›Œν¬ μ—°κ²°

μ»¨ν…Œμ΄λ„ˆλŠ” μ—¬λŸ¬ λ„€νŠΈμ›Œν¬μ— λ™μ‹œμ— μ—°κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 λ‹€μ–‘ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°„μ˜ λ³΅μž‘ν•œ 톡신을 ꡬ성할 수 μžˆμŠ΅λ‹ˆλ‹€.

docker network connect another-network mbti

Docker λ„€νŠΈμ›Œν¬λŠ” μ»¨ν…Œμ΄λ„ˆ 기반 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μœ μ—°μ„±κ³Ό ν™•μž₯성을 κ·ΉλŒ€ν™”ν•˜λŠ” 핡심 μš”μ†Œμž…λ‹ˆλ‹€. λ„€νŠΈμ›Œν¬ λ“œλΌμ΄λ²„μ˜ 이해뢀터 μ»¨ν…Œμ΄λ„ˆ κ°„μ˜ 톡신 μ„€μ •κΉŒμ§€, μ‚¬μš©μž μ •μ˜ λ„€νŠΈμ›Œν¬λ₯Ό 톡해 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 보닀 체계적이고 μ•ˆμ „ν•˜κ²Œ ꡬ성할 수 μžˆμŠ΅λ‹ˆλ‹€.


참고 자료