利用 Docker 在不同宿主机做 CentOS 系统容器


利用 Docker 在不同宿主机做 CentOS 系统容器

文章插图
作者 | 于先森2017
责编 | 伍杏玲
出品 | CSDN博客
最近公司新接到一个项目,惯例是通过技术架构、业务需求、用户量还有以往的经验大概评估出一份资源配置表格提供给客户,让客户参考采购的服务器资源 。但这次客户根本没有根据我们提供的参考表格来,而是直接就提供给我们一些高配置的服务器实例,实例数与我们预期的少了很多,但配置相对的提高了很多,本着客户是上帝的原则,我们只能自己针对服务器做虚拟化 。
我为什么选择用Docker虚拟化服务器?
之前一直是在windows系统上做虚拟机,在linux系统上虚拟化服务器还是第一次,更何况这个Linux系统是没有图形界面的 。在虚拟化服务器之前我也查询资料做过很多技术比较,最终选择使用Docker来虚拟化服务器,具体总结优势无非以下几点:
1、Docker创建的容器启动速度快,秒级启动 。
Docker管理容器操作(start、stop 、rm 、restart等等) 都是以秒或毫秒为单位的 。
【利用 Docker 在不同宿主机做 CentOS 系统容器】2、Docker可以基于创建的镜像进行弹性扩展 。
创建容器并且根据自己的需求配置好容器后提交镜像到仓库,等到需要扩展容器的时候可拉取镜像启动相同的容器 。
3、Docker创建的容器较轻量级
我可以在一台服务器上启动很多容器,如果只是用到某个服务的话,你无需虚拟整套系统版本 。当然本文目的是虚拟出一整套系统的运行环境,所以就另当别论了 。
4、Docker开源免费
开源的,免费的,低成本的,这就不用我多说了 。
Docker的安装
Docker的安装这个其实我不必多说什么,网上一搜一大堆 。但是有几点我需要说明下:
1、Docker存储数据位置及镜像存储位置
默认情况下Docker是将数据存储在/var/lib/docker路径下的,如果你系统盘的磁盘空间比较小,那你就需要修改Docker的数据存储路径了,可通过如下命令查看:
sudodocker info| grep "Docker Root Dir"
修改方法就是先停掉Docker服务,然后在/etc/docker/路径下创建一个daemon.json文件,在文件里加入如下文本:
{
"graph": "/home/docker"
}
重启Docker,再次查看Docker存储路径是否已经修改,如果不成功请自行百度查找,修改方法不止这一种 。
2、拉取私有仓库镜像
这个私有仓库不是Docker收费版的那个,而是针对自己公司搭建的私有仓库 。当你想拉取私有仓库镜像的时候,你需要配置私有仓库的IP和端口号,目的是让Docker信任你的私有仓库 。具体步骤还是先关闭Docker服务,然后修改daemon.json文件,如下:
{
"graph": "/home/docker",
"insecure-registries":[ "192.168.10.123:5000"]
}
重启Docker,此时你就可以拉取你私有仓库的镜像了 。
Docker容器在不同宿主机间通信
在说这个之前我先大概说下Docker网络配置,Docker安装后会自动创建3种网络:bridge、host、none,这三种网络模式的详细讲解我就不说了,因为太占篇幅,我就大概讲下我的理解吧 。如下:
1、bridge模式
我理解就是Docker守护进程启动时会在宿主机上创建一个docker0虚拟网桥,这个网桥的作用就相当于一个交互机,该宿主机上的所有容器都是通过这个虚拟网桥连接外部网络的,docker0虚拟网桥的IP就相当于该宿主机上所有容器的默认网关 。
当创建一个新容器时Docker会在宿主机上创建一对虚拟网卡veth pair设备,并且将veth pair设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在宿主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入到docker0网桥中 。
该模式是Docker创建容器的默认模式,如果想让外部网络访问到容器中的服务,就是需针对端口做映射,归根究底它实际是在iptables做了DNAT规则,实现端口转发功能 。本文也是使用的这个模式 。
根据我使用这么长时间的经验来看,这种模式的缺点就是需要事先规划好容器哪些端口该做映射 。网上也有教在容器创建好后给容器增添映射端口,但是有的不靠谱儿,有的则是需要修改Docker生成的配置文件,但是如果像我这种构建的是整套系统运行环境,修改配置后重启可能有些服务就需要重新配置了,比如集群相关的服务 。
2、host模式
这种模式其实就是和宿主机共用一套网路环境,它使用的IP就是宿主机的IP,它使用的端口也是宿主机的端口,网络的隔离性不好,我没有使用它的根本原因也正是它的隔离性,因为我所使用的宿主机上是存在两台系统运行环境的,或多或少的会出现端口冲突问题 。


推荐阅读