docker基础概念总结

为了简化部署流程,调研了Docker容器技术,总结如下。


Docker容器技术相较于传统的虚拟机技术,属于轻量级的虚拟化技术,性能也相对较好。

Docker自身并不提供容器技术;它隐藏了直接在容器软件上操作的复杂性。

Docker容器8个方面的独立性:

  1. PID空间——进程标识
  2. UTS空间——主机和域
  3. MNT空间——文件系统访问和结构
  4. IPC空间——基于共享内存的进程间通信
  5. NET空间——网络访问和结构
  6. USR空间——用户名和标识
  7. chroot()——控制文件系统根位置
  8. cgroups——资源保护

以上是Docker提供的几个隔离性,通过这些隔离,保证了各个容器的相对独立性。以下是对Docker中一些比较重要的概念的一些总结:


1. 卷管理:

(1)最简单的方式就是Docker自己管理的卷,这种方式直接把数据和容器本身绑定到一起了,和所在的宿主机没有关系,提供了比较强的隔离性。可以创建一个专门用于存储的Docker实例,暴露一些挂载点,其它的Docker实例就可以使用这个存储专用Docker实例中的数据了,可以用这个特征来提供多态实例(当然,有更好的方式);

(2)其次,可以绑定宿主机的挂载卷,这种方式,将容器和宿主机的文件系统联系在一起了,如果另一个容器也挂到了宿主机相同的挂载卷上,就会产生冲突;

两种方式各有适用场景,根据自己的实际需要选择。


2. 网络:

有好几个层级,当然实际能用的也就那么一两个,并且新的版本中独立出来的docker network命令使Docker网络的易用性有了大幅度提升。

(1)封闭容器(--net none),顾名思义,只有一个loopback网络接口,基本没有什么用处。

(2)桥接容器(--net bridge),提供了与宿主机的网络打通的能力,在宿主机上可以通过Docker实例的IP地址访问这台宿主机上的所有Docker实例。

(3)开放容器(--net host),这个就直接使用了宿主机的网络栈了,这时,容器就可以访问宿主机所在的局域网的所有的机器了。

(4)共享容器(--net container:container_id_or_name),可以在启动容器的时候共享其它容器实例的网络栈(和共享宿主机的网络栈对比一下)。

(5)docker network,可以设置overlay的网络,它为网络提供了更高层的抽象,高到咱们可以在两个机房通过公网通信搭建一个虚拟局域网,Cool。。。

Docker容器实例启动的时候,可以设置dns服务器(8.8.8.8什么的),设置dns搜索域(比如yourcompany.com),映射到主机的端口,也可以设置分配给容器的IP地址范围,设置MTU,或者更甚可以直接设置成直接使用自己的Bridge口,而不用默认的docker0。


3. 设备

可以通过在启动容器的时候 --device选项来挂在宿主机上相应的设备,比如摄像头,打印机什么的,这样在容器实例之内也可以使用这些设备了。


4. CPU隔离

可以通过--cpu-shares来设置本容器的使用的CPU时钟周期的相应的权重,这种方法的好处是,如果其它的系统进程很清闲,它可以利用多余的CPU性能;

另外一种是通过--cpuset-cpus可以指定使用哪些CPU(核或虚拟核的ID),然后这个容器就使用这些CPU来计算了。


5. 内存隔离

上面说的几个隔离性中,就包含了IPC空间的隔离。也就是说默认情况下,各个实例的内存空间实际上是隔离的。可以通过--memory来限制本容器使用的最大内存量。要打通两个实例的IPC空间,可以通过--ipc container:container_id_or_name来使用另一个容器的IPC空间,当然,我们为什么要这样做呢?基本没有必要这样做,只是在遇到非要这样做的时候,知道怎样做就好了。


6. 参数化的容器

通过环境变量来参数化容器,这是多态容器的最好方式。通过--env来指定单独的环境变量,或者使用--evn-file来制定一个包含多个环境变量的文件就可以达到控制容器状态的目的。这个对于开发自动化部署的技术是非常非常合适的。


7. docker-compose

这个东西主要是通过一个docker-compose.yml文件,来管理多个容器,它能够检测到多个容器之间的依赖性,并且能够方便地控制某种实例的个数,方便容器数量的伸缩。但是我并不感觉这个东西有多大用处,在单宿主机上用一下还是挺方便的。


8. docker-machine

这个基本上是一个模拟多宿主机的命令行工具,它可以使用virtualbox或者其它一些云服务(AWS?)作为backend来启动相应的虚拟机,然后用这些虚拟机实例作为docker的宿主机,这个结合AWS等云服务的话,还是比较不错的工具的,可以方便Docker的部署和使用。

使用virtualbox作为backend的时候,需要开启BIOS的CPU VT技术,否则虚拟机是启动不了的。


9. swarm

这个基本上是一个多宿主机管理工具,它可以在一组宿主机上开启实例,就像在一台宿主机上一样。它有几种不同的均衡方式:随机(Random),最大使用率(Binpack 对一个宿主机性能榨干之后,再使用下个),还有一个是Docker实例数量尽可能均衡(Spread,平均主义)。


Docker用来做自动化部署和统一的开发环境是非常适合的,它保证了线上和开发环境的一致性,对于方便开发和部署非常有意义。



猜你喜欢

转载自blog.csdn.net/cnweike/article/details/50435229
今日推荐