Docker教程:介绍


Docker是用GO语言实现的开源框架,用来解决运行环境及配置问题的软件容器虚拟化技术。它的设计目标就是:Build, Ship and Run Any App, Anywhere(一次镜像,处处运行)。

Docker介绍

先来说说什么是一个container:一个容器其实就是一种将应用程序及所有依赖库,配置打包到一起的一种方式。通过这种打包,可以方便的分享容器。

有了容器之后,就使得开发和部署更为高效。

这些容器保存于专门的仓库中,这些仓库可以是私有的,也可以是共有的,比如:DockerHub

使用Docker进行开发的优势

在传统的软件开发过程中,每个开发人员都需要在自己的工作环境中配置项目对应的技术栈。而同样的技术栈在不同的操作系统之间,相同操作系统的不同版本之间都是不尽相同的。因此可能会遇到如下问题:

  • 可能需要使用不同的步骤在不同的OS及版本上安装配置应用。
  • 经常会发现有的程序在开发者1的机器上能够正常运行,但在开发者2的机器上却出现了问题。
  • 在部署的时候,可能会出现依赖库版本的依赖问题。

有了Docker之后,这个问题就迎刃而解了。Docker对应用程序及其环境进行了封装。无论使用何种OS,只需运行同样的docker命令就可以启动容器。同样,在部署应用的时候,无需进行额外的配置(因为已经都在容器中配置好了)- 所需要的只是配置Docker运行时环境。

Docker中的layers

Docker中通常采用的是Linux(体积最小):Alpine,并在此基础上添加其他的image,比如mysql,Redis等等。当运行一个docker命令,比如:

bash
docker run postgres

的时候,会看到Docker下载很多image,这就是Docker中的不同layer。

Docker中image和container的区别

image其实就是Docker Repository中的静态软件。

当Docker把所需的镜像下载后,就需要在容器中运行了。

如果和程序类比的话,image就像是源代码,container就像是运行时。因此Docker container就是Docker image的运行时。

Docker和Virtual Machine的区别

Docker和VM都是虚拟化技术,但两者最大的区别就在于:

  • Docker只针对应用层进行虚拟化,Docker容器会直接使用实际物理机上的硬件资源,因此Docker镜像的文件会小很多,运行起来也会快很多。就兼容性而言,基于Linux的Docker镜像无法在Windows上运行(但可以通过安装Docker Toolbox来解决这个问题)。个人喜欢的方式是在Windows中安装一个Linux虚拟机,然后在虚拟机中安装Docker。在加载一个Docker容器的时候,无需像虚拟机一样加载一个操作系统,只是直接利用宿主机的操作系统,进而避免了加载操作系统内核所需的耗时过程。
  • VM则会对OS层及应用层进行虚拟化,因此Linux的VM可以运行在Windows主机上,反之亦然。

Docker工作原理

Docker是典型的CS架构。Docker Client发送请求(pull, run等)到Docker Daemon,由Docker Daemon执行Docker内部的一系列操作,这些操作都是以job的形式存在。Docker中存在这不同的Driver:

  • Graph Driver:负责下载Docker镜像并以Graph的形式存储
  • Network Driver: 创建并配置Docker网络
  • Exec Driver:在已经运行的Docker容器中执行指令
  • Libcontainer:容器管理包。前面提到的Network Driver及Exec Driver都是通过Libcontainer来实现具体的容器操作

安装Docker

安装Docker for Windows

注意:Docker只能(natively)运行于Windows 10及以上版本。

Docker需要Hyper V的支持才能运行。在安装Docker for Windows的时候,会自动安装Hyper V,但同时会导致Virtual Box / VMWare不能正常运行。其原因在于(Source: superuser ):

VirtualBox和VMware Workstation (以及VMware Player)是属于Level 2的虚拟机监视器。但Hyper-V和VMware ESXi是Level 1的虚拟机监视器。

对于Level 2的虚拟机监视器,它们是运行在宿主OS之上的一款应用程序,但Level 1的虚拟机监视器则本身成为了OS。这就意味着一旦启用了Hyper V,你的Windows 10操作系统反倒成为了一个虚拟机。

因此问题就变成了:能否在一个Hyper V虚拟机内运行VirtualBox或VMware?作为一个虚拟机,是不能访问Intel VT-X指令集的 - 只有宿主机可以访问。

安装Docker for Linux

参考官网安装Docker CE for Linux的文档。

注意事项

在Mac或Windows的多用户环境下,如果在一个用户环境下运行Docker,那么当在另一个用户环境下尝试运行Docker时,通常会报错。这时需要在第一个用户下退出Docker,然后再进入第二个用户下运行Docker。


文章作者: 逻思
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 逻思 !