docker入門加實戰—網路

2023-10-17 06:01:10

docker入門加實戰—網路

我們執行了一些容器,但是這些容器是否能夠進行連通呢?那我們就來試一下。

我們檢視一下MySQL容器的詳細資訊:

主要關注,Networks.bridge.IPAddress屬性資訊:

docker inspect mysql
# 或者過濾一些資訊
docker inspect --format='{{range .NetworkSettings.Networks}}{{println .IPAddress}}{{end}}' mysql

可以看到ip地址為:172.17.0.2

同理,可以nginx容器ip為:172.17.0.3

可以看到他們有相同網段,他們都有相同的閘道器。

預設情況下,所有容器都是以bridge方式連線到Docker的一個虛擬網橋上:

/16表示ip地址的前16位元不能動,也就是前兩段不能動;也就是這裡不能動。

容器的網路IP其實是一個虛擬的IP,其值並不固定與某一個容器繫結,如果我們在開發時寫死某個IP,而在部署時很可能MySQL容器的IP會發生變化,連線會失敗。

所以,我們必須藉助於docker的網路功能來解決這個問題,官方檔案:

https://docs.docker.com/engine/reference/commandline/network/

常見命令有:

命令 說明 檔案地址
docker network create 建立一個網路 docker network create
docker network ls 檢視所有網路 docs.docker.com
docker network rm 刪除指定網路 docs.docker.com
docker network prune 清除未使用的網路 docs.docker.com
docker network connect 使指定容器連線加入某網路 docs.docker.com
docker network disconnect 使指定容器連線離開某網路 docker network disconnect
docker network inspect 檢視網路詳細資訊 docker network inspect

自定義網路

檢視網路

docker network ls

建立網路

docker network create sjdwz_network

再次檢視網路:

通過

ip addr

檢視如下:

可以看到多出來一個網路卡;

讓容器加入網路

讓MySQL容器加入網路,並指定別名db

# mysql容器,指定別名為db,另外每一個容器都有一個別名是容器名
docker network connect sjdwz_network mysql --alias db

把我們的dd容器也加入到網路,不指定別名

docker network connect sjdwz_network dd

注意 容器建立時連線網路可以如下操作:可以加--network 網路名加入,比如:

docker run -d --name dd -p 8080:8080 --network sjdwz_network docker-demo:1.0 

測試互連

進入到dd容器

docker exec -it dd bash

ping Mysql

ping mysql

驗證可以連通:

所以:

  • 在自定義網路中,可以給容器起多個別名,預設的別名是容器名本身
  • 在同一個自定義網路中的容器,可以通過別名互相存取