docker容器互联并且暴露真实网络

在bridge模式下,连在同一网桥上的容器可以相互通信(若出于安全考虑,也可以禁止它们之间通信,方法是在DOCKER_OPTS变量中设置--icc=false,这样只有使用--link才能使两个容器通信)。

多台物理主机之间的容器互联(暴露容器到真实网络中)

docker  默认的桥接网卡是 docker0 。它只会在本机桥接所有的容器网卡,举例来说容器的虚拟网卡在主机上看一般叫做 vethxxx,而 docker 只是把所有这些网卡桥接在一起

pipework工作原理分析
那么容器到底发生了哪些变化呢?我们docker attach到test1上,发现容器中多了一块eth1的网卡,并且配置了192.168.1.150/24的IP,而且默认路由也改为了192.168.1.1。这些都是pipework帮我们配置的。

·首先pipework检查是否存在br0网桥,若不存在,就自己创建。
  ·创建veth pair设备,用于为容器提供网卡并连接到br0网桥。

·使用docker inspect找到容器在主机中的PID,然后通过PID将容器的网络命名空间链接到/var/run/netns/目录下。这么做的目的是,方便在主机上使用ip netns命令配置容器的网络。因为,在Docker容器中,我们没有权限配置网络环境。

·将之前创建的veth pair设备分别加入容器和网桥中。在容器中的名称默认为eth1,可以通过pipework的-i参数修改该名称。

·然后就是配置新网卡的IP。若在IP地址的后面加上网关地址,那么pipework会重新配置默认路由。这样容器通往外网的流量会经由新配置的eth1出去,而不是通过eth0和docker0。(若想完全抛弃自带的网络设置,在启动容器的时候可以指定--net=none)

以上就是pipework配置Docker网络的过程,这和Docker的bridge模式有着相似的步骤。事实上,Docker在实现上也采用了相同的底层机制。
通过源代码,可以看出,pipework通过封装Linux上的ip、brctl等命令,简化了在复杂场景下对容器连接的操作命令,为我们配置复杂的网络拓扑提供了一个强有力的工具。当然,如果想了解底层的操作,我们也可以直接使用这些Linux命令来完成工作,甚至可以根据自己的需求,添加额外的功能。

2 单主机Docker容器VLAN划分
pipework不仅可以使用Linux bridge连接Docker容器,还可以与OpenVswitch结合,实现Docker容器的VLAN划分。下面,就来简单演示一下,在单机环境下,如何实现Docker容器间的二层隔离。

使用link参数可以让容器之间安全的进行交换

创建容器使用--name指定自定义容器名

然后创建一个新的容器自定义为web,并将它连接到test1中

然后使用docker  ps ---no-trunc 查看容器的连接状态

--link name:alias name是要链接的容器名,alias是链接的别名

进入容器查看两个容器是否链接  查看hosts文件

有两个hosts证明成功了,第一个是web容器,第二个是test1容器的ip和主机名

实现多台物理机之间的容器互联

不同容器之间通讯可以使用pipework工具

使用yum安装下面相关依赖包

设置桥接网络

在network-scripts目录下添加虚拟主机文件

写入下面内容

重启network服务 systemctl  restart  network

使用brctl命令查看虚拟网桥

修改配置文件,指向br0,需要停止docker

启动docker,创建容器时最好在加上--net-none,避免ip发生冲突

使用pipework指定网卡地址

使用外网ping容器ip

实现单主机docker容器VLAN划分

安装openvswitch,并安装相关依赖包

创建yum源

解压与打包

查看目录是否有两个文件

安装里面的第一个软件包

启动openvswitch

查看状态

创建交换机 绑定物理接口(需要把br0接口删除)

启动ovs1

查看地址

在主机上创建4个docker容器

将test划分到vlan中

进入容器后ping其他vlan,正确的test1能通test2,不通test3,test4

时间: 2024-10-18 09:52:15

docker容器互联并且暴露真实网络的相关文章

使用weave实现跨主机docker容器互联

关于weave的原理不做细致的说明,如果想了解weave可以登陆官网:https://www.weave.works/ In this post,使用阿里云3台ECS服务器进行weave搭建,并测试搭建weave后,跨主机docker容器的连通性. 场景:10.162.204.252 node110.171.31.181 node210.171.19.139 node3 一.在所有需要跨主机互通的docker宿主机安装weave.1.在node1上安装weave,并启动weave.wget -O

[docker]容器互联的两种方式

声明: 本博客欢迎转发,但请保留原作者信息! 博客地址:http://blog.csdn.net/halcyonbaby 内容系本人学习.研究和总结,如有雷同,实属荣幸! link方式 通过link方式创建容器,然后我们可以使用被link容器的别名进行访问.从而解除应用对IP的依赖.不幸的是,link方式只能解决单机容器间的互联.多机情况下,容器的互联需要其他的方式. [[email protected] ~]# docker run -i -t mysql:latest /bin/bash [

docker容器互联

link方式 http://blog.csdn.net/halcyonbaby/article/details/42112325 通过link方式创建容器,然后我们可以使用被link容器的别名进行访问.从而解除应用对IP的依赖.不幸的是,link方式只能解决单机容器间的互联.多机情况下,容器的互联需要其他的方式. [[email protected] ~]# docker run -i -t mysql:latest /bin/bash [email protected]:/usr/local/

docker容器互联 (.net core容器,mysql容器)

背景 有两个容器一个运行的.net core的项目 另一个运行的mysql的数据 并且这两个容器在同一个机子上(或者局域网),那么理论上.net core的项目去访问mysql是可以走内网的 但是容器是互相隔离的,所以要互相访问那么就要利用docker的network方式去连接 1.创建bridge docker network create -d bridge mybridge 查看bridge docker inspect user_api01 2.确认数据库在运行,使用bridge去run

使用openvswitch实现跨主机docker容器互联

安装openvswitch的步骤请参考上一篇文章:http://www.cnblogs.com/xkops/p/5568167.html 环境:192.168.3.201 node1192.168.3.202 node2 1.在node1上创建网桥obr0,然后增加端口gre0到obr0.ovs-vsctl add-br obr0ovs-vsctl add-port obr0 gre0ovs-vsctl set interface gre0 type=gre options:remote_ip=

Docker 数据卷与容器互联(3)

title: Docker 数据卷与容器互联(3) date: 2018-12-15 14:50:42 tags: Docker categories: Docker copyright: true --- Docker是基于Go语言实现的开源容器项目,Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口,Docker诞生于2013年年初,最初发起者是dotCloud公司.

配置Docker多台宿主机间的容器互联

如果要在生产和测试环境大规模采用docker技术,首先就需要解决不同物理机建的docker容器互联问题.本文介绍在centos7环境下采用open vswitch实现不同物理服务器上的docker容器互联的配置. 环境介绍: Server1: 192.168.115.5/24 Server2: 192.168.115.6/24 一:在Server1和Server2上分别用rpm方式安装docker并启动服务 # yum list *docker* # yum -y install docker

Docker   none模式、DNS/HOSTNAME自定义、容器互联(网络三)

玩转Docker必要要了解的网络基础知识: 机器需要一个网络接口来发送和接受数据包,路由表来定义如何到达哪些地址段.这里的网 络接口可以不是物理接口.事实上,每个 linux  机器上的 lo   环回接口( docker容器中也 有)就是一个完全的 linux 内核虚拟接口,它直接复制发送缓存中的数据包到接收缓存中. docker 让宿主主机和容器使用特殊的虚拟接口来通信 -- 通信的 2 端叫" peers",他们 在主机内核中连接在一起,所以能够相互通信.创建他们很简单,前面介绍

Docker使用自定义网络实现容器互联

目录 容器互联 步骤 新建网络 连接容器 测试连接 添加已经运行的容器到自定义网络 容器互联 随着 Docker 网络的完善,强烈建议大家将容器加入自定义的 Docker 网络来实现互联,而不是使用 --link 参数 步骤 新建网络 docker network create -d bridge my-net 连接容器 docker run -it --rm --name busybox1 --network my-net busybox sh docker run -it --rm --na