如何在云计算基础架构平台中创建云主机
138
2023-10-25
【摘要】 本书摘自《基于Kubernetes的容器云平台实战》一书中第1章,第4节,由陆平、左奇、付光和张晗等编著。
1.4.3 容器网络
不得不说,容器网络是一个很大的话题,这里很难完全展开,下面仅仅对Docker 中容 器的构建方式进行简单的介绍。需要注意的是,这里描述的仅仅是Docker 中的处理模式, 并不代表容器网络只能采用这种方式构建,比如在Kubernetes 中采用的就是另外一种模式。
从Docker命令行上已经知道,用户可以为新创建的容器指定主机名到 IP 的映射,能 够设定DNS 选项,能够设定容器内应用和宿主机上端口之间的映射关系,能够设定容器中 网卡的IP地址、 MAC 地址和本地链路地址,可以通过指定别名的方式在容器中直接访问 其他容器,可以指定 none、bridge、host 以及 container:name 形式的容器网络模式,还能够 引用已经创建好的网络对象的名称。这些功能都是由内部的NetworkController来提供的。
这个内部控制器负责管理 bridge、host、overlay等许多内置驱动,还能够通过HTTP 接 口管理插件形式的远程驱动,通过这些驱动创建出 endpoint 和network 对象。每个 endpoint 可以理解为网卡,而network则可以包含多个endpoint, 并包含更多的网络参数。控制器将 endpoint包装到 sandbox对象中,其中包含路由、 DNS 选项等全部内容,同时有唯一的ID。
Docker在创建容器时,先调用控制器创建sandbox 对象,再调用容器运行时为容器创 建网络命名空间。需要注意,控制器同时还暴露出一个UNIX Domain Socket的监听接口, 在Docker调用容器运行时的请求中,已经包含了访问这个监听接口的命令作为容器创建完 成之前的钩子命令。容器运行时在创建了容器但还没有启动它之前,会执行这个钩子命令, 并且将容器 pid等参数通过网络接口发送到控制器中。采用这种网络传输的方式,宿主机上 即使有多个容器同时向控制器发送请求,控制器也是以串行的方式来执行。
控制器在接收到容器运行时的请求之后,就会通知驱动,将endpoint加入到容器 pid 对应的网络命名空间中,并为容器网络准备好其他资源。这样就为容器启动准备好了网络 环境。
1.4.4 容器存储
可以通过数据卷挂载的方式来实现独立于Docker 容器生命周期的持久化存储。数据卷 可以对应到宿主机上的特殊目录或文件,它们可以被一个或多个容器所使用。直接挂载目 录时, Docker 自动创建匿名数据卷,而要在多个容器之间共享有名数据卷,就要事先加以 创建。创建一个数据卷前,要在文件系统中创建好相应的目录或文件。容器启动运行时采 用-v 参数来挂载匿名数据卷是在容器生命周期之外持久化数据的最简单方法,如下面命令:
docker run -d -P -v /webapp:/home/tomcat/webapp tomcat
当然也可以在命令行上通过多个-v 参数, 一次性为运行的容器挂载多个匿名数据卷, 以及将它们分别挂载到不同的容器目标目录上,具体命令如下:
docker run -d -P -v /webapp:/home/tomcat/webapp -v /log:/home/tomcat/log tomcat
最后,再给出一个直接挂载文件的例子,如下:
docker run --rm -it -v -/.bash history:/.bash histiry ubuntu /bin/bash
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~