一、常见隔离方式(yuanjian)
### --- 基础命令说明:
docker network ls // 查看当前可用的网络类型
docker network create -d // 类型 网络空间名称
~~~ 类型分为:
overlay network // 是覆盖型类型;主要是演示在不同的主机之间才可以通信,需要借助辅助工具才可以实现
bridge network // 网桥,
### --- 不同网络空间进行隔离
docker network create -d bridge --subnet "172.26.0.0/16" --gateway "172.26.0.1" my-bridge-network
docker run -d --network=my-bridge-network --name test1 hub.c.163.com/public/centos:6.7-tools
docker run -d --name test2
二、实例操作:
### --- 此刻网络正常的情况下这两个容器之间是可以正常通信的
[root@hub ~]# docker run --name tomcat1 -d tomcat:v1.0
d246c147c5dd762218c8e6c8ff12f24fa98c10deab625e4875bdfb16cf137325
[root@hub ~]# docker run --name tomcat2 -d tomcat:v1.0
c9e63cc5a86d07190f3d814a2c9c6a293d2878931dc45153a42c4d6ad0685d6a
[root@hub ~]# docker exec -it tomcat1 /bin/bash
[root@d246c147c5dd /]# 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
[root@hub ~]# docker exec -it tomcat2 /bin/bash
[root@c9e63cc5a86d /]# ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:03
inet addr:172.17.0.3 Bcast:0.0.0.0 Mask:255.255.0.0
### --- 若不希望这两个容器之间不可以通过网络去访问,
~~~ 隔离开来(把它们划分在不同的网络域之间,就可以实现)
~~~ 创建两套不同的网络lamp和lnmp
[root@hub ~]# docker network create -d bridge lamp
5be92081f3532feef47354ee72aad5db945f9c7ee5306a8b5cc70d54f4a8634e
[root@hub ~]# docker network create -d bridge lnmp
389b6526dfd717fb4c8f1f40d3bb24ea68313a48975aaaa1c0ec4ea1caeaf10f
### --- 此刻它俩之间不可以正常通信了,若是两个项目他们之间是不会受到影响的,
~~~ 且跟外网的通信不受影响。
~~~ 这种案例运用于在不同的项目的时候,把相同的项目放在同一个网络域之间,
~~~ 网络域内可以正常通信,不同网络域隔离。多个项目互相不受影响。
[root@hub ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
5be92081f353 lamp bridge local
389b6526dfd7 lnmp bridge local
[root@hub ~]# docker run --name tomcat11 --network=lamp -d tomcat:v1.0
35019f2d7711d0718797923704efe212d8f72d9139216e6c78b288a0afbcdf1a
[root@hub ~]# docker run --name tomcat111 --network=lnmp -d tomcat:v1.0
5d4488290ad2d845caf61c7612a58845b7a0e73b3ccb291093299e8db714783d
[root@hub ~]# docker exec -it tomcat11 /bin/bash
[root@35019f2d7711 /]# ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:14:00:02
inet addr:172.20.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
[root@hub ~]# docker exec -it tomcat111 /bin/bash
[root@5d4488290ad2 /]# ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:15:00:02
inet addr:172.21.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
三、Linux桥接器进行主机键通讯(linux物理网卡配置桥接br0网络接口)
### --- 为容器设置独立的IP地址,可以被公网直接访问的ip地址,但是容器重启后ip地址失效
~~~ 怎么样让两台不同物理主机的容器实现互相访问。
[root@hub ~]# docker rm -f $( docker ps -a -q ) // 删除所有的容器
~~~ 通过修改配置文件去创建网桥。
[root@hub ~]# cd /etc/sysconfig/network-scripts/
[root@hub network-scripts]# cp -a ifcfg-enp0s3 ifcfg-br0
[root@hub network-scripts]# vim ifcfg-enp0s3
DEVICE=enp0s3
ONBOOT=yes
BOOTPROTO=static
BRIDGE=br0
[root@hub network-scripts]# vim ifcfg-br0
DEVICE=br0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.55
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
TYPE=Bridge
[root@hub network-scripts]# systemctl restart network.service
### --- 通过pipework设置
~~~ 此刻就可以通过公网访问tomcat应用
[root@localhost ~]# yum install -y git
[root@localhost ~]# git clone https://github.com/jpetazzo/pipework
[root@localhost ~]# cp pipework/pipework /usr/local/bin/
[root@localhost ~]# chmod a+x /usr/local/bin/pipework
[root@hub ~]# docker run --name tomcat --net=none -d tomcat:v1.0 // 网络为none,通过pipework设置
51990d0f4b13a31567a151543dedab11d3b0e3c1a126302f70b29f37e6b60128
[root@hub ~]# pipework br0 tomcat 192.168.1.111/24