linwebs

林林.台灣 | Linwebs - 課程

Docker容器虛擬化介紹 - Docker 網路功能

本文章為嘉大資工讀書會第二期課程內容
場次 5-2 【雲端系統佈署】 Docker 容器虛擬化介紹

docker 的容器可以正常運作以後,我們須設定他的網路功能,讓外界可存取容器內執行的程式。

本頁目錄

 

從外部存取容器

當我們要從外部存取 docker 內執行的程式時,須設定 port forwarding,在容器執行時,將 docker 內應用程式使用的 port 與主機指定的 port 對接,如此一來才可在外部進行存取。

指令: run [-p <外部連接埠>:<內部連接埠>] <映像檔>

  • 開啟 80port 執行 http 服務,在容器建立時指定參數

-d 讓容器在背景執行

--name 指定新容器的名稱

-p 連接埠轉送 <外部>:<內部>

$ docker run -d --name web-httpd -p 80:80 httpd
d91047175432b9100242b8dc30def07ee4678156b1dd1a010f67c89dc157914b

在本機開啟瀏覽器,於網址列輸入 localhost 即可看到此頁面。


容器互相連接

docker 中的每個容器,皆是獨立的網路環境彼此不互通,若要讓容器之間可以互相溝通,可以建立一個 docker 網路,讓要互通的容器使用此網路,如此一來,容器即可透過網路進行溝通。

最常見的情況是網頁伺服器和資料庫使用不同的容器,但網頁程式須連結資料庫的情況。


建立 docker 網路

首先,要建立一個 docker 網路,之後再讓容器使用此網路,即可實現容器互通。

指令: network create [-d <網路類型>] <網路名稱>

預設建立的網路類型為 bridge,若要建立其他類型的網路,如: host、null、overlay,則需要加上 --driver <網路類型>-d <網路類型> 參數指定網路類型。

$ docker network create web
e28cfdef1cd0e6547960a08cd05ed8843043a1a5094f5446da5bd5c05c3c4f19

列出所有 docker 網路

另外,可使用以下指令查看所有已存在的網路。

指令: network ls
(完整指令: docker network list)

$ docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
2f4697bb78b7   bridge    bridge    local
080c977449c9   host      host      local
1dff02bde5b3   none      null      local
e28cfdef1cd0   web       bridge    local

刪除 docker 網路

指令: network rm <網路名稱>

$ docker network rm web
web

若要刪除 docker 網路前須確保沒有任何容器使用此網路,否則會顯示以下錯誤:

$ docker network rm web
Error response from daemon: error while removing network: network web id has active endpoints

建立容器並指定網路

在容器建立時,可以指定此容器要使用的網路。

指令: run [--network <網路名稱/網路ID>] <映像檔>

-d 讓容器在背景執行

--name 指定新容器的名稱

--network 指定此容器要使用的 docker 網路

$ docker run -d --name database --network web httpd
038e9d802bd5d870a46c3a715022b2980d7519a604be4e474e90489a78a63780

PS: 使用 docker 網路代表可讓容器互通,但不代表可以直接讓容器與本機互通,若是架設網站伺服器的話,仍須使用 -p 參數指定 port 開啟連接埠轉送,才能讓本機連線到此服務,否則僅能讓同一 docker 網路內的容器進行連線而已。


參考資料: Docker 官方文件 - docker network

建立時間:2021/8/27 AM 12:57
修改時間:2021/9/2 AM 12:34
作者: Linwebs

bookmark標籤