虚拟化容器,大数据,DBA,中间件,监控。

Docker跨宿主机通讯macvlan、overlay详解(十一)

11 11月
作者:admin|分类:容器虚拟化

2.docker跨宿主机通讯

2.1.macvlan

  • 创建网络语法格式

    • docker network create --driver 网络类型 --subnet 网段 --gateway 网关 -o parent=通讯网卡 网络名
    • 参数
      • docker network 创建网络的关键字,必须有
      • create 创建一个网络
      • ls 列出创建的所有网络
      • rm 删除一个网络
      • connect 连接一个网络
      • –dirver 指定要创建的网络类型
      • –subnet 指定网段
      • – gateway 指定网关
      • -o parent 在哪块网卡上虚拟出多个网卡
  • 默认情况下只有一个物理网卡,只有一个物理地址,macvlan可以虚拟出多个mac地址,从而去和其他宿主机的容器进行通讯

  • 使用macvlan通讯时必须指定ip,都这默认从第一个ip开始分配

  • 一个网卡只能创建一个网络类型

  • 缺点:不能与宿主机的ip地址进行通讯

2.1.1.创建macvlan

两台docker宿主机都需要做
[root@docker01 ~]#  docker network create --driver macvlan --subnet 192.168.81.0/24 --gateway 192.168.81.2 -o parent=ens33 macvlan1
cc64864688d381d0fac00aba628d704cf99eeec5571a61710701d42693118a1e

[root@docker02 ~]#  docker network create --driver macvlan --subnet 192.168.81.0/24 --gateway 192.168.81.2 -o parent=ens33 macvlan1
cc64864688d381d0fac00aba628d704cf99eeec5571a61710701d42693118a1e

2.1.2.配置容器的ip与其他容器互连

docker1
[root@docker01 ~]# docker run -it --network macvlan1 --ip=192.168.81.10 centos69_ssh_df:v3 /bin/bash

docker2
[root@docker02 ~]# docker run -it --network macvlan1 --ip=192.168.81.20  nginx:latest /bin/bash

2.1.3.测试是否通讯

[root@ae9c8fc4562f /]# ping -c1 192.168.81.20
PING 192.168.81.20 (192.168.81.20) 56(84) bytes of data.
64 bytes from 192.168.81.20: icmp_seq=1 ttl=64 time=0.321 ms

--- 192.168.81.20 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.321/0.321/0.321/0.000 ms
[root@ae9c8fc4562f /]# 

2.1.4.如果网络不能通讯则使用如下解决方法

[root@docker01 ~]# ip link set ens33 promisc on
设置网卡为混杂模式

2.2.overlay

  • macvlan是本地类型,而overlay属于全局类型,把网络信息存储到数据库中,保证分配的ip不会冲突

2.2.1.环境规划

IP地址 角色类型
192.168.81.210 docker01
192.168.81.220 docker02
192.168.81.230 docker-consul

2.2.2.所有机器上配置live-restore参数

[root@nfs ~]# vim /etc/docker/daemon.json 
{
         "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
         "live-restore":true
}

2.2.3.docker-consul上安装consul数据库

[root@docker03 ~]# docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server --bootstrap
参数:
	-d 后台
	-p 端口映射
	-h 指定容器主机名
	--name  容器名称
	-server --bootstrap是consul的参数

在这里插入图片描述

2.2.4.docker01和docker02配置consul数据库地址

docker01
[root@docker01 ~]# vim /etc/docker/daemon.json 
{
        "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
        "live-restore": true,
        "cluster-store": "consul://192.168.81.230:8500",
        "cluster-advertise": "192.168.81.210:2376"
}
[root@docker01 ~]# systemctl restart docker

docker02
[root@docker01 ~]# vim /etc/docker/daemon.json 
{
        "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
        "live-restore": true,
        "cluster-store": "consul://192.168.81.230:8500",
        "cluster-advertise": "192.168.81.220:2376"
}
[root@docker01 ~]# systemctl restart docker

2.2.5.观察页面端

在这里插入图片描述

2.2.6.创建overlay网络

[root@docker01 ~]# docker network create -d overlay overlay_1
b99266d65640b5e45fbf9f2f58ff91864e8d543a43402c23c4e542f9aa595367

2.2.7.运行容器使用overlay网络

docker01上
[root@docker01 ~]# docker run -it --network overlay_1 --name ssh01 centos69_ssh_df:v3 /bin/bash


docker02上
[root@docker02 ~]# docker run -it --network overlay_1 --name ssh02 centos69_ssh_df:v3 /bin/bash


两边都能ping通说明成功

docker network inspect overlay_1都能看到那些容器使用了什么ip

在这里插入图片描述

2.3.docker远程操作其他docker宿主机

在启动文件中开启2375端口
[root@docker01 ~]# vim /usr/lib/systemd/system/docker.service 
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

重载docker
[root@docker01 ~]# systemctl daemon-reload 
[root@docker01 ~]# systemctl restart docker

远程操作
[root@docker01 ~]# docker -H 192.168.81.220 images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
centos69_ssh_df      v3                  2ccb494fa7b0        8 days ago          367MB
jumpserver/jms_all   latest              a42e2037b4a5        2 weeks ago         1.46GB
nginx                latest              2622e6cca7eb        3 weeks ago         132MB
httpd                2.4                 ccbcea8a6757        3 weeks ago         166MB

2.4.删除一个已经使用过的overlay网络

1)已经使用着的overlay删除时会报以下错误

这个报错表示有其他容器再使用overlay_1的网络

[root@docker01 ~]# docker network rm  overlay_1 
Error response from daemon: error while removing network: network overlay_1 id 717bde8563a1dcc6f2e713e90b4a503dce778a63789d08dcaa72b91769bc99e6 has active endpoints

2)使用docker network inspect overlay_1看他的两个参数

[root@docker01 ~]# docker network inspect overlay_1 
找到参数1和参数2

在这里插入图片描述

3)使用docker network disconnect 后面跟着这两个参数执行即可

[root@docker01 ~]# docker network disconnect  -f overlay_1   ssh_3
disconnect表示端口一个容器和某个网络的连接

[root@docker01 ~]# docker network rm overlay_1 
overlay_1
浏览416 评论0
返回
目录
返回
首页
ansible基本概述和安装配置(一) Docker私有仓库registry(九)