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

Dockerfile:镜像构建

Docker File

Docker 镜像原理

思考

  • Docker 镜像本质是什么?
  • Docker 中一个 centos 镜像为什么只有 200MB,而一个 centos 操作系统的 iso 文件要几个 G ?
  • Docker 中一个 tomcat 镜像为什么有 500MB,而一个 tomcat 安装包只有 70 多 MB ?

image

操作系统组成

  • 进程调度子系统
  • 进程通信子系统
  • 内存管理子系统
  • 设备管理子系统
  • 文件管理子系统
  • 网络通信子系统
  • 作业控制子系统

Linux 文件系统由 bootfs 和 rootfs 两部分组成

  • bootfs:包含 bootloader(引导加载程序)和 kernel(内核)。
  • rootfs:root 文件系统,包含的就是典型 Linux 系统中的 /dev,/proc,/bin,/etc 等标准目录和文件。
  • 不同的 linux 发行版,其 bootfs 基本一样,而 rootfs 则不同,如 ubuntu,centos 等。

Docker 镜像

  • Docker 镜像是由特殊的文件系统叠加而成。
  • 最底端是 bootfs,其使用的是宿主机的 bootfs 。
  • 第二层是 root 文件系统rootfs,称为 base image 。
  • 再往上可以叠加其他的镜像文件。
  • 统一文件系统(Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。
  • 一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最底部的镜像成为基础镜像。
  • 当从一个镜像启动容器时,Docker 会在最顶层加载一个读写文件系统作为容器。

image

总结

  • Docker 镜像本质是什么?
    • 是一个分层文件系统
  • Docker 中一个 centos 镜像为什么只有 200MB,而一个 centos 操作系统的 iso 文件要几个 G ?
    • Centos 的 iso 镜像文件包含 bootfs 和 rootfs,而 docker 的 centos 镜像复用操作系统的 bootfs,只有 rootfs 和其他镜像层
  • Docker 中一个 tomcat 镜像为什么有 500MB,而一个 tomcat 安装包只有 70 多 MB ?
    • 由于 docker 中镜像是分层的,tomcat 虽然只有 70 多 MB,但他需要依赖于父镜像和基础镜像,所有整个对外暴露的 tomcat 镜像大小 500 多 MB 。

Dockerfile

镜像制作

Docker 镜像如何制作?

image

  • 方法一:容器转为镜像
docker commit 容器id 镜像名称:版本号
docker save -o 压缩文件名称 镜像名称:版本号
docker load –i 压缩文件名称
  • 方法二:使用 Dockerfile

Dockerfile 概念

什么是 Dockerfile ?

  • Dockerfile 是一个文本文件,包含了一条条的指令。
  • 每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像。
  • 对于开发人员:可以为开发团队提供一个完全一致的开发环境。
  • 对于测试人员:可以直接拿开发时所构建的镜像或者通过 Dockerfile 文件构建一个新的镜像开始工作。
  • 对于运维人员:在部署时,可以实现应用的无缝移植。
  • 官方 Dockerfile 文件参考:
http://www.dtcms.com/a/291933.html

相关文章:

  • 在资源受限单片机中使用printf等可变参函数时的陷阱(2025年7月22日)
  • DF与介质损耗
  • 深入解析谱聚类:RatioCut与Ncut的图拉普拉斯推导
  • AI AgentLLM架构演进的大逻辑和小脉络
  • RK3568 Linux驱动学习——SDK烧录
  • Docker 安装、常用命令、应用部署
  • Android接入RocketMQ的文章链接
  • JavaScript,发生异常,try...catch...finally处理,继续向上层调用者传递异常信息
  • 20250722在Ubuntu 24.04.2下配置编译RD-RK3588开发板的Android13的编译环境
  • 八大作业票(一) 动火安全作业证
  • 分布式高可用ELK平台搭建及使用保姆级教程指南
  • axios统一封装规范管理
  • 同步本地文件到服务器上的Docker容器
  • 学习做精准、自动化、高效的 GEO优化系统
  • 如何判断进程是否存活?Linux 系统中的核心方法解析
  • 【前端】ikun-pptx编辑器前瞻问题一: pptx的xml样式, 使用html能100%还原么
  • UE5 UI ScrollBox 滚动框
  • 报错error:0308010C:digital envelope routines::unsupported解决方案
  • 《Webpack热更新瓶颈突破:全链路优化指南》
  • Android KTX:让Kotlin开发更简洁高效的利器
  • 闲庭信步使用图像验证平台加速FPGA的开发:第二十九课——车牌识别的FPGA实现(1)车牌定位的预处理
  • 边缘计算网关赋能智慧农业:物联网边缘计算的创新应用与实践
  • vue apk返回键不好使
  • git push新版问题解决
  • ArrayList与顺序表
  • 【C++】继承和多态扩展学习
  • 面向对象的三大特征
  • Go 语言中,创建结构体实例对象有几种常用方式
  • 大数学习笔记整理
  • Leetcode—692. 前K个高频单词【中等】(桶排序)