docker 的容器可以正常運作以後,我們須設定他的網路功能,讓外界可存取容器內執行的程式。
本頁目錄
當我們要從外部存取 docker 內執行的程式時,須設定 port forwarding,在容器執行時,將 docker 內應用程式使用的 port 與主機指定的 port 對接,如此一來才可在外部進行存取。
指令: run [-p <外部連接埠>:<內部連接埠>] <映像檔>
-d 讓容器在背景執行
--name 指定新容器的名稱
-p 連接埠轉送 <外部>:<內部>
$ docker run -d --name web-httpd -p 80:80 httpd
d91047175432b9100242b8dc30def07ee4678156b1dd1a010f67c89dc157914b
在本機開啟瀏覽器,於網址列輸入 localhost 即可看到此頁面。
docker 中的每個容器,皆是獨立的網路環境彼此不互通,若要讓容器之間可以互相溝通,可以建立一個 docker 網路,讓要互通的容器使用此網路,如此一來,容器即可透過網路進行溝通。
最常見的情況是網頁伺服器和資料庫使用不同的容器,但網頁程式須連結資料庫的情況。
首先,要建立一個 docker 網路,之後再讓容器使用此網路,即可實現容器互通。
指令: network create [-d <網路類型>] <網路名稱>
預設建立的網路類型為 bridge,若要建立其他類型的網路,如: host、null、overlay,則需要加上 --driver <網路類型>
或 -d <網路類型>
參數指定網路類型。
$ docker network create web
e28cfdef1cd0e6547960a08cd05ed8843043a1a5094f5446da5bd5c05c3c4f19
另外,可使用以下指令查看所有已存在的網路。
指令: 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
指令: 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 網路內的容器進行連線而已。