Docker多台宿主机间的容器互联-centos7

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介:


如果要在生产和测试环境大规模采用docker技术,首先就需要解决不同物理机建的docker容器互联问题。本文介绍在centos7环境下采用open vswitch实现不同物理服务器上的docker容器互联的配置。

 

环境介绍:

Server1: 192.168.115.5/24  

Server2: 192.168.115.6/24 

一:在Server1Server2上分别用rpm方式安装docker并启动服务

# yum list *docker*

# yum -y install docker

# service docker start

Redirecting to /bin/systemctl start  docker.service

wKiom1byUtyCKH9NAADMoO1wiOI697.png

Server1Server2上分别安装open vswitch

# yum -y install wget openssl-devel kernel-devel

# yum groupinstall "Development Tools"

$ wget http://openvswitch.org/releases/openvswitch-2.3.0.tar.gz

$ tar -zxvpf openvswitch-2.3.0.tar.gz 

$ mkdir -p ~/rpmbuild/SOURCES

$ sed 's/openvswitch-kmod, //g' openvswitch-2.3.0/rhel/openvswitch.spec > openvswitch-2.3.0/rhel/openvswitch_no_kmod.spec

$ cp openvswitch-2.3.0.tar.gz rpmbuild/SOURCES/

  

$ rpmbuild -bb --without check ~/openvswitch-2.3.0/rhel/openvswitch_no_kmod.spec

  

$ exit

  

# yum localinstall ~/rpmbuild/RPMS/x86_64/openvswitch-2.3.0-1.x86_64.rpm

  

#  mkdir /etc/openvswitch

# setenforce 0

  

# systemctl start openvswitch.service

# systemctl  status openvswitch.service -l

wKioL1byU5CRjyBJAAan89qWSpw628.png


三:在Server1Server2上建立OVS Bridge并配置路由

修改文件 /etc/docker/daemon.json 添加内容 "bip": "ip/netmask" [ 切勿与宿主机同网段 ] 为172.17.1.1/24

wKiom1m2TEWQoGrxAAAJXfjthR8156.png

重启docker服务

Server1: docker容器内网ip网段172.17.1.0/24

# cat /proc/sys/net/ipv4/ip_forward 

1

# ovs-vsctl add-br obr0

# ovs-vsctl add-port obr0 gre0 -- set Interface gre0 type=gre options:remote_ip=192.168.115.5

  

 # brctl addbr kbr0

 # brctl addif kbr0 obr0

 # ip link set dev docker0 down

 # ip link del dev docker0

  

# vi /etc/sysconfig/network-scripts/ifcfg-kbr0

DEVICE=kbr0

ONBOOT=yes

BOOTPROTO=static

IPADDR=172.17.1.1

NETMASK=255.255.255.0

GATEWAY=172.17.1.0

USERCTL=no

TYPE=Bridge

IPV6INIT=no

  

# cat /etc/sysconfig/network-scripts/route-ens32 

172.17.2.0/24 via 192.168.115.6 dev ens32

# systemctl  restart network.service

wKioL1byU6vCbFihAAaxsSAhWro434.png

 

修改文件 /etc/docker/daemon.json 添加内容 "bip": "ip/netmask" [ 切勿与宿主机同网段 ] 为172.17.2.1/24

重启docker服务



Server2: docker容器内网ip网段172.17.2.0/24

# cat /proc/sys/net/ipv4/ip_forward 

1

# ovs-vsctl add-br obr0

# ovs-vsctl add-port obr0 gre0 -- set Interface gre0 type=gre options:remote_ip=192.168.115.6

  

 # brctl addbr kbr0

 # brctl addif kbr0 obr0

 # ip link set dev docker0 down

 # ip link del dev docker0

  

# vi /etc/sysconfig/network-scripts/ifcfg-kbr0

DEVICE=kbr0

ONBOOT=yes

BOOTPROTO=static

IPADDR=172.17.2.1

NETMASK=255.255.255.0

GATEWAY=172.17.2.0

USERCTL=no

TYPE=Bridge

IPV6INIT=no

  

# cat /etc/sysconfig/network-scripts/route-ens32 

172.17.1.0/24 via 192.168.115.5 dev ens32

  

# systemctl  restart network.service

wKiom1byUyTzTb-uAAZ-73U4Ono547.png

:启动容器测试

Server1和Server2上修改docker启动的虚拟网卡绑定为kbr0,重启docker进程

wKioL1byU8mzH9uVAADSfLd3R8c622.png

Server1Server2上修改docker启动的虚拟网卡绑定为kbr0,重启docker进程


wKioL1byVIPCI3tmAAQQNzi4bSc590.png

Server2:

# docker run -idt --name test2 daocloud.io/centos /bin/bash

wKiom1byVBWTFd8QAAZ5lPtNupQ506.pngServer1:

wKiom1byVD2S8TKqAAL9fzNdifY374.png

如果ping不同查看宿主机的路由情况route –n是否有对端主机的路由,如果没有手动添加route add –net 172.17.2.0/24 gw 192.168.115.6   即可


本文转自 转身撞墙角 51CTO博客,原文链接:http://blog.51cto.com/chentianwang/1754374



相关文章
|
5天前
|
Shell Linux Docker
docker常用命令大全(基础、镜像、容器、数据卷)
这些命令仅仅是 Docker 命令行工具的冰山一角,但对于日常操作来说已经非常全面。通过熟练地使用这些基础命令,用户可以有效地管理 Docker 的镜像、容器、数据卷和网络。随着用户对 Docker 的深入使用,更高级的命令和选项将会变得必需,但上面列出的命令已经为用户提供了一个坚实的起点。对于初学者来说,理解和掌握这些常用命令是深入学习 Docker 的基础。
69 5
docker常用命令大全(基础、镜像、容器、数据卷)
|
2天前
|
Ubuntu Devops 云计算
ubuntu docker-compose编排容器并且设置自启动
使用Docker Compose编排容器并设置为Ubuntu系统的自启动服务,不仅优化了应用的部署流程,也提升了运行时的可管理性和可靠性。通过上述步骤,您可以轻松实现这一目标。维护此类服务时,记得定期检查和更新您的 `docker-compose.yml`文件,确保所有的服务都符合当前的业务需求和技术标准。在云计算和微服务架构不断演进的今天,掌握Docker Compose等工具对于DevOps和软件工程师来说,变得尤为重要。
12 3
|
5天前
|
弹性计算 运维 应用服务中间件
容器的优势,在Docker中运行Tomcat
摘要:了解Docker与虚拟机的区别:虚拟机使用Hypervisor创建完整操作系统,而容器通过namespace和cgroup实现轻量级隔离,共享主机内核。Docker启动快、资源利用率高,适合快速部署和跨平台移植。但安全性相对较低。示例介绍了如何通过Docker搜索、拉取官方Tomcat镜像并运行容器,最后验证Tomcat服务的正常运行。
|
1天前
|
运维 Kubernetes Docker
|
3天前
|
Kubernetes 调度 Docker
|
7天前
|
Docker Python 容器
容器化技术,特别是Docker,已经成为现代软件开发和部署的重要工具。
容器化技术,特别是Docker,已经成为现代软件开发和部署的重要工具。
|
7天前
|
Kubernetes 持续交付 开发者
微软Azure云上部署Docker容器的技术实践
【7月更文挑战第15天】Docker与Azure的集成,为开发者提供了一种快速、可扩展和可维护的应用部署方式。通过在Azure平台上部署Docker容器,开发者可以充分利用Azure丰富的云服务和强大的基础设施,实现应用的快速迭代和高效运行。未来,随着Docker和Azure的不断发展和集成,我们可以期待更加便捷和高效的容器化应用部署体验。
|
6天前
|
安全 网络协议 云计算
Docker容器网络配置详解
【7月更文挑战第16天】Docker的网络配置是实现容器间以及容器与外部网络通信的基础。通过选择合适的网络模式和配置选项,可以构建高效、安全、可扩展的Docker网络解决方案。
|
6天前
|
Java Scala 流计算
实时计算 Flink版产品使用问题之Docker镜像中的Java路径和容器内的Java路径不一致,是什么导致的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6天前
|
运维 Ubuntu Docker
Docker镜像和容器使用
【7月更文挑战第2天】Docker 概要:Docker 镜像是只读模板,包含运行应用的环境和代码,像蓝图一样。构建镜像可通过基于现有镜像(如 Ubuntu)安装软件后提交,或使用 Dockerfile 定义构建过程。Docker 容器是镜像的运行时实例,`docker run` 命令可创建并运行容器。常用容器操作包括启动/停止、状态检查和交互式进入。通过端口映射,容器服务可从主机访问,促进应用部署和管理的便捷性。