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选项。

原文地址:https://blog.51cto.com/13911055/2468472

时间: 2024-07-28 18:13:20

docker的架构,镜像分层特性,dockerfile缓存特性的相关文章

Docker中的镜像分层技术详解

早在集装箱没有出现的时候,码头上还有许多搬运的工人在搬运货物,在集装箱出现以后,码头上看到更多的不是工人,而且集装箱的搬运模式更加单一,更加高效,还有其他的好处,比如:货物多打包在集装箱里面,可以防止货物之前相互影响.并且到了另外一个码头需要转运的话,有了在集装箱以后,直接把它运送到另一个容器内即可,完全可以保证里面的货物是整体的搬迁,并且不会损坏货物本身.那么docker 镜像在IT行业中也扮演着非常重要的形象. 什么是docker 镜像 就是把业务代码,可运行环境进行整体的打包 如何创建do

Docker定制容器镜像(利用Dockerfile文件)

1.创建Dockerfile文件 新建一个目录,在里面新建一个dockerfile文件(新建一个的目录,主要是为了和以防和其它dockerfile混乱 ) [[email protected] myfiles]# mkdir centos6.8_dockerfile [[email protected] myfiles]# [[email protected] myfiles]# cd centos6.8_dockerfile/ 创建dockerfile文件(vim Dockerfile) #

docker安装postgres镜像&&如何通过Dockerfile使之在运行镜像时初始化数据

前言 本文分为两部分,前半部分简单,后面的部分,其实也不难,但是由于知识点资料比较偏僻,所以这里做一个总结. 在docker中安装postgres镜像 搜索镜像 拉取镜像 查看镜像 在docker镜像启动的时候初始化数据 原文地址:https://www.cnblogs.com/hzhiping/p/10274606.html

Dockerfile常用指令详解&镜像缓存特性

Dockerfile简介 Dockerfile 是Docker中用于定义镜像自动化构建流程的配置文件.在Dockerfile中,包含了构建镜像过程中需要执行的命令和其他操作.通过Dockerfile可以更加清晰,明确的给定Docker镜像的制作过程,由于仅是简单,小体积的文件,在网络等介质中传递的速度快,能够更快的实现容器迁移和集群部署.Dockerfile是一个文本文件,其内包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建. 相对于提交容器修改在进行镜像迁

理解Docker镜像分层

原文:理解Docker镜像分层 关于base镜像 base 镜像有两层含义: 不依赖其他镜像,从 scratch 构建. 其他镜像可以之为基础进行扩展. 所以,能称作 base 镜像的通常都是各种 Linux 发行版的 Docker 镜像,比如 Ubuntu, Debian, CentOS 等. base 镜像提供的是最小安装的 Linux 发行版. 我们大部分镜像都将是基于base镜像构建的.所以,通常使用的是官方发布的base镜像.可以在docker hub里找到.比如centos: htt

Dockerfile介绍、Docker制作jdk镜像

Dockerfile介绍.Docker制作jdk镜像 目标 1.Dockerfile简介 2.Docker制作jdk镜像 Dockerfile简介 dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像, 另外,使用Dockerfile去构建镜像好比使用pom去构建maven项目一样,有异曲同工之妙 dockerfile基本结构 Dockerfile 由一行行命令语句组成, 并且支持以#开头的注释行,一般而言, Dockerfile 主体内容

[转]Docker中的镜像

引言 这篇文章中我们主要来探讨下Docker镜像,它是用来启动容器的构建基石,本文的所用到的Dcoker版本是17.1,API版本是1.33,Go的版本是1.9.2,OS是基于Arch Linux的Manjaro. Docker镜像的概念 总的来说,Docker镜像是由文件系统叠加而成的. bootfs 最底端是一个引导文件系统,即bootfs,这很像典型的Linux/Unix的引导文件系统.Docker用户几乎永远不会和引导文件系统有什么交互.实际上,当一个容器启动后,它将会被移到内存中,而引

Dockers镜像分层

Dockers镜像分层 1,Dockers的最小镜像 [[email protected] ~]# docker pull hello-world //下载一个最小的镜像 [[email protected] ~]# docker images //查看镜像 [[email protected] ~]# docker run hello-world //运行一下hello-world (里面是一个文本对docker运行的简单介绍) dockerfile的组成1)FROM:scratch(抓.挠)

docker技术剖析--镜像、容器管理

防伪码:博观而约取,厚积而薄发                                 docker技术剖析--镜像.容器管理 一.Docker简介 Docker是什么? Docker的英文本意是"搬运工",在程序员的世界里,Docker搬运的是集装箱(Container),集装箱里装的是任意类型的App,开发者通过Docker可以将App变成一种标准化的.可移植的.自管理的组件,可以在任何主流系统中开发.调试和运行. 说白了,docker是一种用了新颖方式实现的轻量级虚拟机,