共计 4119 个字符,预计需要花费 11 分钟才能阅读完成。
行业资讯
服务器
云计算
docker 中容器架构、镜像分层特性、dockerfile 缓特性的示例分析
丸趣 TV 小编给大家分享一下 docker 中容器架构、镜像分层特性、dockerfile 缓特性的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
Docker 网站:
https://hub.docker.com/
Docker 镜像分层的概念:
Docker 的最小镜像
下载镜像(dockerfile 的组成)
docker pull hello-world
Dockerfile 的组成
1.》FROM:scratch 抓,挠(从零开始构建)
2》COPY:hello /
3》CMD:[“/hello”]
Base 镜像
(基础镜像)
*** 个人理解: 用户空间:rootfs
内核空间 :bootfs
kernel 内核
总体有七个部分: docker client,docker daemon,driver,libcontainer,
docker container,graph,docker registry
docker 是一个 C / S 的架构,用户可以在客户端输入各种指令,客户端负责接受请求并作出相应的响应返回给客户。 DockerClient
DockerClient 负责接受并传递请求指令 。 DockerDaemon
后台运行(不占用程序与端口) DockerDaemon 的功能主要有两个:(是一个守护进程) 1. 负责接受 client 的请求 2. 管理 docker 容器
dockerdaemon 的架构主要可以分为两部分:dockerserver 和 engine
DockerServer 作为服务端最主要的作用就是配合 client 端将请求指令接受过来,如图所示,DockerServer 主要分为三个部分:Http.server,routermux.server,Handler
DockerServer 运行时会从一个名为 mux 的包中创建一个 mux.Router 路由器,然后为路由器中添加相关的路由项用于路由信息, 每个路由项由 HTTP 请求方法(get,post,put,delete)+URL+Handler 三部分组成。 DockerServer 每收到一个请求就会生成一个 goroutine 然后进行相应的解析、匹配相应的路由项最后会找到相匹配的 Handler 来处理,Handler 处理玩请求之后给 DockerClient 返回响应
2.Engine
Engine 是 docker 中的运行引擎,存储着大量的容器信息并管理着大部分 job 的执行。
job 是 docker 中的最小执行单元,类似于 unix 中的进程,也会有相应的名字、参数、环境变量、标准输入输出、返回状态等等。docker 每进行一次相应的操作都会 生成一个相应的 Job,比如创建一个容器、下载一个文件等等都是由 job 完成的。 DockerDriver
DockerDriver 是 docker 内部的驱动模块,负责容器内部相关网络、文件系统等的构建
libcontainer
libcontainer 主要是对 linux 内核的一些诸如 namespace、cgroups、capabilities 等特性做了封装
Graph
DockerRegistry(私有仓库) Docker Container:运行应用程序的特定容器,是容器服务的交付实体 ***
** 总结:文档(网上)Docker 核心概念
容器技术的核心概念有容器 (container)、镜像(image)、仓库(registry) 三个。容器:具体的运行应用程序的一个进程,它里面包含应用程序的各种依赖。镜像:创建容器的模板,根据不同配置的镜像来创建不同的容器使用。镜像和容器的关系可以理解为面向对象中类和实例对象的关系。仓库:一个镜像只可以创建一种类型的容器,镜像多了就需要放到镜像仓库中存起来,仓库有本地镜像仓库和公共镜像仓库,平时使用本地仓库的镜像,没有的话去 Registry hub 公共镜像仓库下载。Docker 架构
Docker 框架主要由 Docker Client、Docker Daemon、Docker Registry、Driver、Docker Container 五个模块组成,另外还有 Graph 和 Libcontainer 两个辅助模块,如下图所示:Docker 架构
Docker Client: 用户通过 Docker Client 与 Docker Daemon 进行通信,利用命令行发送创建镜像、运行容器之类的请求。Docker Daemon:Docker Daemon 是 Docker 架构中一个常驻在后台的系统进程,接受并处理 Docker Client 发送的请求。该守护进程在后台启动了一个 Server,Server 负责接受 Docker Client 发送的请求;然后通过路由与分发调度,找到相应的 Handler 来执行请求。Docker Registry:存储容器镜像的仓库。Driver: Driver 是 Docker 架构中的驱动模块。通过 Driver 驱动,Docker 可以实现对 Docker 容器执行环境的定制。包含管理容器镜像的 graphdriver 驱动,配置容器内网络环境的 networkdriver 驱动,execdriver 用来创建和维护容器。Docker Container:运行应用程序的特定容器,是容器服务的交付实体。一般运行流程为:用户在 Docker Client 端通过命令行发送请求到 Docker Daemon,Docker Daemon 中的 Server 收到请求后,Engine 会创建一个工作任务 job,通过调用 Driver 模块的各个驱动分别执行不同的任务,比如需要镜像就调用 graphdriver 从镜像仓库下载镜像,创建容器时也需要调用其它两个驱动来配置网络和创建并维护容器。最后生成运行中的容器或者上传镜像到镜像仓库等。当想使用容器来跑自己的应用程序时,首先需要明确应用程序依赖的环境,如果本地有现成镜像可以直接使用来运行容器跑应用,没有的话可以通过 docker pull 去 registry hub 下载,或者自己创建所需要的镜像。可以使用 dockerfile 来创建镜像,首先编辑一个 dockerfile 文件,其中
FROM 表示这个镜像是基于哪个镜像来建立
MAINTAINER 表示这个镜像是由谁来维护
RUN 告诉镜像要执行的操作,比如更新或安装一个软件等,会新建一个镜像层。EXPOSE 表示暴露的端口。ENV 表示配置环境变量
CMD 设置容器启动后默认执行的命令及其参数,这条命令会在容器启动而且 docker run 没有指定其它命令时运行,如果 docker run 指定了其它命令,CMD 指定的默认命令将被忽略。CMD 有三种格式:Exec 格式:CMD [“executable”,“param1”,“param2”]
CMD [ “param1”,“param2”] 一般使用这个,为 ENTRYPOINT 提供默 认参数
Shell 格式:CMD command param1 param2
ENTRYPOINT 配置容器启动时运行的命令。与 CMD 不同的是,ENTRYPOINT 的指令一定会被运行,即使运行 docker run 时指定了其它命令。 ENTRYPOINT 有两种格式:Exec 格式:ENTRYPOINT [“executable”,“param1”,“param2”]
Shell 格式:ENTRYPOINT command param1 param2
一般优先使用 Exec 格式的 ENTRYPOINT 指令。CMD 可为 ENTRYPOINT 提供额外的默认参数,同时可利用 docker run 命令行替换默认参数。Docker build 创建镜像
Docker run 利用镜像运行容器
Docker image 关于镜像的一系列操作
Docker pull 从镜像仓库下载镜像到本地仓库
Docker push 上传镜像到镜像仓库
Docker container 执行关于容器的一系列操作
Docker stats 实时监控该节点容器的资源使用情况
镜像的分层
1》dockerfile 的书写格式为:Dockerfile
2》FROM:构建镜像有两种方式,一种是 scratch(从零构建),另一种可以基于某个镜像开始构建。
3》镜像所运行的操作,(用户所期望的)
vim Dockerfile
运行一下
docker build -t centos7-vim-net-tools:12-11 .
. 点代表在当前目录自动查找 Dockerfile 文件
注意:镜像的查看顺序,从上到下
Dockerfile 镜像分层总结:
镜像是容器的基石,容器是镜像运行后的实例,当镜像运行为容器后,对镜像的所有数据仅有只读权限,如果需要对镜像源文件进行修改或删除操做,此时实在容器层(可写层)进行的,用到了 cow(copy on write)写时复制机制
Docker 镜像的缓存特性:
一个目录最好只有一个 Dockerfile 文件
创建一个新的 dockerfile 文件
运行一下
docker build -t new-centos .
如果在相同的层有相同的镜像,看可以不必在去下载,可以直接使用缓存。
即使相同的镜像,在不同的层也会去下载
查看镜像的历史
docker history centos7-vim-net-tools:12-11
docker history new-centos:latest
Mkdir test1 在创建一个 dockerfile
即使镜像操做一样,也必须是在同一层才可以使用 dockerfile 的缓存特性。
如果制作镜像过程中,不想使用缓存,可以加 –no-cache 选项。
以上是“docker 中容器架构、镜像分层特性、dockerfile 缓特性的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!