Docker 是什么
Docker 一词的英文直译为“码头工人”,但是实际上它更像是码头上的集装箱。类比于集装箱,Docker 实际上制定了一套标准,基于这套标准制作出来的容器可以轻松地解决应用发布与运维遇到的难题。
Docker 带来的好处主要有以下几点:
1、整体交付:把应用的依赖打包到 docker 镜像中,保证部署的每一台机器依赖都是完整的,同时使用容器技术屏蔽了操作系统和硬件的差异,使得开发、测试、部署、运维过程中能够保持一致,解决了很多维护难题。
2、资源利用率高:相比于 VM ,docker 耗费的系统资源更少,空闲的内存可以被宿主机和其他容器使用,相同的资源可以部署更多容器。
3、更快的启动时间:docker 只是隔离了程序的依赖关系,没有 Guest OS,启动速度比 VM 快得多。
传统的虚拟机技术是虚拟出一套硬件,在虚拟的硬件上运行一个操作系统,虚拟机中的应用在 Guest OS 中运行。而 docker 容器内的应用直接在宿主机上运行,容器没有虚拟出硬件也没有自己的内核,是一种轻量级的虚拟化技术。从下图的对比中可以看出,Docker 的 Docker Engine 层替代了虚拟机中的 Hypervisor 层和 Guest OS 层。
Docker 基本概念
下图展示了 Docker 技术的基本组成,主要包括 Client、Deamon、Container、Images 和Registry。
Docker Client:Docker 客户端,提供给用户一个终端,用户输入Docker 提供的命令来管理本地或远程的服务器。
Docker Daemon:服务端守护进程,接收 Client 发送的命令并执行相应的操作。
Docker Images:Docker 镜像,一个特殊的文件系统,封装了运行时需要的库、资源、应用等。
Docker Container:Docker 容器,提供了运行环境,通过Docker Images 启动,在Docker Images 基础上运行应用。
Docker Registry:Docker 仓库,用来管理镜像,实现镜像的上传、下载、浏览。
Docker 镜像
Docker 镜像是一个特殊的文件系统,这个文件系统封装了运行时需要的库、资源、应用等。Docker 镜像采用分层存储结构。构建时一层一层地进行,每一层构建好后不再变化,后一层以前一层为基础进行构建,最终组成多层文件系统。
一个 Docker 镜像可以构建于另一个 Docker 镜像之上,这种层叠关系可以是多层的。第1层的镜像层我们称之为基础镜像(Base Image),其他层的镜像(除了最顶层)我们称之为父层镜像(Parent Image)。这些镜像继承了他们的父层镜像的所有属性和设置,并在Dockerfile中添加了自己的配置。
Docker 容器
Docker 容器本质上是一个进程,运行于自己独立的命名空间中,所有的数据都存储在容器中。容器销毁后,这些数据也随之消失。多个容器互相之间是隔离的,一个容器所做的任何变更都只影响容器自己。
运行容器需要指定一个镜像,容器会在镜像上增加一个可写层。基础镜像本身的变更不会影响运行中的容器。需要执行 docker commit,才能保存容器中的数据,这时在镜像的基础上叠加上容器的存储层生成一个新的镜像。
镜像与容器的关系就像是面向对象中类与实例的关系,镜像是静态的定义,而容器是运行时的实体。容器可以进行创建、启动、停止、删除等操作。
作者:程序之心
链接:https://www.jianshu.com/p/99cd35757c1a