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

简介: 2.docker跨宿主机通讯2.1.macvlan创建网络语法格式docker network create --driver 网络类型 --subnet 网段 --gateway 网关 -o parent=通讯网卡 网络名参数docker network 创建网络的关键字,必须有create 创建一个网络ls 列出创建的所有网络rm 删除一个网络connect 连接一个网络–dirver 指定要创建的网络类型–subnet 指定网段– gateway 指定网关-o parent 在哪块网卡上虚拟出多个网卡

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.环境规划

image.png

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的参数

image.png

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

image.png

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

[root@docker01 ~]# docker network disconnect  -f overlay_1   ssh_3
disconnect表示端口一个容器和某个网络的连接
[root@docker01 ~]# docker network rm overlay_1 
overlay_1
目录
相关文章
|
NoSQL 关系型数据库 Redis
Docker的通俗理解和通过宿主机端口访问Redis容器的实例
本文目标:引导初学者入门Docker,理解镜像、容器和宿主机概念,学习常用Docker命令,特别是如何创建并从Redis容器通过宿主机端口访问。 关键点: - Docker核心:镜像(类)、容器(实例)、宿主机(运行环境)。 - `docker pull` 拉取镜像,如 `redis:3.0`。 - `docker run -d --name` 后台运行容器,如 `my-redis`。 - `-p` 参数做端口映射,如 `6379:6379`。 - `docker exec -it` 交互式进入容器,如 `bash` 或执行命令。
729 4
|
Cloud Native 网络安全 数据安全/隐私保护
【云原生】Docker网络Overlay搭建Consul实现跨主机通信
【云原生】Docker网络Overlay搭建Consul实现跨主机通信
1182 0
|
NoSQL 应用服务中间件 Redis
Docker跨宿主机容器通信-通过网络跨宿主机互联
这篇文章介绍了Docker容器跨宿主机通信的实现方法,包括Docker的四种网络模式(host、none、container、bridge)以及如何通过修改网络配置和添加路由规则来实现不同宿主机上的容器之间的互联。
1523 0
Docker跨宿主机容器通信-通过网络跨宿主机互联
|
应用服务中间件 nginx Docker
Docker同一台宿主机容器通信-通过容器名称互联
本文详细介绍了如何通过容器名称实现同一宿主机上容器间的互联,并提供了实战案例。首先,文章解释了容器间通过自定义名称访问的原理,随后演示了创建并连接Tomcat与Nginx容器的具体步骤。此外,还讨论了配置中可能出现的问题及解决方案,包括避免硬编码IP地址和使用自定义容器别名来增强系统的灵活性与可维护性。通过这些实践,展示了如何高效地配置容器间通信,确保服务稳定可靠。
1032 1
Docker同一台宿主机容器通信-通过容器名称互联
|
Kubernetes 网络安全 网络架构
Docker不同宿主机网络打通
【8月更文挑战第20天】在不同宿主机上打通Docker网络可通过多种方法:1) 使用Docker原生的Overlay或Macvlan网络驱动实现跨主机通信,如Overlay网络利用VXLAN技术连接多台宿主机,Macvlan则让容器直接接入物理网络;2) 利用第三方工具如Weave Net或Flannel构建虚拟网络,Weave Net简化网络配置,Flannel则适用于Kubernetes环境并通过UDP封装数据包实现通信。实施前需确保宿主机间网络畅通且防火墙设置适当。
858 2
|
Kubernetes Docker 容器
【Docker专栏】Docker网络配置详解:从Bridge到Overlay
【5月更文挑战第7天】本文介绍了Docker的四种网络类型:Bridge(默认,每个容器连接虚拟桥)、Host(容器共享宿主机网络命名空间)、Overlay(跨宿主机通信,适合集群环境)和Macvlan(容器直接连接物理网络)。Bridge网络适用于同主机通信,而Overlay适合多主机集群。Host网络缺乏隔离,Macvlan则让容器直接连到外部网络。理解这些网络类型有助于优化Docker容器的网络配置。
1218 8
【Docker专栏】Docker网络配置详解:从Bridge到Overlay
|
存储 安全 数据中心
【Docker 专栏】Docker 容器与宿主机的资源隔离机制
【5月更文挑战第8天】Docker容器利用Namespace和Cgroups实现资源隔离,保证CPU、内存、网络和存储的独立,提升资源利用率和系统安全性。资源隔离有助于简化应用部署与管理,但也带来资源竞争、监控管理及安全挑战。理解并善用资源隔离机制能实现更高效、安全的容器运行。随着技术进步,Docker容器资源隔离将持续优化。
1591 2
【Docker 专栏】Docker 容器与宿主机的资源隔离机制
|
Kubernetes 安全 网络安全
Docker不同宿主机网络打通
【8月更文挑战第18天】在Docker中实现不同宿主机间的网络互联有多种方法:1) 使用Docker原生的Overlay与Macvlan网络。Overlay网络让容器跨主机通信,通过简单配置即可搭建;Macvlan则允许容器直接接入物理网络,实现高效通信。2) 利用第三方插件如Flannel和Calico,它们不仅支持跨主机网络,还提供高级特性如网络策略管理。无论选用哪种方案,均需确保宿主机间网络通畅,并适当配置防火墙以保障容器间的顺畅通信。
1258 0
|
Linux Docker 容器
更改docker容器中的时间而不影响宿主机
更改docker容器中的时间而不影响宿主机
|
Docker 容器
Docker cp 将宿主机上的文件复制到容器中
Docker cp 将宿主机上的文件复制到容器中
206 0

热门文章

最新文章