docker思想:
集装箱:dockers不仅打包了程序的代码,也打包了程序的相关配置,保证程序的正确运行
标准化:
运输方式:可是使用docker pull 语句,就能从docker的公共仓库将所需的程序包下载再来
存储:不需要记录镜像的位置,由docker管理
接口:可以使用dockers命令,直接对下载的镜像和容器进行操作
隔离:不同镜像和容器时互相隔离的
docker优点:一致的运行环境、更快的启动时间,善与快速扩展,迁移方便
容器和虚拟机:
传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
容器是一个应用层抽象,用于将代码和依赖资源打包在一起。多个容器可以在同一台机器上运行,共享操作系统内核,但各自作为独立的进程在用户空间中运行 。与虚拟机相比, 容器占用的空间较少(容器镜像大小通常只有几十兆),瞬间就能完成启动 。
虚拟机 (VM) 是一个物理硬件层抽象,用于将一台服务器变成多台服务器。 管理程序允许多个 VM 在一台机器上运行。每个 VM 都包含一整套操作系统、一个或多个应用、必要的二进制文件和库资源,因此 占用大量空间 。而且 VM 启动也十分缓慢 。
镜像:
Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。 镜像不包含任何动态数据,其内容在构建之后也不会被改变。
其设计为分层存储的架构 ,镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。
分层存储的特征还使得镜像的复用、定制变的更为容易。甚至可以用之前构建好的镜像作为基础层,然后进一步添加新的层,以定制自己所需的内容,构建新的镜像。
容器(Container):镜像运行时的实体
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。前面讲过镜像使用的是分层存储,容器也是如此。容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。
容器不应该向其存储层内写入任何数据 ,容器存储层要保持无状态化。所有的文件写入操作,都应该使用数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此, 使用数据卷后,容器可以随意删除、重新 run ,数据却不会丢失。
仓库(Repository):集中存放镜像文件的地方
个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本
容器数据卷:
容器数据卷:类似于数据库的持久化,完全独立于容器的生命周期,讲dockers容器内的数据保存进宿主的磁盘中
卷就是目录(文件),存在一个或多个容器中,由于docker挂载到容器中,但不是Unitfile,因此能够绕过Union files system,提供一些用于储存或共享的特性
![](https://img-blog.csdnimg.cn/img_convert/3497f0c0982e8cda465ebfada2fe25cd.png)
特点: