Docker容器的網路連線
一.Docker容器的網路基礎
通過ifconfig檢視docker0的網路裝置,docker守護程式就是通過docker0為docker的容器提供網路連線的各種服務。
docker0是Linux虛擬網橋。
Linux虛擬網橋的特點:
- 可以設定IP地址
- 相當於擁有一個隱藏的虛擬網路卡
docker0的地址劃分:
- IP:172.17.42.1 子網掩碼: 255.255.0.0
- MAC: 02:42:ac:11:00:00 到 02:42:ac:11:ff:ff
- 總共提供65534個地址
docker守護程式在一個容器啟動時,實際上它要建立網路連線的兩端。一端是在容器中的網路裝置,而另一端是在執行docker守護程式的主機上開啟一個名為veth*的一個介面,用來實現docker這個網橋與容器的網路通訊。
需要檢視網橋,需要linux的網橋管理程式,在Ubuntu中通過 apt-get install bridge-utils。
$ sudo brctl show bridge name bridge id STP enabled interfaces docker0 8000.0242ed943d02 no
執行一個docker容器,在容器中檢視它的網路裝置(如果沒有ifconfig命令,通過apt-get install -y net-tools)
root@b2a3136f5425:/# ifconfig eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:02 inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:145 errors:0 dropped:0 overruns:0 frame:0 TX packets:60 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:184985 (184.9 KB) TX bytes:4758 (4.7 KB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
docker已經自動建立了eth0的網路卡,注意觀察ip地址和mac地址。不要退出容器,再執行如下檢視網橋的狀態
$ sudo brctl show bridge name bridge id STP enabled interfaces docker0 8000.0242ed943d02 no veth95521e6
我們看到在interface中多了一個veth*的這樣一個介面。通過ifconfig命令同樣可以看到這個網路介面。
自定義docker0
- 修改docker0預設分配的ip地址:
sudo ifconfig docker0 192.168.200.1 netmask 255.255.255.0
修改完後,重啟docker服務 sudo service docker restart. 新執行的容器地址就變成了新的ip地址了。
- 新增虛擬網橋
sudo brctl addbr br0 sudo ifconfig br0 192.168.100.1 netmask 255.255.255.0
更改docker守護程式的啟動配置:
vim /etc/default/docker 中新增 DOCKER_OPS的值 -b=br0.
重啟docker服務即可。
二.Docker容器的互聯
用於測試的Docker映象 Dockerfile:
FROM ubuntu:14.04 RUN apt-get install -y ping RUN apt-get update RUN apt-get install -y nginx RUN apt-get install -y curl EXPOSE 80 CMD /bin/bash
1.允許所有容器互聯
在同一宿主機下,docker的容器是通過虛擬網橋來進行連線的。那麼在預設情況下,在同一宿主機中執行的容器都是可以互相連線的。
--icc=true 預設
容器的ip地址實際上是一個不可靠的連線,因為它會隨著容器的啟動而改變。
--link
docker run --link=[CONTAINER_NAME]:[ALIAS] [IMAGE] [COMMAND]
CONTAINER_NAME: 需要連線的容器名字
ALIAS: 在容器中連線的代號
docker -run -it --link=container01:webtest nginx ping webtest
檢視在容器中產生的哪些影響
$ env
檢視環境變數,可以看到大量以WEBTEST*開頭的環境變數,這些環境變數是在容器啟動時,由docker新增的。我們還可以檢視在/ect/host檔案,這裡新增了webtest的地址對映。當docker重啟啟動容器時 /ect/host所對應的ip地址發生了變化。也就是說,針對於指定了link選項的容器,在啟動時docker會自動修改ip地址和我們指定的別名之間的對映。環境變數也會做出相應的改變。
2.拒絕所有容器間互聯
Docker守護程式的啟動選項
--icc=false
修改vim /etc/default/docker,在末尾新增配置 DOCKER_OPTS="--icc=false"。
需要重啟docker的服務 sudo service docker restart.即使是link也ping不通。
3.允許特定容器間的連線
Docker守護程式的啟動選項
--icc=false --iptables=true
--link 在容器啟動時新增link
docker利用iptables中的機制,在icc=false時,阻斷所有的docker容器間的訪問,僅僅執行利用link選項配置的容器進行相互的訪問。
注: 如果出現ping不通的情況,可能為iptables的問題(DROP規則在docker之前了)。
sudo iptables -L -n 檢視iptables規則的情況 sudo iptables -F 清空iptables規則設定 sudo service docker restart 重新啟用docker的服務 sudo iptables -L -n 再來檢視iptables的設定,docker的規則鏈已經在第一位
重新啟動容器即可
三.Docker容器與外部網路的連線
- ip_forward
--ip-forward=true
sysctl net.ipv4.conf.all.forwarding
ip_forward本身是Linux系統中的一個變數,它的值決定了系統是否會轉發流量。在Docker守護程式的預設引數中也有ip_forward選項,預設值是true.
- iptables
iptables是與linux核心整合的包過濾防火牆系統,幾乎所有的linux發行版本都會包含iptables的功能。
每一個大的方塊中,就是iptables中的一個鏈(chain),每一個鏈實際上就是資料處理中的一個環節,而在每個環節中又包含了不同的操作。
- 允許埠對映訪問
- 限制IP訪問容器
實質都是通過iptables的規則來控制的。
相關文章
- Docker網路雙向連線Docker
- docker學習5:Docker 容器連線Docker
- Docker phpmyadmin 連線mysql容器DockerPHPMySql
- Docker的容器使用與連線-WindowDocker
- 【Docker】資料卷及容器連線Docker
- docker容器網路bridgeDocker
- [第十篇]——Docker 容器連線Docker
- 從零開始寫 Docker(十八)---容器網路實現(下):為容器插上”網線“Docker
- 從零開始寫 Docker(十六)---容器網路實現(上):為容器插上”網線”Docker
- 從零開始寫 Docker(十七)---容器網路實現(中):為容器插上”網線“Docker
- Docker & ASP.NET Core (4):容器間的連線DockerASP.NET
- 容器技術之Docker網路Docker
- 詳解 Docker 容器網路配置Docker
- docker容器跨主機網路overlayDocker
- 詳解五種Docker容器的網路模式Docker模式
- Docker多容器連線-以Nginx+PHP為例DockerNginxPHP
- 雲端計算進階學習路線圖課件:Docker容器的四種網路模式Docker模式
- Docker 基礎-映象&容器&網路&儲存Docker
- navicat連線遠端伺服器docker的mysql容器時連不上報錯伺服器DockerMySql
- 如何在 Docker 容器之間設定網路Docker
- Docker & ASP.NET Core (1):把程式碼連線到容器DockerASP.NET
- DOCKER簡明教程 : 透過容器連線REDIS資料庫DockerRedis資料庫
- 資料庫的網路連線資料庫
- 使用iwctl連線無線網路
- 網路連線和概述
- win10無線網路連線步驟_win10怎麼連線無線網路Win10
- docker筆記49-容器虛擬化網路Docker筆記
- Docker容器基礎入門認知-網路篇Docker
- 網路連線總超時?從四層模型上解析網路是怎麼連線的模型
- VMware連線網路的幾種方式
- 網際網路是如何連線的:計網概述
- 判斷網路是否連線
- VirtualBox網路連線方式
- 檢查網路是否連線
- RPC連線btcd網路RPC
- docker 容器環境下的 MySQL 拒絕連線錯誤解決辦法DockerMySql
- win10網路連線如何開啟_win10開啟網路連線的步驟Win10
- docker 移除,裁剪,刪除(prune)不使用的映象、容器、卷、網路Docker