Docker 網路:初學者指南

你好,未來的 Docker 大師!我很興奮能成為你探索 Docker 網路世界的導師。作為一個教了多年計算機科學的人,我可以告訴你,理解 Docker 網路就像學習在繁忙的城市街道上導航一樣 - 起初可能會讓人覺得應接不暇,但一旦你掌握了要領,你很快就會像當地人一樣自如地穿梭!

Docker - Networking

Docker 網路是什麼?

在我們深入細節之前,讓我們從基礎開始。Docker 網路基本上是 Docker 容器之間以及與外部世界如何通信的方式。把它想成是你的容器的郵政系統 - 它們通過它發送和接收信息和數據。

列出所有 Docker 網路

讓我們開始我們的冒險,學習如何在 Docker 環境中查看有哪些網路可用。這就像查看我們新城市的地圖,看看我們可以走哪些路線。

要列出所有 Docker 網路,我們使用以下簡單命令:

docker network ls

當你運行這個命令時,你會看到類似以下的輸出:

網路ID     名稱      驅動器    范圍
9f904ee27bf5   bridge    bridge    本地
95e74588f40d   host      host      本地
6dd90d006c9b   none      null      本地

讓我們來解析一下:

  • 網路ID:每個網路的唯一標識符
  • 名稱:網路的名稱
  • 驅動器:使用的網路驅動器(我們稍後會更多談論這些)
  • 范圍:網路的範圍(本地於 Docker 主機或群集)

檢查 Docker 網路

既然我們可以看到我們的網路,讓我們仔細查看其中一個。這就像在我們的地圖上放大一條特定的街道。

要檢查 Docker 網路,我們使用:

docker network inspect [網路名稱]

例如,讓我們檢查默認的 'bridge' 網路:

docker network inspect bridge

這個命令將以 JSON 格式返回有關網路的很多詳細信息。這就像獲得有關那條街道上發生的一切的詳細報告 - 誰住在那裡,房子長什麼樣等等。

創建自己的新網路

好了,現在我們準備好建造我們自己的道路了!在 Docker 中創建新網路出奇地簡單:

docker network create [選項] [網路名稱]

讓我們創建一個簡單的橋接網路:

docker network create my_awesome_network

恭喜你!你剛剛創建了你的第一個 Docker 網路。這就像你在我們的 Docker 城市中鋪設了一條新街道。

為了驗證我們的網路已經創建,我們可以再次使用我們可靠的 docker network ls 命令:

docker network ls

你现在應該在列表中看到你的新網路!

網路驅動器

在 Docker 中,網路驅動器就像不同類型的道路。讓我們看看主要類型:

驅動器 描述
Bridge 預設的網路驅動器。適合需要通信的獨立容器。
Host 移除容器和 Docker 主機之間的網路隔離。
Overlay 用於連接多個 Docker 守護程序。適合群集服務。
Macvlan 讓你可以為容器分配 MAC 地址,使其在你的網路上看起來像物理設備。
None 為容器禁用所有網路。

創建網路時,你可以指定驅動器。例如:

docker network create --driver overlay my_overlay_network

這會創建一個新的-overlay 網路,這對於在使用 Docker 群集時非常有用。

連接容器到網路

現在我們有了我們的網路,讓我們學習如何將我們的容器連接到它們。這就像決定我們的房子(容器)應該在哪條街道上。

當你運行一個新的容器時,你可以指定它應該連接到哪個網路:

docker run --network=my_awesome_network nginx

這個命令會運行一個 nginx 容器並將其連接到我們的 'my_awesome_network'。

你也可以將現有的容器連接到網路:

docker network connect my_awesome_network my_existing_container

如果你想要斷開容器與網路的連接:

docker network disconnect my_awesome_network my_existing_container

實際範例

讓我們將所有這些東西結合起來,以一個實際的範例。假設我們正在構建一個簡單的 Web 運用,它有一個前端和一個後端。我們希望這些容器能夠相互通信,但又不希望將後端暴露給外部世界。

首先,讓我們創建我們的網路:

docker network create my_app_network

現在,讓我們運行我們的後端容器並將其連接到我們的網路:

docker run --name backend --network=my_app_network -d my-backend-image

最後,我們的前端容器:

docker run --name frontend --network=my_app_network -p 80:80 -d my-frontend-image

現在我們的前端和後端容器可以通過 'my_app_network' 相互通信,但只有前端在端口 80 上對外部世界开放。

結論

這就是了,各位!我們已經從列舉和檢查網路到創建我們自己的網路和連接容器走了一遍 Docker 網路的基礎。記住,像任何技能一樣,精通 Docker 網路需要練習。不要害怕嘗試和嘗試不同的配置。

當我們結束時,我想到一個學生曾經告訴我,學習 Docker 網路感覺就像學習游泳 - 起初,你會覺得自己在信息的海洋中溺亡,但一旦掌握了要領,你就可以輕鬆地滑過概念。所以繼續划水,在你知道之前,你將會在 Docker 網路中自由馳騁!

祝你在 Docker 世界中玩得開心,並願你的容器總是能找到回家的路!

Credits: Image by storyset