1. 程式人生 > >win7用虛機搭建docker開發測試環境的網路配置,免去埠對映煩惱

win7用虛機搭建docker開發測試環境的網路配置,免去埠對映煩惱

之前有寫過一篇centos6.4使用docker,使用的是NAT網路模式,外部網路想要訪問容器服務,只能通過埠轉發。
如果我們是在win7系統上使用虛擬機器的centos6.4來安裝docker做開發測試研究,那麼網路環境很複雜,要對外提供服務,層層埠轉發管理起來會崩潰。
場景:win7(路由器上網)                本地網絡卡   ip 192.168.2.195  閘道器192.168.2.1 子網192.168.2.0   掩碼255.255.255.0
         win7虛擬網絡卡                         vmnet8   ip 192.168.1.2      閘道器192.168.1.1  子網192.168.0.0   掩碼255.255.0.0
        docker宿主機(虛擬機器centos)    eth0       ip 192.168.1.3      閘道器192.168.1.1   子網192.168.0.0   掩碼255.255.0.0  


docker預設新增一個網絡卡docker0,網段在172.17.42.0/24,相當於用宿主機構建了一個路由器,形成內部網路,我們要想在win7直接連線到容器ip,就得使用自定義網橋,而且ip段分配很重要。


網路流轉路線
win7->宿主機->容器


這裡我們使用192.168.0.0/16將形成一個大的網路,win7所在路由器區域網在192.168.2.0/24段,宿主機使用192.168.1.0/24段,容器使用192.168.0.0/24段,就可以使容器跟區域網其他主機在一個網路下實現互通。


一、配置docker自定義網橋
1、刪除docker預設新增的docker0
brctl delbr docker0


2、新增一個新網絡卡docker0 
brctl addbr docker0


3、將docker0與eth0使用網橋連線
brctl addif docker0 eth0


4、配置網絡卡
先從eth0複製一份docker0
cp etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-docker0


修改eth0,不設定ip、掩碼、閘道器等
vi /etc/sysconfig/network-scripts/ifcfg-eth0


BOOTPROTO=none


:wq儲存


修改docker0的配置
vi /etc/sysconfig/network-scripts/ifcfg-docker0


DEVICE=docker0
BOOTPROTO=static
IPADDR=192.168.1.3
NETMASK=255.255.254.0
GATEWAY=192.168.1.1


:wq儲存


重啟網路服務,網橋配置成功此時可在win7上ping 192.168.1.3  在宿主機上ping 192.168.1.2驗證網路是否暢通。
service network restart


然而,因為win7所在路由器網路的子網不是設定為192.168.0.0/16,ping 192.168.2.0段是不通的,如能修改,則需要修改路由器配置。


二、docker預設網路配置


1、建立docker執行的配置檔案(如果資料夾不存在,手工建立) 
mkdir -p /etc/systemd/system/docker.service.d sudo


2、新增配置檔案,注意如果是其他linux版本,位置可能不同,如ubuntu 的不是/etc/sysconfig/docker,而是/etc/default/docker
vi /etc/systemd/system/docker.service.d/docker.conf


[Service] EnvironmentFile=-/etc/sysconfig/docker ExecStart=/usr/bin/docker -d $OPTIONS \ $DOCKER_STORAGE_OPTIONS \ $DOCKER_NETWORK_OPTIONS \ $BLOCK_REGISTRY \ $INSECURE_REGISTRY


3、修改docker服務啟動預設網路
vi /etc/sysconfig/docker


DOCKER_OPTIONS="--bip=192.168.1.3 --fixed-cidr=192.168.0.0/16"


--bip= 是繫結預設網絡卡docker0的ip
--fixed-cidr=是設定網絡卡docker0的子網網段,這裡因為docker自動管理網段,不是通過dhcp分配,可能會與現有網路ip衝突,儘量選一個空閒的網段


4、重新啟動docker,我發現自定義網橋必須用docker0,不然又會重新建立預設的
service docker restart




三、建立容器,驗證網路互聯
1、啟動一個不帶網路的容器(centos是我使用的映象,自行準備)
docker run --name test --privileged=true -it centos /bin/bash


2、在容器中ifconfig檢視ip,看是否分配的192.168.0.1
然後ping 192.168.1.3 驗證與宿主機互聯
接著ping 192.168.1.2 驗證與win7互聯


3、在宿主機驗證網路
ping 192.168.1.2 驗證宿主機與win7互聯
ping 192.168.0.1 驗證宿主機與容器互聯


4、在win7驗證網路
ping 192.168.1.3 驗證win7與宿主機互聯
ping 192.168.0.1 驗證win7與容器互聯




網路到此搭建完畢,這樣win7就可以使用SSH工具任意連線容器而免去要通過宿主機埠對映的煩惱。
想要通過win7釋出到公網,則可以將公網埠80對映到win7,然後搭建nginx做轉發,win7作為外網前置,方便管理。