Docker容器化技术(使用Dockerfile制作镜像)
Docker中的镜像分层
Docker 支持通过扩展现有镜像,创建新的镜像。实际上,Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的。
1、Docker 镜像为什么分层
镜像分层最大的一个好处就是共享资源。 比如说有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在磁盘上保存一份 base 镜 像;同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共 享。
如果多个容器共享一份基础镜像,当某个容器修改了基础镜像的内容,比如 /etc 下的文件,这时其他容 器的 /etc 是不会被修改的,修改只会被限制在单个容器内。这就是容器 Copy-on-Write 特性。
2、可写的容器层
当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫 “镜像层”。
所有对容器的改动 - 无论添加、删除、还是修改文件都只会发生在容器层中。只有容器层是可写的,容 器层下面的所有镜像层都是只读的。
3、容器层的细节说明
镜像层数量可能会很多,所有镜像层会联合在一起组成一个统一的文件系统。如果不同层中有一个相同 路径的文件,比如 /a,上层的 /a 会覆盖下层的 /a,也就是说用户只能访问到上层中的文件 /a。在容器 层中,用户看到的是一个叠加之后的文件系统。
Dockerfile 介绍
Docker中有个非常重要的概念叫做——镜像(Image)。Docker 镜像是一个特殊的文件系统,除 了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数 (如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构 建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜 像构建透明性的问题、体积的问题就都会解决。这个脚本就是 Dockerfile。
Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每 一条指令的内容,就是描述该层应当如何构建。
[root@localhost ~]# mkdir /db
[root@localhost ~]# cd /db
[root@localhost db]# systemctl start docker
[root@localhost db]#
[root@localhost db]# vim Dockerfile
ARG VER=latest
FROM busybox:$VER
MAINTAINER wyx<wyx@111.com>
ENV WEB_DOC_ROOT="/data/web/html"RUN mkdir -p ${WEB_DOC_ROOT}
COPY index.html ${WEB_DOC_ROOT}/index.htmlEXPOSE 80
CMD /bin/httpd -f -h ${WEB_DOC_ROOT}
Dcokerfile指令介绍
FROM
介绍
- FROM 指令必须是 Dockerfile 中非注释行的第一个指令,即一个 Dockerfile 从FROM语句; FROM 指令用于为镜像文件构建过程指定基础镜像,后续的指令运行于此基础镜像所提供的运行环 境;
- 实践中,基准镜像可以是任何可用镜像文件,默认情况下,docker build会在docker主机上查找指 定的镜像文件,在其不存在时,则会自动从 Docker 的公共库 pull 镜像下来。如果找不到指定的 镜像文件,docker build 会返回一个错误信息;
- FROM可以在一个 Dockerfile 中出现多次,如果有需求在一个 Dockerfile 中创建多个镜像。 如果FROM语句没有指定镜像标签,则默认使用latest标签。
ARG
介绍
- ARG指令类似ENV,定义了一个变量;区别于ENV:用户可以在构建时docker build --build-arg = 进行对变量的修改;ENV不可以;
- 如果用户指定了未在Dockerfile中定义的构建参数,那么构建输出警告。
MAINTAINER
介绍
用于让dockerfile制作者提供本人的详细信息 dockerfile 并不限制MAINTAINER 指令可在出现的位置,但推荐将其放置于FROM指令之后
COPY
介绍
用于从docker 主机复制新文件或者目录至创建的新镜像指定路径中
EXPOSE
介绍
用于为容器打开指定要监听的端口以实现与外部通信
RUN
介绍
用于指定docker build过程中运行的程序,其可以是任何命令
ENV
介绍
- 用于为镜像定义所需的环境变量,并可被Dockerfile文件中位于其后的其它指令(如ENV、ADD、 COPY等)所调用
- 调用格式为$variable_ name 或 ${variable_ name}
示例
[root@localhost db]# docker build -t web:v2 ./ --load
[+] Building 1.5s (7/7) FINISHED docker-container:default=> [internal] load build definition from Dockerfile 0.0s=> => transferring dockerfile: 344B 0.0s=> [internal] load metadata for docker.io/library/busybox:latest 1.3s=> [internal] load .dockerignore 0.0s=> => transferring context: 2B 0.0s=> [1/2] FROM docker.io/library/busybox:latest@sha256:650fd573e056b679a5110a70aabeb01e26b76e545ec4b9c70a9523f2dfaf18c6 0.0s=> => resolve docker.io/library/busybox:latest@sha256:650fd573e056b679a5110a70aabeb01e26b76e545ec4b9c70a9523f2dfaf18c6 0.0s=> CACHED [2/2] RUN mkdir -p /data/web/html && echo "<h1>Busybox httpd server</h1>" > /data/web/html/index.html 0.0s=> exporting to docker image format 0.1s=> => exporting layers 0.0s=> => exporting manifest sha256:ac9ab7ea17a22df4d6b811825b8d72617057773c55d4ac1333202c077d02edc9 0.0s=> => exporting config sha256:d295a55faa063775dc81658b0f9a2b022e8c3ebee479fe7b94386155c695c810 0.0s=> => sending tarball 0.1s=> importing to docker 0.0s=> => loading layer 29daefb0147a 223B / 223B 0.0s
[root@localhost db]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
web v2 d295a55faa06 6 minutes ago 4.26MB
moby/buildkit buildx-stable-1 480495983c47 5 weeks ago 172MB
wordpress latest 2fc2a7b04129 5 weeks ago 739MB
tencentci/discuz latest caba9d3ea6d8 8 weeks ago 574MB
mysql 5.7 5107333e08a8 3 months ago 501MB
goharbor/harbor-exporter v2.8.4 b8d33e28ec68 6 months ago 97.7MB
goharbor/redis-photon v2.8.4 7b7324d651ca 6 months ago 120MB
goharbor/trivy-adapter-photon v2.8.4 91d8e9f0b21a 6 months ago 464MB
goharbor/notary-server-photon v2.8.4 a46f91560454 6 months ago 113MB
goharbor/notary-signer-photon v2.8.4 da66bd8d944b 6 months ago 110MB
goharbor/harbor-registryctl v2.8.4 805b38ca6bee 6 months ago 141MB
goharbor/registry-photon v2.8.4 756769e94123 6 months ago 79MB
goharbor/nginx-photon v2.8.4 375018db778b 6 months ago 116MB
goharbor/harbor-log v2.8.4 8a2045fb24d2 6 months ago 124MB
goharbor/harbor-jobservice v2.8.4 97808fc10f64 6 months ago 141MB
goharbor/harbor-core v2.8.4 c26fcd0714d8 6 months ago 164MB
goharbor/harbor-portal v2.8.4 4a8b0205c0f9 6 months ago 124MB
goharbor/harbor-db v2.8.4 5b8af16d7420 6 months ago 174MB
goharbor/prepare v2.8.4 bdbf974d86ce 6 months ago 166MB
busybox latest ba5dc23f65d4 9 months ago 4.26MB
mysql 5.6 dd3b2a5dcb48 2 years ago 303MB
y109/discuz latest 607a1b6e9cc4 8 years ago 542MB
training/webapp latest 6fae60ef3446 8 years ago 349MB
training/postgres latest 6fa973bb3c26 9 years ago 365MB
[root@localhost db]# docker run -d --name test1 -P web:v2
ed9d72069d829036d826e87875f1b15242c358d67d95130862ef8ee440caa0f3
[root@localhost db]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ed9d72069d82 web:v2 "/bin/sh -c '/bin/ht…" 5 seconds ago Up 4 seconds 0.0.0.0:32768->80/tcp test1
faed7103e3ff moby/buildkit:buildx-stable-1 "buildkitd" 11 minutes ago Up 11 minutes buildx_buildkit_default

相关文章:
Docker容器化技术(使用Dockerfile制作镜像)
Docker中的镜像分层 Docker 支持通过扩展现有镜像,创建新的镜像。实际上,Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的。 1、Docker 镜像为什么分层 镜像分层最大的一个好处就是共享资源。 比如说有多个镜像都从相…...
C++ struct 结构体类型
在处理大批量数据时,一般会使用数组来实现,数组中各元素都属于同一数据类型。但在实际问题中,要处理的一组数据往往具有不同的数据类型。如一个学生的个人信息有学号(num)、姓名(name)、性别&am…...
什么是VR虚拟现实体验店|VR主题馆加盟|元宇宙文化旅游
VR虚拟现实体验店是一种提供虚拟现实技术体验的场所。在这样的店铺里,顾客可以通过专业的设备和技术,体验虚拟现实技术带来的沉浸式感觉。 通常,这些商店提供一系列VR体验,包括互动游戏、沉浸式模拟、虚拟旅游和其他VR内容。客户可…...
【智能家居入门1之环境信息监测】(STM32、ONENET云平台、微信小程序、HTTP协议)
作为入门本篇只实现微信小程序接收下位机上传的数据,之后会持续发布如下项目:①可以实现微信小程序控制下位机动作,真正意义上的智能家居;②将网络通讯协议换成MQTT协议再实现上述功能,此时的服务器也不再是ONENET&…...
AIGC安全研究简述(附资料下载)
2023 AIGC技术实践及展望资料合集(29份).zip 2023 AIGC大型语言模型(LLM)实例代码合集.zip 2023大模型与AIGC峰会(公开)PPT汇总(25份).zip AIGC的安全研究是一个复杂且重要的领域,涉及多个关键…...
初识Spring MVC
什么是Spring MVC? 官方给的解释是 Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的 正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为"Spring MVC" 注:Severlet是…...
云原生之容器编排实践-ruoyi-cloud项目部署到K8S:Nginx1.25.3
背景 前面搭建好了 Kubernetes 集群与私有镜像仓库,终于要进入服务编排的实践环节了。本系列拿 ruoyi-cloud 项目进行练手,按照 MySQL , Nacos , Redis , Nginx , Gateway , Auth ,…...
PHP立体安全攻击向量:保护应用程序的关键挑战
PHP立体安全攻击向量:保护应用程序的关键挑战 PHP作为一种广泛使用的服务器端脚本语言,拥有庞大的用户群体和丰富的生态系统。然而,随着互联网的发展,网络安全问题也变得愈发严重。本文将深入探讨PHP的立体安全攻击向量࿰…...
【功能大全】手机短信验证码一键注册登录流程
目录 发送验证码 注册登录 用户表设计 编辑申请腾讯云短信与密钥 找到云短信服务 开通腾讯云短信服务 编辑创建短信签名 编辑编辑创建短信正文模版编辑编辑 等待审核 测试短信编辑 SDK密钥创建 SpringBoot集成腾讯云短信 pom中导入腾讯云短…...
【Python】【Matplotlib】深入解析plt.grid()---原理、应用与注意事项
【Python】【Matplotlib】深入解析plt.grid()—原理、应用、源码与注意事项 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程Ǵ…...
数据库规范化设计案例解析
1.介绍 数据库规范化设计是数据库设计的一种重要方法,旨在减少数据库中的冗余数据,提高数据的一致性,确保数据依赖合理,从而提高数据库的结构清晰度和维护效率。规范化设计通过应用一系列的规范化规则(或称“范式”&a…...
服务器段的连接端口和监听端口编程实现
new ServerSocket(int)是开启监听端口,并不是连接端口。真正的连接端口是随机开辟的空闲端口,当连接创建完成后,监听关口可以继续等待下一次连接请求,处于空闲等待状态。 编程实现方式 1 、主线程一直处于阻塞等待状态,…...
用“定时执行专家”武装你的电脑,做时间管理大师!
简介 你是否厌倦了重复繁琐的电脑操作?你是否希望能够解放双手,提高工作效率?“定时执行专家”是一款功能强大的定时任务执行软件,可以帮你轻松实现自动化办公,让你成为时间管理大师! 软件功能 支持25种任…...
css3实现3D立方体旋转特效源码
源码介绍 CSS3自动旋转正方体3D特效是一款基于css3 keyframes属性制作的图片相册自动旋转立方体特效 效果展示 下载地址 css3实现3D立方体旋转特效代码...
计算器系统基础知识-校验码
1.奇偶校验码 通过在编码中增加一位奇数校验位来使编码中1的个数为奇数(奇校验)或者为偶数(偶校验),从而使码距变为2。 常见的奇偶校验码有三种:水平奇偶校验码、垂直奇偶校验码和水平垂直校验码。 以下是奇偶校验码的示例: public …...
springboot换日志框架后爆SLF4J: Class path contains multiple SLF4J bindings的解决办法
sringboot原本使用的是logback日志框架,将它去掉,修改为log4j2日志框架后,往往会出现以下错误: SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/C:/Users/admin/.m2/repository/ch/qos…...
k8s+zabbix
一,环境: 1),k8s部署,master和node节点都部署成功 二,部署: 1),安装python3(资源中有) wget https://www.python.org/ftp/python/3.7.4/Python-…...
k8s-生产级的k8s高可用(2) 25
部署containerd k8s2、k8s3、k8s4在配置前需要重置节点(reset)在上一章已完成 禁用所有节点docker和cri-docker服务 所有节点清除iptables规则 重置后全部节点重启 由于之前部署过docker,因此containerd默认已安装 修改配置 启动containe…...
ubuntu20.04 创建ros环境、创建rospackage
roswiki教程:https://wiki.ros.org/cn/ROS/Tutorials 环境准备 安装ros环境 这里选择noetic版本的ros,安装步骤参考:https://zhuanlan.zhihu.com/p/662284005 创建工作空间 这里我在用户目录下创建catkin的工作目录catkin_ws ࿰…...
QT进阶---------pro项目文件中的常用命令 (第三天)
1、命令一 决定exe可执行程序的生成路径CONFIG 作用:不使用默认路径,方便移植 CONFIG(debug, debug|release) {DESTDIR $$_PRO_FILE_PWD_/../../../debugXXXsystem } else {DESTDIR $$_PRO_FILE_PWD_/../../../realeaseXXXsystem } 是用于 Qt 项目…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...
uni-app学习笔记三十五--扩展组件的安装和使用
由于内置组件不能满足日常开发需要,uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件,需要安装才能使用。 一、安装扩展插件 安装方法: 1.访问uniapp官方文档组件部分:组件使用的入门教程 | uni-app官网 点击左侧…...

