Docker幾種網路模式
其於Docker run建立容器時,可以使用–net選項指定容器的網路模式。Docker預設有以下四種網路模式:
Host模式;使用–net=host指定
Host模式,預設Docker容器執行會分配獨立的Network Namespace隔離子系統,基於host模式,容器將不會獲得一個獨立的Network Namespace,而是和宿主機共用一個Network Namespace,容器將不會虛擬出自己的網路卡,配置自己的IP等,而是使用宿主機的IP和埠。
Container模式;使用–net=container:NAME or ID指定
Container模式指定新建立的容器和已經存在的一個容器共享一個Network Namespace,而不是和宿主機共享。即新建立的容器不會建立自己的網路卡,配置自己的IP,而是和一個指定的容器共享IP、埠範圍等。同樣兩個容器除了網路方面相同之外,其他的如檔案系統、程式列表等還是隔離的。
None模式;使用–net=none來指定。
None模式與其他的模式都不同,如果處於None模式,Docker容器擁有自己的Network Namespace,但是並不為Docker容器進行任何網路配置。也就是說該Docker容器沒有網路卡、IP、路由等資訊,需要手工為Docker容器新增網路卡、配置IP等,典型Pipework工具為Docker容器指定IP等資訊;
Bridge橋接模式,這個也是docker預設的網路模式,即Docker run時,不加–net指定網路模式時,自動啟動此模式。
Bridge模式是Docker預設的網路模式,該模式會為每一個容器分配Network Namespace、設定IP、路由等配置,預設會將Docker容器連線到一個虛擬網橋交換機Docker0上
以Bridge橋接模式,說明建立Docker Bridge過程與操作
橋接模式簡單拓撲
建立過程:
- 啟動Docker容器之後,首先宿主機上會建立一對虛擬網路卡veth 裝置,veth裝置總是成對出現的,組成了一個資料的通道,資料從一個裝置進入,就會從另一個裝置出來,veth裝置常用來連線兩個網路裝置。
- Docker將veth 裝置的一端放在新建立的容器中,並命名為eth0,然後將另一個veth 裝置放在宿主機中,以vethxxx這樣類似的名字命名,並將這個網路裝置vethxxx加入到docker0網橋中,可以通過brctl show命令檢視。
- 從docker0子網中分配一個IP給容器使用,並設定docker0的IP地址為容器的預設閘道器。
- 此時容器IP與宿主機能夠通訊,宿主機也可以訪問容器中的IP地址,在Bridge模式下,連在同一網橋上的容器之間可以相互通訊,同時容器也可以訪問外網,但是其他物理機不能訪問docker容器IP,需要通過NAT將容器IP的port對映為宿主機的IP和port。
操作方法:
vim /etc/sysconfig/network-scripts/ifcfg-ens33
#修改網路卡,增加:BRIDGE="br0"
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
m ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0
IPADDR=192.168.68.129
NETMASK=255.255.255.0
GATEWAY=192.168.68.2
DNS1=114.114.114.114
DNS2=1.2.4.8
cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-br0
vim /etc/sysconfig/network-scripts/ifcfg-br0
#修改ifcfg-br0如下
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0
fg-br0
TYPE=Bridge
BOOTPROTO=static
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.68.129
NETMASK=255.255.255.0
GATEWAY=192.168.68.2
DNS1=114.114.114.114
DNS2=1.2.4.8
[root@localhost ~]#
#重啟網路卡,啟動docker服務,即可;
service network restart
service docker start
可以看到,現在增加一個br0網路卡並與網路卡ens33繫結了,宿主機有兩個虛擬網路卡:Docker0和br0
Docker預設提供了一個隔離的內網環境,啟動時會在宿主機上建立一個docker0的虛擬網路卡,每個容器都是連線到docker0網路卡上的。而docker0的ip段為172.17.0.1,如果想讓容器與宿主機同一網段的其他機器訪問,就必須在啟動docker的時候將某個埠對映到宿主機的埠。
而為了直接讓容器和宿主機通訊,不需要對映埠,需要修改Docker啟用時候預設使用br0網路卡。這個咋修改呢?需要修改docker這個軟體的配置檔案
ls /etc/sysconfig/docker-network
vim /etc/sysconfig/docker-network
#在DOCKER_NETWORK_OPTIONS=後面增加"-b=br0"
#-b表示指定橋接,br0為橋接網路卡名稱 如果是原始碼安裝docker,執行/usr/local/docker/bin/dockerd -b=br0
[root@localhost ~]# cat /etc/sysconfig/docker-network
# /etc/sysconfig/docker-network
DOCKER_NETWORK_OPTIONS="-b=br0"
[root@localhost ~]#
#重啟一下docker服務
systemctl restart docker
啟docker虛擬機器:
1).自動分配置IP啟動:
docker run -itd –privileged –name=caixin centos7-ansible:V2
這種方式啟動容器,容器只能通過埠對映方式與宿主要通訊,使用上不方便。
2).手機設定IP啟動:
docker run -itd –net=none –privileged –name=caixin centos7-ansible:V2
這種方法可以使啟動的容器的IP和宿主機在同一個網段。直接可以和宿主機通訊,企業生產環境常使用這一種方式。可以使用pipework工具來配置IP。
#首先要下載安裝pipework
wget https://github.com/jpetazzo/pipework/archive/master.zip
mv master.zip pipework.zip
unzip pipework.zip
cp pipework /usr/bin/
#手動docker一個容器,網路模式為none,然後通過pipework設定新啟動的容器ip:192.168.68.11
[root@localhost pipework-master]# docker run -itd --net=none --privileged centos7-ansible:V2
08c6f52a09d7fe1fe1f800cd8fa804562e95760edb15281c16ba518872d04442
[root@localhost pipework-master]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
08c6f52a09d7 centos7-ansible:V2 "/bin/bash" 6 seconds ago Up 5 seconds heuristic_wilson
[root@localhost pipework-master]# pipework br0 08c6f52a09d7 192.168.68.11/24@192.168.68.129
[root@localhost pipework-master]# ping 192.168.68.11
PING 192.168.68.11 (192.168.68.11) 56(84) bytes of data.
64 bytes from 192.168.68.11: icmp_seq=1 ttl=64 time=0.151 ms
64 bytes from 192.168.68.11: icmp_seq=2 ttl=64 time=0.053 ms
以上手動啟動了一臺容器,並手動分配IP。如果一次性啟動多個容器,比如20臺,分配20個IP,怎麼操作?只需要執行:
for i in $(seq 11 30);do docker run -itd --name=vm$i --net=none --privileged centos7-ansible:V2 ;sleep 1 ;pipework br0 vm$i 192.168.68.$i/24@192.168.68.129 ;done
相關文章
- Docker四種網路模式Docker模式
- 詳解五種Docker容器的網路模式Docker模式
- CCE叢集VPC網路模式下幾種訪問場景模式
- 萬字長文:聊聊幾種主流Docker網路的實現原理Docker
- Docker的網路模式詳解Docker模式
- VMware連線網路的幾種方式
- 幾種Linux網路配置工具的使用Linux
- 【網路安全】7種網路攻擊手段,你知道幾個?
- 雲端計算進階學習路線圖課件:Docker容器的四種網路模式Docker模式
- docker的網路-單主機(三種原生網路)none、host、bridgeDockerNone
- 建立物件的幾種模式物件模式
- 伺服器網路測試的幾種方法伺服器
- 幾種常見網路抓包方式介紹
- 網路安全——常見的幾種WEB攻擊:Web
- VMware中三種網路模式(快速筆記)模式筆記
- Vim常見模式有幾種?模式
- Docker網路Docker
- Docker 網路Docker
- kvm網路,docker網路,,vm網路Docker
- Vmvare三種網路連線方式:橋接模式、NAT模式和HostOnly模式橋接模式
- 幾種型別神經網路學習筆記型別神經網路筆記
- 網路安全中常用的幾種加密方式都有哪些?加密
- Docker使用Calico網路模式配置及問題處理Docker模式
- 常見的網路安全防禦體系有幾種?網路安全入門
- docker 容器如何固定ip,有幾種方式Docker
- spring注入bean的幾種策略模式SpringBean模式
- 單例模式有幾種寫法?單例模式
- Docker網路管理Docker
- Docker網路原理Docker
- 伺服器常碰見的幾種網路攻擊伺服器
- 【Docker】(11)---Docker的網路概念Docker
- vmware虛擬機器三種網路模式詳解虛擬機模式
- [Docker 系列]docker 學習八,Docker 網路Docker
- java幾種代理模式的實現方式Java模式
- Thrift server端的幾種工作模式分析Server模式
- 單例模式你會幾種寫法?單例模式
- 網路安全SQL隱碼攻擊型別分為幾種?SQL型別
- VMware虛擬機器三種網路模式詳解(轉)虛擬機模式