程序员在项目部署的时候,经常会出现这种状况:运维人员说项目有问题,运行不起来;然后你就理直气壮的说,项目没一点问题,你来看看我本地,运行的十分良好......结果主要问题被搁置,讨论起无关紧要的责任问题。不过就这个结果,开发人员没错,运维人员也没错,错就错在没有打包起一套项目的运行环境,因为项目到生产环境中运行,不但要有代码,还要有基础运行环境,依赖的包,依赖的其他应用等,这时就要给大家隆重介绍打包神器--Docker,让离开了本地就水土不服的项目,到任何地方都得大写的服!

Docker的定义是:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
看了它的定义,有人就会恍然大悟的说:哦,我还以为多神奇,原来就是个虚拟机呗!这样理解是正确的吗?我们先来看看官方给出的 Docker 容器和传统虚拟机的对比图:

显然恍然大悟的人只是恍然了,大悟的并不是很对,从上图可以很直观的看出来,虚拟机是首先要在宿主机上安装一个能运行虚拟机的软件,然后在软件上面创建虚拟机,再分配内存、分配磁盘、安装 Linux 操作系统等等一系列的操作,传统虚拟机技术是虚拟出一套硬件后,在其上面运行一个完整的操作系统,然后在该系统上面再运行所需要的应用程序;而 Docker 容器内的应用程序是直接运行于宿主的内核,容器没有自己的内核,更加不会对硬件进行虚拟。因此 Docker 容器比传统的虚拟机更为轻便!但是 Docker 容器技术也是参考虚拟机一步一步的迭代优化过来的!
Docker 是一个 Client-Server 的结构!这点可以参考MySQL的设计,先看看官网给出的架构图:

1、Docker 客户端:用户与 Docker 服务交互的窗口,用来进行命令操作;
2、Docker 服务:Docker 后台运行的服务,Docker Deamon 监听着客户端的请求,并且管理着 Docker 的镜像、容器、网络、磁盘等对象。
3、仓库:远程下载常用的镜像,也可以 Push 包到远程仓库(如Redis、Nginx 等镜像)
讲到了这里,又出现了一对比较容易搞混的名词:容器和镜像。

Docker 镜像是一个只读模板,可以用来创建 Docker 容器。镜像是一种轻量级的、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件。它包含运行某个软件所需要的所有的内容,包括代码、运行时、库、环境变量、配置文件等。Docker 的容器是用镜像创建的运行实例,Docker 可以利用容器独立运行一个或一组应用。我们可以使用客户端或者 API 控制容器的启动、开始、停止、删除。每个容器之间是相互隔离的。就像我们在应用开发时,镜像就是我们创建的类,而容器是我们要在业务中用到这个类,要对这个类进行实例化。

我们先用一些简单的命令来初窥一下Docker。
1、docker version:查看 Docker 客户端和服务的版本。

2、docker info:查看 Docker 的基本信息,如有多少容器、多少镜像等。

3、docker --help:查看 Docker 的帮助信息,这个命令可以查看所有 Docker 支持的命令

4、docker images:查看本地主机上所有的镜像。

小伙伴们在自己的电脑上安装一下Docker,来感受一下它的强大吧!
















