如何在 Docker 容器之间设置网络

如题所述

在使用 weave 之前,你需要在所有宿主机上安装 Docker 环境,参考这些教程,在 Ubuntu 或 CentOS/Fedora 发行版中安装 Docker。
Docker 环境部署完成后,使用下面的命令安装 weave:
$ wget https://github.com/zettio/weave/releases/download/latest_release/weave$ chmod a+x weave$ sudo cp weave /usr/local/bin

注意你的 PATH 环境变量要包含 /usr/local/bin 这个路径,请在 /etc/profile 文件中加入一行(LCTT 译注:要使环境变量生效,你需要执行这个命令: source /etc/profile):
export PATH="$PATH:/usr/local/bin"

在每台宿主机上重复上面的操作。
Weave 在 TCP 和 UDP 上都使用 6783 端口,如果你的系统开启了防火墙,请确保这两个端口不会被防火墙挡住。
在每台宿主机上启动 Weave 路由器
当你想要让处于在不同宿主机上的容器能够互相通信,第一步要做的就是在每台宿主机上启动 weave 路由器。
第一台宿主机,运行下面的命令,就会创建并开启一个 weave 路由器容器(LCTT 译注:前面说过了,weave 路由器也是一个容器):
$ sudo weave launch

第一次运行这个命令的时候,它会下载一个 weave 镜像,这会花一些时间。下载完成后就会自动运行这个镜像。成功启动后,终端会输出这个 weave 路由器的 ID 号。
下面的命令用于查看路由器状态:
$ sudo weave status

第一个 weave 路由器就绪了,目前为止整个 peer 对等网络中只有一个 peer 成员。
你也可以使用 docker 的命令来查看 weave 路由器的状态:
$ docker ps

第二台宿主机部署步骤稍微有点不同,我们需要为这台宿主机的 weave 路由器指定第一台宿主机的 IP 地址,命令如下:
$ sudo weave launch <first-host-IP-address>

当你查看路由器状态,你会看到两个 peer 成员:当前宿主机和第一个宿主机。

当你开启更多路由器,这个 peer 成员列表会更长。当你新开一个路由器时,要指定前一个宿主机的 IP 地址,请注意不是第一个宿主机的 IP 地址(LCTT 译注:链状结构)。
现在你已经有了一个 weave 网络了,它由位于不同宿主机的 weave 路由器组成。
把不同宿主机上的容器互联起来
接下来要做的就是在不同宿主机上开启 Docker 容器,并使用虚拟网络将它们互联起来。
假设我们创建一个私有网络 10.0.0.0/24 来互联 Docker 容器,并为这些容器随机分配 IP 地址。
如果你想新建一个能加入 weave 网络的容器,你就需要使用 weave 命令来创建,而不是 docker 命令。原因是 weave 命令内部会调用 docker 命令来新建容器然后为它设置网络。
下面的命令是在宿主机 hostA 上建立一个 Ubuntu 容器,然后将它放到 10.0.0.0/24 网络中,分配的 IP 地址为 10.0.0.1:
hostA:~$ sudo weave run 10.0.0.1/24 -t -i ubuntu

成功运行后,终端会显示出容器的 ID 号。你可以使用这个 ID 来访问这个容器:
hostA:~$ docker attach <container-id>

在宿主机 hostB 上,也创建一个 Ubuntu 容器,IP 地址为 10.0.0.2:
hostB:~$ sudo weave run 10.0.0.2/24 -t -i ubuntu

访问下这个容器的控制台:
hostB:~$ docker attach <container-id>

这两个容器能够互相 ping 通,你可以通过容器的控制台检查一下。

如果你检查一下每个容器的网络配置,你会发现有一块名为“ethwe”的网卡,你分配给容器的 IP 地址出现在它们那里(比如这里分别是 10.0.0.1 和 10.0.0.2)。

Weave 的其他高级用法
weave 提供了一些非常巧妙的特性,我在这里作下简单的介绍。
应用分离
使用 weave,你可以创建多个虚拟网络,并为每个网络设置不同的应用。比如你可以为一群容器创建 10.0.0.0/24 网络,为另一群容器创建 10.10.0.0/24 网络,weave 会自动帮你维护这些网络,并将这两个网络互相隔离。另外,你可以灵活地将一个容器从一个网络移到另一个网络而不需要重启容器。举个例子:
首先开启一个容器,运行在 10.0.0.0/24 网络上:
$ sudo weave run 10.0.0.2/24 -t -i ubuntu

然后让它脱离这个网络:
$ sudo weave detach 10.0.0.2/24 <container-id>

最后将它加入到 10.10.0.0/24 网络中:
$ sudo weave attach 10.10.0.2/24 <container-id>

现在这个容器可以与 10.10.0.0/24 网络上的其它容器进行通信了。这在当你创建一个容器而网络信息还不确定时就很有帮助了。
将 weave 网络与宿主机网络整合起来
有时候你想让虚拟网络中的容器能访问物理主机的网络。或者相反,宿主机需要访问容器。为满足这个功能,weave 允许虚拟网络与宿主机网络整合。
举个例子,在宿主机 hostA 上一个容器运行在 10.0.0.0/24 中,运行使用下面的命令:
hostA:~$ sudo weave expose 10.0.0.100/24

这个命令把 IP 地址 10.0.0.100 分配给宿主机 hostA,这样一来宿主机 hostA 也连到了 10.0.0.0/24 网络上了。显然,你在为宿主机选择 IP 地址的时候,需要选一个没有被其他容器使用的地址。
现在 hostA 就可以访问 10.0.0.0/24 上的所有容器了,不管这些容器是否位于 hostA 上。好巧妙的设定啊,32 个赞!
温馨提示:内容为网友见解,仅供参考
无其他回答

详解Docker 容器网络配置
主机模式配置示例:直接使用宿主机网络,容器间隔离文件系统。容器常用操作:查看主机名、指定DNS、映射主机名到IP、开放端口。使用-p选项将容器端口映射到宿主机,实现外部访问容器应用。格式为端口或范围,动态端口由系统分配。使用docker port命令查看映射结果。将容器端口映射到指定IP的随机端口。修改\/etc\/...

Linux下配置Docker容器间网络连接的教程
首先,让我们看下如何运行一个容器服务并且公开其80端口(HTTP)给其他容器。为了这么做,我通过expose命令去运行该容器,这是告诉Docker在运行该容器的时候让其公开特定的端口。当然,被公开的端口是可以被其他容器访问的。让我们运行server_img并且把该容器命名为server1,公开其80端口:代码如下:sudo docke...

Docker设置代理网络的终极方法(全容器透明代理)
1. 在服务器上部署代理软件,设置本机代理端口(http),如10881。确保测试无误。2. 创建新网桥(docker_bridge_2),连接容器与本机代理端口。3. 编辑dockerd的代理配置文件,解决Docker pull代理问题。4. 启动新的docker守护进程。III. 方法 1. **部署代理软件与端口设置**:在服务器上安装代理软...

6 张图详解 Docker 容器网络配置
Docker容器网络配置详解 Docker提供了三种默认网络模式:桥接、container和host,以及none模式。桥接模式是默认选项,它在宿主机上创建名为docker0的虚拟网桥,容器通过分配的Container-IP进行通信。使用-p选项时,Docker利用iptables实现端口映射。container模式允许容器共享已存在的网络命名空间,共享IP和端口范围,...

Docker 容器网络及其配置详解
桥接模式下,Docker进程启动时创建docker0虚拟网桥,主机上启动的容器连接到docker0。容器通过docker0网桥获得IP地址,docker0是容器默认网关。主机创建一对veth设备连接到docker0,容器通过eth0网卡通信。使用docker run -p配置端口映射实现端口转发。桥接模式下容器间通信直接,网络配置简单。容器模式 容器模式...

给Docker配置网络代理
在容器运行阶段,如果你希望容器通过网络代理上网,可以在用户级配置文件~\/.docker\/config.json中设置,这个方法适用于Docker 17.07及以上版本。config.json不仅包含代理设置,还有其他个性化选项。对于个人开发环境,config.json是方便的选择,因为它是自动生效的。但在CI\/CD构建或生产环境中,直接通过-e参数...

Docker 容器网络配置详解
实现容器间的通信,可以借助veth pair,这是一种成对的虚拟端口,能够直接连接不同的网络命名空间。此外,通过iptables规则,可以管理容器的端口映射,控制网络访问。在配置方面,可以通过修改daemon.json文件或使用-H选项来指定docker0桥的网络属性,以及创建自定义网络。最后,了解如何查看和管理容器的网络...

docker network (三):容器中添加网络(指定固定IP)
docker network connect 真好,帮助命令已经给出用法了。 这个时候我运行一个镜像。docker run -it alpine:latest sh 使用 ifconfig 命令,查看当前网络状态。docker run -it --network test_network --ip 172.18.0.101 alpine:latest sh

详解五种Docker容器的网络模式
1. 桥接网络桥接网络在主机和容器间创建虚拟桥梁,容器间能相互通信,与未连接的容器隔绝。每个容器将获得独立的IP地址,通过与主机桥接连接,它们可接入本地网络和互联网,但不会在物理网络上显示。2. 主机网络(Host Network)主机网络模式让容器与主机共享相同的网络设置,不隔离。容器使用主机的端口直接...

在Docker中使用Open vSwitch创建跨主机的容器网络
初始化中心节点 在OVN架构中,需设置一个中心节点用于存储网络定义,选择一台机器作为中心节点,IP为$CENTRAL_IP。使用以下命令启动ovsdb-server,监听TCP端口6640:启动ovn-northd守护进程,用于将Docker存储的网络定义同步到OVN_Southbound:初始化各节点(仅需执行一次)在每个需要启动容器的机器上仅执行一次...

相似回答