深圳石岩小学网站建设,江苏建设厅网站,秦皇岛做网站,忆达城市建设游戏登录网站一、Docker 概述二、Client 客户端三、Docker 引擎四、Image 镜像五、Container 容器六、镜像分层可写的容器层七、Volume 数据卷八、Registry 注册中心九、总结一、Docker 概述
Docker 是一个开发、发布和运行应用程序的开放平台。Docker使您能够将应用程序与基础架构分离以便快速交付软件。有了 Docker你可以像管理应用程序一样管理你的基础设施。通过利用 Docker 快速发布、测试和部署代码的方法您可以显著减少编写代码和在生产环境中运行它之间的延迟。
Docker 在运行时分为 Docker 引擎服务端守护进程 和 客户端工具我们日常使用各种 docker 命令其实就是在使用 客户端工具 与 Docker 引擎 进行交互。 二、Client 客户端 Docker 是一个客户端-服务器C/S架构程序。Docker 客户端只需要向 Docker 服务器或者守护进程发出请求服务器或者守护进程将完成所有工作并返回结果。Docker 提供了一个命令行工具 Docker 以及一整套 RESTful API。你可以在同一台宿主机上运行 Docker 守护进程和客户端也可以从本地的 Docker 客户端连接到运行在另一台宿主机上的远程 Docker 守护进程。 三、Docker 引擎 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 Docker 引擎是一个 客户端-服务器 应用程序具有以下主要组件:
一个服务器它是一种称为守护进程dockerd 命令的长时间运行程序。一个 REST API它指定程序可以用来与守护进程对话并指示它做什么的接口。一个命令行界面(CLI)客户端(docker命令)。
CLI 使用Docker REST API通过脚本或直接CLI命令控制Docker守护进程或与之交互。 许多其他Docker应用程序使用底层API和CLI。
这个守护进程创建和管理 Docker 对象如镜像、容器、网络和卷images, containers, networks, and volumes。
四、Image 镜像 什么是 Docker 镜像简单的理解Docker 镜像就是一个 Linux 的文件系统Root FileSystem这个文件系统里面包含可以运行在 Linux 内核的程序以及相应的数据。
通过镜像启动一个容器一个镜像就是一个可执行的包其中包括运行应用程序所需要的所有内容包含代码运行时间库环境变量和配置文件等。
Docker 把 App 文件打包成为一个镜像并且采用类似多次快照的存储技术可以实现
多个 App 可以共用相同的底层镜像初始的操作系统镜像App 运行时的 IO 操作和镜像文件隔离通过挂载包含不同配置/数据文件的目录或者卷Volume单个 App 镜像可以用来运行无数个不同业务的容器。
五、Container 容器 镜像Image和容器Container的关系就像是面向对象程序设计中的类和实例一样镜像是静态的定义容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
Docker面向对象镜像类容器对象六、镜像分层 Docker 支持通过扩展现有镜像创建新的镜像。实际上Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的。
从上图可以看到新镜像是从 base 镜像一层一层叠加生成的。每安装一个软件就在现有镜像的基础上增加一层。
镜像分层最大的一个好处就是共享资源。比如说有多个镜像都从相同的 base 镜像构建而来那么 Docker Host 只需在磁盘上保存一份 base 镜像同时内存中也只需加载一份 base 镜像就可以为所有容器服务了。而且镜像的每一层都可以被共享。
如果多个容器共享一份基础镜像当某个容器修改了基础镜像的内容比如 /etc 下的文件这时其他容器的 /etc 是不会被修改的修改只会被限制在单个容器内。这就是容器 Copy-on-Write 特性。 可写的容器层 当容器启动时一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”“容器层”之下的都叫“镜像层”。 所有对容器的改动 - 无论添加、删除、还是修改文件都只会发生在容器层中。只有容器层是可写的容器层下面的所有镜像层都是只读的。
镜像层数量可能会很多所有镜像层会联合在一起组成一个统一的文件系统。如果不同层中有一个相同路径的文件比如 /a上层的 /a 会覆盖下层的 /a也就是说用户只能访问到上层中的文件 /a。在容器层中用户看到的是一个叠加之后的文件系统。
文件操作说明添加文件在容器中创建文件时新文件被添加到容器层中。读取文件在容器中读取某个文件时Docker 会从上往下依次在各镜像层中查找此文件。一旦找到立即将其复制到容器层然后打开并读入内存。修改文件在容器中修改已存在的文件时Docker 会从上往下依次在各镜像层中查找此文件。一旦找到立即将其复制到容器层然后修改之。删除文件在容器中删除文件时Docker 也是从上往下依次在镜像层中查找此文件。找到后会在容器层中记录下此删除操作。只是记录删除操作
只有当需要修改时才复制一份数据这种特性被称作 Copy-on-Write。可见容器层保存的是镜像变化的部分不会对镜像本身进行任何修改。
总结下来就是容器层记录对镜像的修改所有镜像层都是只读的不会被容器修改所以镜像可以被多个容器共享。 七、Volume 数据卷 实际上我们的容器就好像是一个简易版的操作系统只不过系统中只安装了我们的程序运行所需要的环境前边说到我们的容器是可以删除的那如果删除了容器中的程序产生的需要持久化的数据怎么办呢容器运行的时候我们可以进容器去查看容器一旦删除就什么都没有了。
所以数据卷就是来解决这个问题的是用来将数据持久化到我们宿主机上与容器间实现数据共享简单的说就是将宿主机的目录映射到容器中的目录应用程序在容器中的目录读写数据会同步到宿主机上这样容器产生的数据就可以持久化了比如我们的数据库容器就可以把数据存储到我们宿主机上的真实磁盘中。 八、Registry 注册中心 Docker 用 Registry 来保存用户构建的镜像。Registry 分为公共和私有两种。Docker 公司运营公共的 Registry 叫做 Docker Hub。用户可以在 Docker Hub 注册账号分享并保存自己的镜像。
Docker 公司提供了公共的镜像仓库 https://hub.docker.comDocker 称之为 Repository提供了庞大的镜像集合供使用。
一个 Docker Registry 中可以包含多个仓库Repository每个仓库可以包含多个标签Tag每个标签对应一个镜像。
通常一个仓库会包含同一个软件不同版本的镜像而标签对应该软件的各个版本。我们可以通过 仓库名:标签 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签将以 latest 作为默认标签。 九、总结 Docker 官网写着这样一句话Build and Ship any Application Anywhere再结合刚才我们所理解的内容总结下来就是一次构建到处运行。
此外Docker 公司提供了公共的镜像仓库 https://hub.docker.comGitHub connect自动构建镜像大大简化了应用分发、部署、升级流程。加上 Docker 可以非常方便的建立各种自定义的镜像文件这些都是 Docker 成为最流行的容器技术的重要因素。
通过以上这些技术的组合最后的结果就是绝大部分应用开发者都可以通过 docker build 创建镜像通过 docker push 上传镜像用户通过 docker pull 下载镜像使用 docker run 运行容器应用。用户不再需要去关心如何搭建环境如何安装如何解决不同发行版的库冲突——而且通常不会消耗更多的硬件资源不会明显降低性能。