docker杂谈

什么是docker

最近工作需要,项目需要做一些底层虚拟化的东西,加之之前“师傅”说过有空弄弄docker,就又拾起来这东西。容器技术是虚拟化的一种,一个容器就可以理解为一个虚拟机。docker就是最火的一种容器技术,容器里边你可以干你任何想干的事情。为什么要弄出容器这么个概念呢,直接vmware workstation里边跑不行吗?答案当然是可以的,但是docker比虚拟机省资源呀,而且适合开发部署时候一条龙服务,诸多优点网上很多,以上就是我对docker以及优点的通俗解释。

一定要打好基础

基础真的非常重要!!!遇到一个新东西,首先是概念,然后是基础,然后是进阶,最后才是折腾出你想要的东西。这个规律不可违背,否则就会走弯路。具体docker来说,镜像和容器这两个概念是docker一切的基础。

废话两句,宿主OS最好选用linux,我用的ubuntu 14.04,或者win10,总感觉Windows下ToolBox不那么好用。

docker Daemon:当你在宿主机安装了docker之后,就有了一个Daemon,我的理解,docker daemon就像一个管理者,替你管理着其中的容器。

docker Image:docker镜像涉及layer的概念,可以想象一下photoshop的层的概念,每一层都有不同的文件,最后的镜像就有由一堆文件组成的,所以当你docker pull的时候,总是看见一个镜像由好多层组成,当你pull下来或者通过dockerfile build出镜像,他就是个固定的东西了。docker images可以查看当前daemon中的镜像。这里有关于Image的详细解释。Image

docker container:要着重理解image和container的区别,container是通过image构建出来的,container有运行态和非运行态,docker ps和docker ps -a就可以分别查看之。每一个docker run都会产生一个容器,在此期间你对该容器所做的修改都将存储在了Container中,如果下次你还想继续使用,那么就应该docker start containerID,而不是run了,这点很重要。

docker基本操作如下图所示:

docker基础操作

单机docker的操作基本如上图所示,上图右边三个工具,docker machine、docker compose、 docker swarm,号称docker三大利器,其作用分别如下:

Machine: 解决的是操作系统异构安装Docker困难的问题,没有Machine的时候,CentOS是一种,Ubuntu又是一种,AWS又是一种。有了Machine,所有的系统都是一样的安装方式。

Swarm: 我们有了Machine就意味着有了docker环境,但是那是单机的,而通常我们的应用都是集群的。这正是Swarm要做的事情,给你提供docker集群环境和调度策略等。

Compose: 有了环境,我们下一步要做什么?部署应用啊。然后我们需要docker run image1、docker run image2…一次一次不厌其烦的重复这些操作,每次都写大量的命令参数。Compose简化了这个流程,只需要把这些内容固化到docker-compose.yml中。

个人感觉docker在集群方面不很方便,集群最后落脚在网络通信,所以docker集群部署不很方便的最主要原因就是网络问题,针对网络问题,也有各种花式解决方案,譬如linux下的工具pipeline、weave等等,swarm用官方的话来说是一种原生集群解决方案。

接下来放一张神图,网上找的docker eco的一张图,可以大体了解这个生态圈。
docker eco

docker中运行容器

根据自己的需求运行各种容器,两种构建方法,一种是通过docker file来构建,一种是直接从docker hub上pull,一般你想到的hub上都有,譬如什么storm、kafka,这两个我都尝试构建了一下,用了docker search中star比较高的ches/kafka等等,感谢作者辛勤奉献。

docker ui 是一个不错的项目,本身运行在一个容器中,监控一个主机的deamon,适合新手使用,给你最直观的理解。
shipyard则可以管理集群,但是部署比较复杂,工具类的东西大家可以按照自己的需求来选择。

总结

七七八八写了一些,没有涉及具体的操作命令,那些都可以从官方doc中找到,只是写了一些个人理解,但是自己觉得也写的很屎,究其原因还是自己水平不够,所以这篇博客就到这儿,再研究研究有了新的想法再写。