
Docker入門與實踐:Docker中的網絡功能簡介
Docker提供網絡服務的方法包括兩種:
- 通過外部通路docker容器的方式;
- 通過Docker容器間互聯的方式。
一、外部通路docker容器
在docker容器中可以運作一些網絡應用,外部想要通路docker容器内的應用,可以通過
-p
或
-P
選項來指定端口映射,兩個選項的差別如下所示:
- (1)
:指定要映射的端口,通過該端口綁定一個docker容器;-p
- (2)
:docker會随機映射一個範圍的端口到内部容器開放的網絡端口。其中這個随機的端口範圍可以在-P
檔案中檢視,如下圖所示,我的電腦中的端口範圍為/proc/sys/net/ipv4/ip_local_port_range
。32768-60999
1.1 使用 -P
選項外部通路docker容器
-P
如下圖所示,使用
docker run -d -P training/webapp python app.py
指令建立一個可以通過外部網絡通路的docker容器;然後使用
docker container ls -l
檢視容器的端口資訊。這樣就建立了一個本地主機
49159
端口映射到容器
5000
端口的容器。
1.2 使用 -p
選項外部通路docker容器
-p
如上所述,
-p
指定特定的端口綁定到一個容器上,其支援的格式有:
-
:映射本地特定端口所有ip位址到容器的特定端口;hostPort:containerPort
-
:映射本地特定端口的特定ip位址到容器的特定端口;ip:hostPort:containerPort
-
:映射本地主機特定ip位址的随機端口到容器特定的端口;ip::containerPort
其中,上面的
hostPort
表示主機端口或本地端口;
containerPort
表示容器端口;
ip
表示網址,下面分别羅列這三種格式的使用方法:
1、映射本地特定端口所有ip位址到容器的特定端口
使用
hostPort:containerPort
格式可以将本地主機特定端口映射到容器的特定端口,以實作外部通路容器的目的,指令如下所示:
docker run -d -p 5000:5000 training/webapp python app.py
複制
如下圖所示,預設會綁定本地接口
5000
上所有ip位址到容器的
5000
端口上。
上圖中的
0.0.0.0:5000
表示本地主機
5000
端口上的所有ip位址。
2、映射本地特定端口的特定ip位址到容器的特定端口
使用
ip:hostPort:containerPort
格式可以将本地主機的特定端口的特定ip位址映射到容器的特定端口,以實作外部通路容器的目的,比如這裡的
ip
為
127.0.0.1
,指令如下所示:
docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
複制
如下圖所示,預設會綁定本地端口
5000
上
127.0.0.1
的ip位址到容器的
5000
端口上。
3、映射本地主機特定ip位址的随機端口到容器特定的端口
使用
ip::containerPort
格式可以将本地主機特定的ip位址的随機端口到容器的特定端口,以實作外部通路容器的目的,比如這裡的
ip
為
127.0.0.1
,指令如下所示:
docker run -d -p 127.0.0.1::5000 training/webapp python app.py
複制
如下圖所示,綁定本地主機随機端口上的
127.0.0.1
ip位址到容器的
5000
端口上,這裡的随機配置設定的主機端口為
49154
。
注意: -p
可以多次使用來綁定多個端口,指令如下所示:
docker run -d \
-p 5000:5000 \
-p 3000:80 \
training/webapp \
python app.py
複制
執行完上面指令,使用
docker container ls
指令就可以看出綁定了兩組端口:
二、Docker容器的互聯
Docker容器不僅可以通過網絡與本地主機互聯,容器還可以通過docker自定義的網絡來實作容器間互聯。
2.1 自定義docker網絡的建構
建構自定義docker網絡的指令如下所示:
docker network create -d bridge My_Net
複制
其中,
-d
指定了docker的網絡類型為
bridge
類型,并自定義docker網絡的名稱為
My_Net
。如下圖所示,可以使用
docker network ls
檢視系統的docker網絡:
2.2 Docker容器的網絡連接配接
這裡示範兩個容器通過上面建立的docker網絡
My_Net
,進行互聯的過程:
1、建立連接配接docker網絡的容器
首先,啟動或建立一個
busybox_1
容器并連接配接到上面建立的
My_Net
docker網絡,指令如下所示:
docker run -it --rm \
--name busybox_1 \
--network My_Net busybox sh
複制
如下如所示,由于本地沒有
busybox:latest
鏡像,是以首先從遠端鏡像倉庫拉取鏡像,再建立連接配接的docker網絡
My_Net
的容器
busybox_2
:
然後,再打開一個終端,使用同樣的方法建立一個
busybox_2
容器并連接配接到
My_Net
docker網絡:
docker run -it --rm \
--name busybox_2 \
--network My_Net busybox sh
複制
再打開一個終端,如下圖所示,使用
docker container ls
檢視容器資訊:
2、測試通過docker網絡互聯的容器
通過
ping
來測試
busybox_1
容器和
busybox_2
容器的互聯:
如下圖所示,在
busybox_2
容器内輸入
ping busybox_1
,即用
ping
指令來測試
busybox_2
容器連接配接
busybox_1
的情況,到如下圖的結果則表示兩個容器互聯成功: