Docker
没有官方中文文档(至少目前为止没有,2018/1/1),因此只能经过搜索引擎加上我本身的了解来讲一下。web
Docker
是一个开源的应用容器引擎,让开发者能够打包他们的应用以及依赖包到一个可移植的容器中,而后发布到任何流行的Linux机器上,也能够实现虚拟化,容器是彻底使用沙箱机制,相互之间不会有任何接口。sql
上面内容来自百度百科,可是我印象中,Docker
好像已经支持了Mac和Windows,因此,应该是能够部署在任何机器上了吧。docker
其实简而言之,从功能来讲的话,Docker
是为了解决开发环境/运维环境不一样,发布以及多平台移植不方便等问题而推出的一个虚拟化技术。(我的拙见,不必定正确)数据库
那么Docker
经常使用于哪些场景呢?ubuntu
OpenShift
或Cloud Foundry
平台来搭建本身的PaaS环境。说了一堆,仍是不知道什么是Docker
,暂时先抛开Docker
具体使用了什么技术,有什么指令可使用,先来介绍几个概念。bash
Docker
最重要的两个概念是镜像和容器,除此以外呢,连接和数据卷也很重要。服务器
用过虚拟机的应该都据说过镜像,没用过虚拟机,装系统的话,也应该知道这个词汇。其实Docker
的镜像就和虚拟机的快照相似,可是更轻量级,很是很是轻量。网络
建立Dcoker镜像有不少方式,最经常使用的是在一个现有的镜像下建立一个新的镜像,由于基本上咱们须要的东西都有了公共镜像。每一个镜像都有惟一的ID,做为标识符存在。运维
说完镜像,来讲下容器。一样是虚拟机的例子,注意,这里一直是子啊那虚拟机做类比,为何了,由于Docker
并非真正意义上的虚拟机。curl
从镜像中建立容器,等同于使用快照建立虚拟机,而不一样的呢?是前者更轻量。相同的呢?应用都是有容器运行的,就像虚拟机同样。
For example!你能够下载一个Ubuntu
的镜像,公共安装Django
等应用及其依赖来完成对它的修改,而后从该镜像中建立一个容器,在它启动后运行应用。
容器和虚拟机同样,是隔离的,拥有惟一的识别ID和名称,同时,容器也语序公开特定的端口,以便于对外公开服务。
与虚拟机相比,容器有个很大的差别,就在于它们被设计用来运行单进程,没法很好的模拟一个完整的环境,虽然能够经过相关的实例来启动多个进程,但我以为这样真的没有必要。
容器是设计来运行一个应用的,而非一台机器,这就是它的意义所在。
数据卷能够不受容器生命周期影响进行数据持久化。它们在表面上是容器内的空间,但实际上保存在容器外,从而容许在不影响数据的状况下对容器进行操做。
Docker
运行开发者定义应用部分和数据部分,并提供工具将其分开。使用Docker
时须要作到的思惟变化之一是,容器应该是短暂和一次性的。
卷,是针对容器的,可使用同一个镜像创造多个容器并定义不一样的卷。卷保存在运行Docker
的宿主文件系统中,同时能够用来在容器间共享数据。
容器在启动时,将分配一个随机的私有IP,其余的容器可使用这个IP与其通信。因此说,一,连接提供了容器间的相互通信的渠道;二,容器将共享一个本地网络。
这一点并不在刚才列举的几个概念之中,但也很重要,这是Docker
最重要的特色之一。
说白了,Docker
不容许不可移植的镜像。
Docker
是如何实现这些功能和需求的呢?这里就要说到两个名词:
这是Linux内核功能,它让两件事情变成可能:
最为关键的,是命名空间。一个PID命名空间运行它使用隔离的PID,并与主PID命名空间独立开来,所以你能够在一个PID的命名空间里拥有本身的PID为1的初始化进程。其余的命名空间于此相似,而后你可使用Cgroups建立一个环境,进程能够在其中运行,并于操做系统的其余应用隔离开来,但这里的关键点是,这个环境上的进程使用的是已经加载和运行的内核,所以额外支出与运行其余进程是同样的。
在Union文件系统里,文件系统能够被装载在其余文件系统之上,其结果就是一个分层的积累变化。每一个装载的文件系统表示前一个文件系统以后的变化集合,就像是一个diff
。
因此,当你下载一个镜像,修改它,而后保存成新版本,实际上只是建立了加载在包裹基础镜像的初始层上的一个新的Union文件系统。这也是Docker
镜像轻量级的缘由所在,一般来讲,你的DB,Nginx和Syslog镜像均可以共享同一个Ubuntu基础,每个镜像保存的只是它们须要的功能的基础上的变化。
这里以Ubuntu服务器为例,记得先更新下apt源*(
apt-get update
)
检查curl包有没有安装。
$ which curl
复制代码
返回 curl路径,直接执行获取最新的docker安装包
若是curl没有安装的话,更新apt源以后,安装curl包。
$ sudo apt-get update $ sudo apt-get install curl
复制代码
得到最新的docker安装包。
$ sudo curl -sSL https://get.docker.com/ | sh
复制代码
安装时间较长,耐心等待 or drink a cup of coffer!
确认Docker是否安装成功。
$ sudo docker run hello-world
复制代码
这个命令会下载一个测试用的镜像并启动一个容器运行它。
$ docker pull ubuntu:latest
复制代码
这个公共registry中有几乎全部的镜像,ubuntu
,Mysql
,Redis
等等。Docker
开发人员在这个公共registry里维护者数个镜像,也能够获取用户发布的镜像。
一样,也能够建立私有的registry。
$ docker images
复制代码
$ docker run --rm -ti ubuntu /bin/bash
复制代码
说明:
--rm
告诉Docker
一旦运行的进程推出就删除容器,经常使用于测试时使用,可免除杂乱。-ti
告诉Docker
分配一个伪终端并进入交互模式。ubuntu
容器基于的镜像/bin/bash
要运行的命令