【docker】docker镜像原理

目录

        • 一、操作系统组成部分
        • 二、Linux文件系统
        • 三、docker镜像原理
        • 四、说明
        • 五、镜像制作
          • 5.1 方式一:容器转镜像
          • 5.2 方式二:dockerfile
            • 5.2.1 dockerfile说明
            • 5.2.2 dockerfile关键字

一、操作系统组成部分

  • 1.进程调度子系统
  • 2.进程通信子系统
  • 3.内存管理子系统
  • 4.设备管理子系统
  • 5.文件管理子系统
  • 6.网络通信子系统
  • 7.作业控制子系统

二、Linux文件系统

  • 1.linux文件系统由bootfs和rootfs两部分组成
  • 2.bootfs:包含bootloader(引导加载程序)和kernel(内核)
  • 3.rootfs:root文件系统,包含的就是典型Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件
  • 4.不同的linux发行版,bootfs基本一样,rootfs不同,如ubuntu、centos等

三、docker镜像原理

  • 1.docker镜像是由特殊的文件系统叠加而成
  • 2.最底层是bootfs,并使用宿主机的bootfs
  • 3.第二层是root文件系统rootfs,称为base image
  • 4.再往上可以叠加其它的镜像文件,例如jdk镜像叠加到rootfs基础镜像,tomcat镜像叠加到jdk镜像
  • 5.拉取tomcat镜像时,由于tomcat镜像依赖于jdk,然后会拉取jdk镜像,jdk镜像依赖于基础镜像,也会拉取基础镜像,三个镜像称为只读镜像,每一层镜像都可以被其它镜像复用
  • 6.这种叠加技术叫做统一文件系统技术(Union File System),能够将不同的层整合成一个文件系统,为这些层提供一个统一的视角,从而隐藏了多层的存在,在用户的角度看来,只存在一个文件系统
  • 7.一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最底部的镜像称为基础镜像
  • 8.当从一个镜像启动容器时,docker会在最顶层加载一个读写文件系统作为容器

四、说明

  • 1.docker镜像的本质是一个分层的文件系统
  • 2.centos的ios镜像文件包含bootfs和rootfs,docker的centos镜像复用操作系统的bootfs,只有rootfs和其他镜像层
  • 3.由于docker镜像是分层的,tomcat虽然只有70多MB,但它依赖于父镜像和基础镜像,所以整个对外暴露的tomcat镜像大小500多MB

五、镜像制作

5.1 方式一:容器转镜像
  • 1.容器转镜像,将可写容器重新转化为新的镜像
  • 2.命令
docker commit 容器id 镜像名称:版本号
// 压缩文件 -o 是output 输出
docker save -o 压缩文件名称 镜像名称:版本号
// load 压缩文件成为镜像
docker load -i 压缩文件名称
5.2 方式二:dockerfile
5.2.1 dockerfile说明
  • 1.dockerfile是一个文本文件
  • 2.包含了一条条的指令
  • 3.每条指令构建一层镜像,基于基础镜像,最终构建出一个新的镜像
  • 4.对于开发人员来说,可以为开发团队提供一个完全一致的开发环境
  • 5.对于测试人员来说,可以直接拿开发时所构建的镜像或者通过dockerfile文件构建一个新的镜像
  • 6.对于运维人员来说,在部署时,可以实现应用的无缝移植
5.2.2 dockerfile关键字
关键字作用备注
FROM指定父镜像指定dockerfile基于哪个image构建
MAINTAINER作者信息用来标明这个dockerfile是谁写的
LABEL标签用来标明dockerfile的标签,可以使用label代替maintainer,最终都是在docker image基本信息中可以查看
RUN执行命令执行一段命令,默认是/bin/sh,格式:RUN command 或者 RUN ["command","param1","param2"]
CMD容器启动命令提供启动容器时的默认命令和entrypoint配合使用,格式:CMD command param1 param2 或者 CMD ["command", "param1", "param2"]
ENTRYPOINT入口一般在制作一些执行就关闭的容器中会使用
COPY复制文件build的时候复制文件到image中
ADD添加文件build的时候添加文件到image中,不仅仅局限于当前build上下文可以来源于远程服务
ENV环境变量指定build时候的环境变量,可以在启动容器的时候,通过-e覆盖,格式:ENV name=value
ARG构建参数构建参数只在构建的时候使用的参数,如果有ENV,那么EVN的相同名字值始终会覆盖ARG的参数
VOLUME定义外部可以
挂载的数据卷
指定build的image哪些目录可以启动的时候挂载到文件系统中,启动容器的时候使用-v绑定,格式:VOLUME ["目录"]
EXPOSE暴露端口定义容器运行的时候监听的端口,启动容器使用-p来绑定暴露端口 格式EXPOSE 8080或者EXPOSE 8080/udp
WORKDIR工作目录指定容器内部的工作目录,如果没有创建则自动创建,如果指定/,使用的是绝对地址,如果不是/开头,那么是在上一条workdir的路径的相对路径
USER指定执行用户指定build或者启动的时候,用户在RUN CMD ENTRYPOINT执行的时候的用户
HEALTHCHECK健康检查指定监测当前容器的健康监测的命令,基本上没用,因为常见情况应用本身有健康监测机制
ONBUILD触发器当存在ONBUILD关键字的镜像作为基础镜像的时候,当执行FROM完成之后会执行ONBUILD的命令,但是不影响当前镜像,用处不大
STOPSIGNAL发送信号量到宿主机该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出
SHELL指定执行脚本的shell指定RUN CMD ENTRYPOINT执行命令的时候使用的shell

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/20183.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python实现GA遗传算法优化循环神经网络分类模型(LSTM分类算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 遗传算法(Genetic Algorithm,GA)最早是由美国的 John holland于20世…

实战 02|「可点击图片」

前言 实践是最好的学习方式,技术也如此。 文章目录 前言一、功能需求(一)1、功能需求描述 一、功能需求(一) 1、功能需求描述 用户可以点击图片来执行相应的操作(显示 Toast 信息);…

全面解析大语言模型的工作原理

当ChatGPT在去年秋天推出时,在科技行业乃至世界范围内引起了轰动。当时,机器学习研究人员尝试研发了多年的语言大模型(LLM),但普通大众并未十分关注,也没有意识到它们变得多强大。 如今,几乎每个…

无代码开发(BIP旗舰版-YonBuilder)

目录 我的应用 新建领域 菜单管理 应用构建 新建应用 对象建模 新增业务对象 新增业务实体 页面建模 新增页面 编辑页面 发布管理 我的应用 角色管理 yonbuilder开发平台,提供标准服务和专业开发服务; 本篇文章只演示标准服务的可视化应用…

new一个构造函数

new 一个构造函数发生了什么? new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。 new 关键字会进行如下的操作: 1.创建一个空的简单 JavaScript 对象,即{}; 2.链接该对象到另一个对象(即设置该对象…

Flink State 和 Fault Tolerance详解

有状态操作或者操作算子在处理DataStream的元素或者事件的时候需要存储计算的中间状态,这就使得状态在整个Flink的精细化计算中有着非常重要的地位: 记录数据从某一个过去时间点到当前时间的状态信息。以每分钟/小时/天汇总事件时,状态将保留…

【C++】基础练习(一)||从C到C++函数

C基础练习(一) 从C 到C函数 从C 到C ⭐️C是在C语言基础山改进发展而来的,是C语言的一个超集。 1.关于C语言和C的关系,以下说法正确的是:A A.C兼容C语言 B.C语言部分兼容C C.C部分兼容C语言 D.C语言兼容C 分析&#x…

调整图片中的人物头像的位置(裁剪图片的时候)

其实调整图片的适应边框的属性 我们首先会想到 object-fit object-fit CSS 属性指定可替换元素(例如: 或 )的内容应该如何适应到其使用高度和宽度确定的框。 contain 被替换的内容将被缩放,以在填充元素的内容框时保持其宽高比…

弹性布局,网格布局,JavaScript

弹性盒子布局(Flexbox Layout):通过display: flex;设置容器为弹性盒子,可以实现更复杂的自适应和响应式布局。 网格布局(Grid Layout):通过display: grid;设置容器为网格布局,可以将…

Unity 引擎做残影效果——2、屏幕后处理方式

Unity实现残影效果 大家好,我是阿赵。 这里继续介绍Unity里面做残影的方法。之前介绍了BakeMesh的方法做残影,这一期介绍的是用屏幕后处理的方法做残影。 一、原理 之前的BakeMesh方法,是真的生成了很多个网格模型在场景里面。如果用后处理做…

day49-Springboot

Springboot 1. Springboot简介 1.1 简介:Springboot来简化Spring应用开发的一个框架,约定大于配置 1.2 优点: 可以快速的构建独立运行的Spring项目; 框架内有Servlet容器,无需依赖外部,所以不需要达成w…

正则匹配img标签里面src

正则&#xff1a; (?<src\s*\s*\")\S(?\"{1})匹配效果&#xff1a;

Ansible —— playbook 剧本

Ansible —— playbook 剧本 一、playbook的概述1.playbook简介2.什么是Ansible playbook剧本&#xff1f;3.Ansible playbook剧本的特点4.如何使用Ansible playbook剧本&#xff1f;5.playbooks 本身由以下各部分组成 二、playbook示例1.运行playbook2.定义、引用变量3.指定远…

HarmonyOS/OpenHarmony元服务开发-卡片使用动效能力

ArkTS卡片开放了使用动画效果的能力&#xff0c;支持显式动画、属性动画、组件内转场能力。需要注意的是&#xff0c;ArkTS卡片使用动画效果时具有以下限制&#xff1a; 以下示例代码实现了按钮旋转的动画效果&#xff1a; Entry Component struct AttrAnimationExample { St…

Vue axios + Vue使用

相对于原生的阿贾克斯&#xff0c;axios提供的方法使用起来会更加的简便&#xff0c;之前网络数据获取到了&#xff0c;如何和vue一起使用呢&#xff1f; 网络应用的核心就是data中的数据一部分是通过网络获取到的。所以在方法当中发起网络请求&#xff0c;在响应回来之后将服…

mac切换jdk版本

查询mac已有版本 1、打开终端&#xff0c;输入&#xff1a; /usr/libexec/java_home -V注意&#xff1a;输入命令参数区分大小写(必须是-V) 2.目前本地装有两个版本的jdk xxxxedydeMacBook-Pro-9 ~ % /usr/libexec/java_home -V Matching Java Virtual Machines (2):20.0.1 (…

【腾讯云Cloud Studio实战训练营】使用Cloud Studio迅捷开发一个3D家具个性化定制应用

目录 前言&#xff1a; 一、腾讯云 Cloud Studio介绍&#xff1a; 1、接近本地 IDE 的开发体验 2、多环境可选&#xff0c;或连接到云主机 3、随时分享预览效果 4、兼容 VSCode 插件 5、 AI代码助手 二、腾讯云Cloud Studio项目实践&#xff08;3D家具个性化定制应用&…

探索 GPTCache|GPT-4 将开启多模态 AI 时代,GPTCache + Milvus 带来省钱秘籍

世界正处于数字化的浪潮中&#xff0c;为了更好理解和分析大量数据&#xff0c;人们对于人工智能&#xff08;AI&#xff09;解决方案的需求呈爆炸式增长。 此前&#xff0c;OpenAI 推出基于 GPT-3.5 模型的智能对话机器人 ChatGPT&#xff0c;在自然语言处理&#xff08;NLP&a…

【MYSQL】MYSQL学习笔记【基础篇】【未完待续】

文章目录 MYSQL入门一、MYSQL概述1. 数据库相关概念1.1 数据库&#xff0c;数据库管理系统与SQL1.2 数据库种类以及主流数据库管理系统排名1.3 MySQL数据库安装1.4 数据模型 二、SQL2.1 通用语法与注释2.2 SQL分类2.3 图形化界面2.4 DDL2.4.1 数据库操作2.4.2 表操作2.4.2.1 表…

介绍一下JS垃圾回收机制

JavaScript中的垃圾回收机制负责自动管理内存&#xff0c;回收不再使用的对象所占用的内存空间。在JavaScript中&#xff0c;开发者不需要显式地分配和释放内存&#xff0c;垃圾回收器会自动完成这些操作。以下是关于JavaScript垃圾回收机制的一些关键概念&#xff1a; 内存生命…