Docker并不抽象,但是描述起来很抽象。
首先
暂且不说它的底层是如何实现的。只需要知道它比虚拟机先进:
- 快速交付和部署
- 高效虚拟化,更高的性能和效率
- 方便迁徙和扩展
- 更简单的管理
这里有个表,或许可以帮你:
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为MB | 一般为GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
其次
了解几个概念就差不多算入门了:
- 仓库(Repository)
- 镜像(Image)
- 容器(Container)
仓库
仓库是Image的来源。互联网上有很多仓库,有国内的、也有国外的,这里我主要说说正统的——Docker Hub,也是默认的,使用的时候或许需要翻个小墙。
在你做好一切准备工作后,只需要docker pull <Image_name>
,就可以从Docker Hub上获取你想要的Image。当然准备工作需要一顿操作,这里不提,可以稍后看看我的另一篇文章。
镜像和容器
我打算把这两个概念放一块描述。如果把镜像当成一个类的话,容器更像是它new出来的一个又一个对象。镜像可以从仓库中获取,容器则是从镜像中生成。
容器的启动和暂停操作有:docker run <Image>
、docker start <Image>
、docker restart <Image>
、docker stop <Image>
。
再次
让我阐述一下我对docker容器本质的理解。
Docker引擎之上可以运行很多镜像从而形成一个的容器,镜像包括操作系统、安装的软件,但形成的容器本质上还是基于linux内核的。于是,你可以通过连接容器(docker attach <container>
)运行shell指令。
好吧,我用一个例子说明。你打算安装一个包含nodejs环境的docker容器,你可以从docker hub上获取操作系统(docker pull <Image>
),比如Ubuntu、CentOS等等,然后创建一个容器(docker run <Image>
),在连接到你的容器,也就是操作系统里,就可以进行安装nodejs的操作了,安装好nodejs后,你可以通过挂载途径把你的nodejs项目放入docker容器里,运行shell指令让项目运行起来,测试无误后,可以通过迁徙的方法把它部署到其它支持docker环境上。
上面的一系列的操作都可以写进一个Dockerfile的文本里,生成一个属于你自己的Image,分享给其他人,别人下载到本机上,可以通过docker build -t <image_name> .
指令构建改docker镜像到本机上。
最后
不知道你四不四弄清楚或者更了解docker了。如果没,推荐一本书给你;如果弄清楚了,分享我自己收集的一份docker指令集给你,有点粗略,因为还没有整理好。