当前位置: 首页 > article >正文

【docker】docker 关键技术 —— 镜像制作

docker 镜像制作

  • 镜像制作及原因
  • Docker 镜像制作方式
  • 快照方式制作镜像
    • 制作命令
  • Dockerfile 制作镜像
    • Dockerfile 是什么
    • Dockerfile 格式
    • 为什么需要 Dockerfile
    • gitee 详细使用 Dockerfile 教程

镜像制作及原因

镜像制作是因为某种需求,官方的镜像无法满足需求,需要我们通过一定手段来自定义镜像来满足要求。

制作镜像往往因为以下原因

  1. 编写的代码如何打包到镜像中直接跟随镜像发布
  2. 第三方制作的内容安全性未知,如含有安全漏洞
  3. 特定的需求或者功能无法满足,如需要给数据库添加审计功能
  4. 公司内部要求基于公司内部的系统制作镜像,如公司内部要求使用自己的操作系统作为基础镜像

Docker 镜像制作方式

制作容器镜像,主要有两种方法:

  • 制作快照方式获得镜像(偶尔制作的镜像):在基础镜像上(比如 Ubuntu),先登录容器中,然后安装镜像需要的所有软件,最后整体制作快照。
  • Dockerfile 方式构建镜像(经常更新的镜像):将软件安装的流程写成 Dockerfile,使用 docker build 构建成容器镜像。

快照方式制作镜像

制作命令

docker commit

• 功能

从容器创建一个新的镜像。

在这里插入图片描述

Dockerfile 制作镜像

Dockerfile 是什么

镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,这个脚本就是 Dockerfile。

Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

Dockerfile 格式

在这里插入图片描述
该指令不区分大小写。然而,约定是它们是大写的,以便更容易地将它们与参数区分开来。

Docker 按顺序运行指令 Dockerfile

Docker 将以开头的行视为#注释,行中其他任何地方的标记#都被视为参数。这允许像这样的语句:

在这里插入图片描述

为什么需要 Dockerfile

  • 可以按照需求自定义镜像
    • 和 docker commit 一样能够自定义镜像,官方的镜像可以说很少能直接满足我们应用的,都需要我们自己打包自己的代码进去然后做成对应的应用镜像对外使用。
  • 很方便的自动化构建,重复执行
    • 通过 dockerfile 可以自动化的完成镜像构建,而不是像 docker commit 一样,手动一个命令一个命令执行,而且可以重复执行,docker commit 的话很容易忘记执行了哪个命令,哪个命令没有执行。
  • 维护修改方便,不再是黑箱操作
    • 使用 docker commit 意味着所有对镜像的操作都是黑箱操作,生成的镜像也被称为黑箱镜像,dockerfile 很容易二次开发。
  • 更加标准化,体积可以做的更小
    • docker 容器启动后,系统运行会生成很多运行时的文件,如果使用 commit 会导致这些文件也存储到镜像里面,而且 commit 的时候安装了很多的依赖文件,没有有效的清理机制的话会导致镜像非常的臃肿。使用 Dockerfile 则会更加标准化,而且提供多级构建,将编译和构建分开,不会有运行时的多余文件,更加的标准化。

gitee 详细使用 Dockerfile 教程

gitee 详细使用 Dockerfile 教程


http://www.kler.cn/news/303946.html

相关文章:

  • 宝塔部署Vue项目解决跨域问题
  • 【机器学习】自然语言处理中的Transformer模型:深度解析与前沿发展
  • 从GreaterWMS学习仓库管理系统
  • 在Word中,用VBA比较两段文本的相似度
  • AI创作新手册:精通Prompt提示词的提问策略
  • 基于鸿蒙API10的RTSP播放器(一:基本界面的实现)
  • 【Qt笔记】QScrollArea控件详解
  • 电脑安装OpenWRT系统
  • 黑龙江等保测评二级系统费用解析:如何合理预算?
  • (web自动化测试+python)2
  • Autosar(Davinci) --- 创建一个S/R类型的port(下)
  • 【设计模式】设计模式的八大原则
  • Kafka3.6.0 linux 安装,非zk模式
  • QT如何ui上的QTableWidget控件如何使用
  • HarmonyOS开发实战( Beta5.0)自定义装饰器实践规范
  • 【自动驾驶】控制算法(八)横向控制Ⅱ | Carsim 与 Matlab 联合仿真基本操作
  • Android 车联网——汽车系统介绍(附2)
  • Python 课程6-Pandas 和 Matplotlib库
  • MATLAB中的控制系统工具箱:深入指南与实践应用
  • c++ 包装器
  • Git常用命令(记录)
  • 【Android笔记】Android Studio打包 提示Invalid keystore format
  • Cesium 获取BBOX
  • SprinBoot+Vue网络商城海鲜市场的设计与实现
  • uniapp 发布苹果IOS详细流程,包括苹果开发者公司账号申请、IOS证书、.p12证书文件等
  • 【区块链通用服务平台及组件】微言科技数据智能中台
  • [网络]TCP/IP五层协议之应用层,传输层(1)
  • okhttp 报java.lang.IllegalStateException: closed
  • 为什么矩阵特征值之和等于主对角线元素之和,特征值乘积等于行列式值
  • 对话世优科技CEO纪智辉:AI模型让数字人发展按下加速键