目前公司所有的服务端项目都使用 Docker容器技术进行部署,因此需要对于Docker有一个基本的认识,以此文章来记录学习过程。学习过程中为了方便理解,会通过类比前端开发中用到的概念,会存在一定的局限性。
Docker 是一个开源的平台,它使得开发者能够轻松地在所谓的容器中打包、分发和运行应用程序。容器可以被理解为一种轻量级的、可执行的软件包,包含了运行某个应用所需的所有内容:代码、运行时环境、库、环境变量和配置文件等,都封装在内。
根据以上概念,可以通俗的理解,Docker是一个轻量的虚拟机,能够给我们搭建一个一致的程序运行环境,抹平程序运行在开发电脑,测试服务器,生产服务器区别,很好的避免程序运行环境差异。
这就是我们使用docker的原因。
对比传统的虚拟机
)
但是相对于传统的虚拟机,容器化技术也会存在一定的缺点
比如:
在于隔离性上面,由于虚拟机
对操作系统也进行了虚拟化,隔离的更加彻底。而Docker
共享宿主机的操作系统,隔离性较差。
更详细的虚拟机
对比Docker
,会有一篇专门的文章做对比。
是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像 不包含 任何动态数据,其内容在构建之后也不会被改变。
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。也因为这种隔离的特性,很多人初学 Docker 时常常会混淆容器和虚拟机。
镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。