win7用虛機搭建docker開發測試環境的網路配置,免去埠對映煩惱
阿新 • • 發佈:2019-01-08
之前有寫過一篇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作為外網前置,方便管理。
如果我們是在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作為外網前置,方便管理。