docker技术5--docker网络类型+跨主机访问

一.网络类型介绍

1.查看支持网络类型

docker network ls

2.测试使用种类网络类型

docker run network=xxx
none: 无网络模式
bridge: 默认模式,相当于NAT
host: 公用宿主机Network  Namespace
container: 与其他容器公用Network Namespace

3.网络类型设置

3.1 bridge

bridge:
[root@docker ~]# docker run -it --name="c-bri1" --network=bridge centos:6.9 /bin/bash
[root@a7a6b9e891cf /]# ifconfig -a
172.17.0.2
[root@a7a6b9e891cf /]# yum install -y iproute*

[root@docker ~]# docker run -it --name="c-bri2" --network=bridge centos:6.9 /bin/bash
[root@d0e3b71b1f42 /]# ifconfig -a
172.17.0.3
在172.17.0.2的机子:
[root@a7a6b9e891cf /]# ping 172.17.0.3   能通
在10.0.0.100的机子:
[root@docker ~]# ping 172.17.0.2         能通

3.2 host

host:
[root@docker ~]# docker run -it --name="net_host" --network=host centos:6.9 /bin/bash
[root@docker /]#

3.3 none

none:
[root@docker ~]# docker run -it --name="net_none" --network=none centos:6.9 /bin/bash
[root@c199fb50b1ed /]# ifconfig

4.Docker跨主机网络介绍

4.1 Docker跨主机访问-macvlan实现

优点:能够跨docker主机访问
缺点:不能访问外网

[root@docker ~]# docker network create --driver macvlan --subnet=100.0.0.0/24 --gateway=100.0.0.254 -o parent=eth0 macvlan_1
947708a96a45ba7f62b1923d52a7f38a2930c20b904b9eaec282920f1367a579
[root@docker ~]# docker network ls
[root@docker ~]# docker run -it --network macvlan_1 --ip=100.0.0.11 lbz/centos:6.9_sshd  /bin/bash    (镜像要有ssh功能,便于测试,不然ping命令又用不了,又不能上外网,没法进行测试)
[root@b2fcf3713fe1 /]# ifconfig
[root@b2fcf3713fe1 /]# ping 100.0.0.12    能通

[root@docker2 ~]# docker network create --driver macvlan --subnet=100.0.0.0/24 --gateway=100.0.0.254 -o parent=eth0 macvlan_1
4abfedc05f18c8c3cc4ccf7beee698056bff6cca3cfd46b8b7e8623d95a3b351
[root@docker2 ~]# docker network ls
[root@docker2 ~]# docker run -it --network macvlan_1 --ip=100.0.0.12 centos:6.9 /bin/bash
[root@e6461780b8ae /]# ifconfig
 

5.Docker 跨主机访问–overlay实现

相比于macvlan增加的功能:能够上外网

(1)启动consul服务,实现网络的统一-配置管理
在docker和docker2:
[root@docker ~]#docker pull progrium/consul

在docker01:
[root@docker ~]# docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
[root@docker ~]# docker images
progrium/consul                  latest              09ea64205e55        5 years ago         69.4MB
consul: kv类型的存储数据库 (key:value)

在docker01、02上:
[root@docker ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://uoggbpok.mirror.aliyuncs.com"],
"insecure-registries":["10.0.0.100:5000","10.0.0.100"],
"live-restore": true,
"hosts": ["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
"cluster-store": "consul://10.0.0.100:8500",
"cluster-advertise": "10.0.0.100:2376"     #对应自己的主机ip地址
}
[root@docker2 ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://uoggbpok.mirror.aliyuncs.com"],
"insecure-registries":["10.0.0.100:5000","10.0.0.100"],
  ive-restore": true,
"hosts": ["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
"cluster-store": "consul://10.0.0.100:8500",
"cluster-advertise": "10.0.0.101:2376"   #对应自己的主机ip地址
}

vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --containerd=/run/containerd/containerd.sock#找到这一行,并修改成这样

systemctl daemon-reload
systemctl restart docker

2)创建overlay网络
在docker01:
docker network create -d overlay --subnet 172.16.0.0/24 --gateway 172.16.0.254 ol1     #这个网段不能和宿主机上相同,并且随便在一台上执行这个命令即可
[root@docker ~]# docker network ls   #查看容器的网络,出现overlay
2577561b4788        ol1                 overlay             global
在docker02:
[root@docker2 ~]# docker network ls  #查看容器的网络,也出现overlay
2577561b4788        ol1                 overlay             global

3)2边启动容器测试
[root@docker ~]# docker run -it --network ol1 busybox /bin/sh
/ # ifconfig             #得到eth0地址172.16.0.1
/ # ping 172.16.0.2      #验证容器间的通讯
PING 172.16.0.2 (172.16.0.2): 56 data bytes
64 bytes from 172.16.0.2: seq=0 ttl=64 time=1.243 ms
64 bytes from 172.16.0.2: seq=1 ttl=64 time=2.640 ms
/ # ping www.baidu.com   #验证能够上外网
PING www.baidu.com (183.232.231.174): 56 data bytes
64 bytes from 183.232.231.174: seq=0 ttl=127 time=20.574 ms
64 bytes from 183.232.231.174: seq=1 ttl=127 time=57.120 ms

[root@docker2 ~]# docker run -it --network ol1 busybox /bin/sh
/ # ifconfig           #得到eth0地址172.16.0.2
/ # ping 172.16.0.1    #验证容器间的通讯
PING 172.16.0.1 (172.16.0.1): 56 data bytes
64 bytes from 172.16.0.1: seq=0 ttl=64 time=0.892 ms
64 bytes from 172.16.0.1: seq=1 ttl=64 time=1.045 ms
/ # ping www.baidu.com #验证能够上外网
PING www.baidu.com (183.232.231.172): 56 data bytes
64 bytes from 183.232.231.172: seq=0 ttl=127 time=20.923 ms
64 bytes from 183.232.231.172: seq=1 ttl=127 time=27.849 ms

每个容器有两块网卡,eth0实现容器间的通讯,eth1实现容器访问外网
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页