怎么关闭乐2的乐视手机 为你推荐荐的软件,我看着实在太闹心

经常参与各类话题的讨论,发帖内容较有主见
经常帮助其他会员答疑
活跃且尽责职守的版主
站长推荐 /6
about云|新出视频,openstack零基础入门,解决你ping不通外网难题
云计算hadoop视频大全(新增 yarn、flume|storm、hadoop一套视频
视频资料大优惠
大数据零基础由入门到实战
阶段1:hadoop零基础入门基础篇
阶段2:hadoop2入门
阶段3:大数据非hadoop系列课程
阶段4:项目实战篇
阶段5:大数据高级系列应用课程
阶段6:工作实用系列教程
等待验证会员请验证邮箱
新手获取积分方法
Powered by你也许已经知道了,Docker 容器技术是现有的成熟虚拟化技术的一个替代方案。它被企业应用在越来越多的领域中,比如快速部署环境、简化基础设施的配置流程、多客户环境间的互相隔离等等。当你开始在真实的生产环境使用 Docker 容器去部署应用沙箱时,你可能需要用到多个容器部署一套复杂的多层应用系统,其中每个容器负责一个特定的功能(例如负载均衡、LAMP 栈、数据库、UI 等)。
那么问题来了:有多台宿主机,我们事先不知道会在哪台宿主机上创建容器,如果保证在这些宿主机上创建的容器们可以互相联网?
联网技术哪家强?开源方案找 。这个工具可以为你省下不少烦恼。听我的准没错,谁用谁知道。
于是本教程的主题就变成了&如何使用 weave 在不同主机上的 Docker 容器之间设置网络&。
Weave 是如何工作的
让我们先来看看 weave 怎么工作:先创建一个由多个 peer 组成的对等网络,每个 peer 是一个虚拟路由器容器,叫做&weave 路由器&,它们分布在不同的宿主机上。这个对等网络的每个 peer 之间会维持一个 TCP 链接,用于互相交换拓扑信息,它们也会建立 UDP 链接用于容器间通信。一个 weave 路由器通过桥接技术连接到本宿主机上的其他容器。当处于不同宿主机上的两个容器想要通信,一台宿主机上的 weave 路由器通过网桥截获数据包,使用 UDP 协议封装后发给另一台宿主机上的 weave 路由器。
每个 weave 路由器会刷新整个对等网络的拓扑信息,可以称作容器的 MAC 地址(如同交换机的 MAC 地址学习一样获取其他容器的 MAC 地址),因此它可以决定数据包的下一跳是往哪个容器的。weave 能让两个处于不同宿主机的容器进行通信,只要这两台宿主机在 weave 拓扑结构内连到同一个 weave 路由器。另外,weave 路由器还能使用公钥加密技术将 TCP 和 UDP 数据包进行加密。
在使用 weave 之前,你需要在所有宿主机上安装
环境,参考,在 &或 &发行版中安装 Docker。
Docker 环境部署完成后,使用下面的命令安装 weave:
$ wget /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 个赞!
如你所见,weave 是一个很有用的 docker 网络配置工具。这个教程只是它的冰山一角。如果你想进一步玩玩,你可以试试它的以下功能:多跳路由功能,这个在 multi-cloud 环境(LCTT 译注:多云,企业使用多个不同的云服务提供商的产品,比如 IaaS 和 SaaS,来承载不同的业务)下还是很有用的;动态重路由功能是一个很巧妙的容错技术;或者它的分布式 DNS 服务,它允许你为你的容器命名。如果你决定使用这个好东西,欢迎分享你的使用心得。
作者: 译者: 校对:
原创翻译, 荣誉推出Docker容器都是独立的,互相隔离的环境。然而,它们通常只有互相通信时才能发挥作用。
虽然有许多方法可以连接容器们,可是我将并不会试着去将其全部讨论在内。但是在这一系列的方法中,我们将看看那些常用的做法。
虽然看起来是很浅显,但是这对于与Docker成天打交道的朋友来说,理解这些技术及底层的设计理念就显得非常地重要了。
理解这些主题将会:
帮助开发和运维人员探索广泛的容器部署的选择。
让开发和运维人员更自信的着手于微服务(microservice)架构设计。
让开发和运维人员可以较好的编排更复杂的分布式应用程序。
幸运地是,大量的连接选项为容器间通信打开了更为广泛的方法,可以让我们灵活地选择一个架构并能适合任何应用程序的需求。
在这篇文章中,我们将会看一下三个较为古老也是更基本的连接各容器的方法。我们会将这种知识和经验作为基石,然后在下一章节中转移到两种较新,较为简单且更强大的方法。
在我们展示容器间如何被连接之前,我们需要先建立一对容器作为本次的例子。
第一个镜像将是来源于一个简单的Ubuntu操作系统安装。它将扮演一个客户端容器的角色。
首先,我们创建该容器并连接到它。
$ sudo docker run -itd --name=client_setup ubuntu /bin/bash
$ sudo docker attach client_setup
接下来,一旦有了容器内的shell程序,我们就可以运行以下命令:
$ apt-get install curl
如果你看不见shell命令提示符,点击键盘方向区的向上箭头。
当容器安装完毕,执行CTRL+P和CTRL+Q命令退出该容器。
紧接着我们停止并提交该容器。
$ sudo docker stop client_setup
$ sudo docker commit client_setup client_img
现在我们可以使用刚才创建的名为client_img的容器了。
第二个容器我们还是从之前的Ubuntu操作系统的安装上获得。但是这一次,我们将把它修改成一个运行了Apache HTTP的服务器容器。
首先,我们像之前一样建立并且连接到它:
$ sudo docker run -itd --name=server_setup ubuntu /bin/bash
$ sudo docker attach server_setup
然后,一旦我们可以用容器内的shell程序了,就可以能安装Apache的HTTP服务了。
$ apt-get install apache2
当容器安装完毕,执行CTRL+P和CTRL+Q命令退出该容器。
现在我们停止并提交容器:
$ sudo docker stop server_setup
$ sudo docker commit server_setup server_img
那么现在我们就有了两个镜像了,分别是 client_img 和 server_img。
当这些设置好后,我们就可以探索多种的容器间连接的可能性了。
Docker桥接(Bridge)
单个Docker容器是默认地与其他容器和外部网络隔离的。Docker提供了bridge接口,名为docker0,这其实是在安装时就建立好的。
它通过Docker的bridge接口可以让容器间以及容器和主机之间进行通信。
我们可以通过下面的命令来查看一个位于Docker宿主机上的Docker bridge:
$ ifconfig docker0
你可以看到类似如下的输出:
Link encap:Ethernet
HWaddr 02:42:a2:dc:0f:a8
inet addr:172.17.0.1
Bcast:0.0.0.0
Mask:255.255.0.0
inet6 addr: fe80::42:a2ff:fedc:fa8/64 Scope:Link
UP BROADCAST RUNNING MULTICAST
RX packets:1477 errors:0 dropped:0 overruns:0 frame:0
TX packets:2436 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:8 KB)
TX bytes:.6 MB)
该bridge接口在本地一个单独的Docker宿主机上运行,并且它是我们本篇文章所提及的所有三种方法背后的连接机制。在下一章节中,我们将转向overlay接口,这种接口允许把网络容器部署在多个Docker宿主机上。
端口公开(Exposing Ports)
首先,让我们看下如何运行一个容器服务并且公开其80端口(HTTP)给其他容器。
为了这么做,我通过expose命令去运行该容器,这是告诉Docker在运行该容器的时候让其公开特定的端口。当然,被公开的端口是可以被其他容器访问的。
让我们运行server_img并且把该容器命名为server1,公开其80端口:
$ sudo docker run -itd --expose=80 --name=server1 server_img /bin/bash
接下来我们会按依次命名这些容器(server1,server2以及其他)。
然后,连接到容器:
$ sudo docker attach server1
重申一遍,如果你看不见shell命令提示符,可以使用方向键的向上箭头。
启动该容器内的Apache HTTP服务:
$ /etc/init.d/apache2 start
让我们来看下获得的IP地址:
$ ifconfig
Link encap:Ethernet
HWaddr 02:42:ac:11:00:03
inet addr:172.17.0.3
Bcast:0.0.0.0
Mask:255.255.0.0
那么,这样我们就有了172.17.0.3这个IP地址。让我们试一下从一个客户端的容器里去看这些信息吧。
打开第二个终端。
启动名称为client1的容器:
$ sudo docker run -itd --name=client1 client_img /bin/bash
进容器里看一下:
$ sudo docker attach client1
如果你看不见shell命令提示符,可以使用方向键的向上箭头。
让我们来测试一下到server1的连通性:
$ curl 172.17.0.3
如果一切正常,你应该可以看见基于Apache HTTP服务的默认页面。这表明client1容器已经可以与server1容器的HTTP端口正确地建立连接了。
端口绑定(Port Binding)
如果我们希望我们的HTTP服务器公开在主机网络呢,包括主机上的应用及主机网络上的其他机器?在这个方案中,我们需要去将主机端口绑定(bind)至容器端口。
为了让基于Apache的HTTP服务器公开给主机所处的网络,我们需要将该容器的80端口绑定至宿主机上的8080端口。
我们可以按照以下命令来这么做:
$ sudo docker run -itd -p 8080:80 --name=server2 server_img /bin/bash
在这里需要注意的是-p 8080:80选项。
现在,进容器看下:
$ sudo docker attach server2
如果看不见shell的提示符,和之前一样,按方向区的向上箭头,紧接着我们启动该HTTP服务:
$ /etc/init.d/apache2 start
现在,我们可以从宿主系统去访问http://localhost:8080/,同时应该能看见基于Apache HTTP服务的默认页面。
任何在你主机网络内的那些机器都可以访问由你的宿主机所发布出来的8080端口。
容器链接(Linking Containers)
Docker将另一种涉及到的连接各容器的方法称为链接(linking)。
当你将一个容器链接到另一个容器的时候,Docker将通过一些环境变量来关联这些容器之间的信息。
我们可以看一下。
首先,启动该服务器容器。
$ sudo docker run -itd --name=server3 server_img /bin/bash
接着通过以下命令一样去启动客户机容器并链接至服务器容器。
$ sudo docker run -itd --link server3 --name=client3 client_img /bin/bash
请注意我们这里用了–link server3 选项。
接着我们登录到客户机容器看一眼:
$ sudo docker attach client3
然后我们检查一下可用的环境变量:
$ env | grep SERVER3
SERVER3_PORT_80_TCP_PROTO=tcp
SERVER3_PORT=tcp://172.17.0.2:80
SERVER3_PORT_80_TCP_PORT=80
SERVER3_NAME=/client3/server3
SERVER3_PORT_80_TCP=tcp://172.17.0.2:80
SERVER3_PORT_80_TCP_ADDR=172.17.0.2
Docker同样也更新了客户端容器中的/etc/hosts 文件并且将server3作为一个本地主机指向了服务器容器。
为了演示该情况,让我们运行以下命令看一看:
$ curl server3
你应该可以再一次看见那个相同的默认HTML页面了。
在这一系列的第一部分,我们介绍了Docker桥接(bridge)接口,它可以让我们连接同一台宿主机上的各容器。
我们也聊了聊以下三种连接方法:
通过端口公开(exposure)连接
将宿主机端口绑定(bind)至容器端口
通过链接(link)选项去连接两个容器
在第二部分,我们将一睹隔离容器内部的用户定义网络。我们也会介绍overlay接口并且看一眼该如何在多个Docker宿主机之间去将Docker容器连接起来。它甚至可以跨越数据中心和云提供商!
在文章中找不到问题答案?您还可以
热门栏目订阅}

我要回帖

更多关于 京东怎么关闭为你推荐 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信