iT邦幫忙

2026 iThome 鐵人賽

DAY 28
0
IT Operation

從零開始的 Linux 維運與 Bash 自動化實戰 30 天系列 第 28 篇

Day 28:Docker Network — 容器間的網路通訊與隔離

  • 分享至 

  • xImage
  •  

在前面兩天,我們讓外部宿主機可以透過 Port 映射(如 -p 8081:80)存取容器。但在實際的微服務架構中,應用程式(如後端 API)需要與資料庫(如 MySQL、Redis)通訊,這些內部通訊不需要也不應該暴露給外部網路。
今天我們要學習如何建立自訂 Docker 網路(Bridge Network),讓容器之間可以透過「容器名稱(Container Name)」直接進行安全的內部通訊。

Docker Network 核心觀念

  • default bridge(預設網路):容器預設加入的網路,不支援直接用容器名稱做 DNS 解析(只能用 IP 連線,但容器 IP 每次重啟都會變)。
  • custom bridge(自訂 Bridge 網路):DevOps 最常使用的網路模式。支援內建 DNS 解析,同一個網路內的容器只要呼叫「容器名稱」就能直接通訊,且具備安全隔離效果。

實作
https://ithelp.ithome.com.tw/upload/images/20260925/20183847Y6F4VLc2Pr.png
建立自訂網路與啟動內部服務

  • 建立網路:執行 docker network create my-app-net 建立了一個全新的自訂 Bridge 網路,並透過 docker network ls 確認清單中已出現 my-app-net。
  • 啟動內部容器:執行 docker run -d --name backend-db --network my-app-net nginx:alpine,將 backend-db 放入 my-app-net 網路中。
  • 無 Port 映射隔離:從 docker ps 可以看到 backend-db 的 PORTS 只有顯示 80/tcp(未映射到宿主機),代表外部無法存取,只有同網路內的容器看得到它。
    https://ithelp.ithome.com.tw/upload/images/20260925/201838476WdGEA5PcG.png
    驗證 DNS 名稱解析與網路隔離
  • 同網路連線 (DNS 成功):執行帶有 --network my-app-net 的 curl 容器,直接連線 http://backend-db,成功拉取並印出了 Nginx 的 HTML 預設網頁,證明自訂網路具備內建 DNS 解析功能。
  • 異網路隔離 (安全阻擋):執行未加入 my-app-net 的預設容器嘗試連線,最後在移除 -s(靜音)後,終端機明確印出:curl: (6) Could not resolve host: backend-db
    這直接證實了非同一網路的容器完全無法存取內部的 backend-db。

上一篇
Day 27:Docker Volume — 容器資料持久化與共享
下一篇
Day 29:Docker Compose — 多容器應用程式的一鍵編排
系列文
從零開始的 Linux 維運與 Bash 自動化實戰 30 天 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言