使用Dockerfile build镜像

发布时间:2026/9/8 15:13:46

使用Dockerfile build镜像 映像是能够认作作为容器的压缩包, 它涵盖拥有应用程序以及运行该应用程序所必要的依赖, 而容器是映象的运行时候的实例。一般而言, 构建镜像时通常采用的是进行构建的方式, 而非其他方式 , 虽说在构建过程中也会创建出新层 , 然而这实际上是一种通过手工来创建镜像的途径 , 这种方式极易出现错误 , 而且效率较为低下 , 使用者对于镜像是怎样被创建出来的并不知晓 , 进而无法针对镜像开展审计工作 , 如此便存在着安全方面的隐患。我们将解释什么是如何创建以及如何使用构建映像。What is它乃是一个专门用于构建镜像的文本文件, 该文本文件之中所涵盖的内容, 有着一条条构建镜像时所必需的指令, 还有相关说明。下面将一些最常用的指令的简短说明给列出来了, 指令并不区分大小写, 然而却约定名称得使用大写。ENV进行环境变量的设置, 对环境变量予以了定义, 在后续的那些指令里面, 便能够运用这个环境变量。ARG- 跟 ENV 所起的作用是一样的。然而其作用的范围并不相同。由 ARG 所设置出来的环境变量仅仅在特定范围内才有效。就是说仅仅只有在 build 的这个过程当中是有效的。而构建完成的镜像里面是不存在这个环境变量的。FROM那个被用来构建新镜像的基础镜像, 这条指令必然得是处于当中的第一条并非注释的指令, 此规则的唯一例外情况乃是当您期望在from参数里去使用变量的时候, 在这种情形下, FROM的前面能够放上一条或者多条ARG指令。LABEL是用来给镜像增添元数据的, 像描述、版本、作者这类, 能够指定好多标签, 并且每个标签指令都是一组键值对句号。ADD具备这样一种功能, 它是专门用来把文件以及目录, 从选定的指定源处, 复制到镜像之上的指定目的地的。其中, 源能够是本地的文件, 或者是目录, 又或者是URL链接。一旦源文件属于本地tar归档文件, 那么它就会自动地进行解压缩, 之后进入到映像当中。COPY- 与ADD类似但源只能是本地文件或目录。RUN有关此当中所指定的命令, 将会于build进程期间予以执行, 每一条运行指令, 都会在当下镜像的顶部生成一个全新的层。CMD用来专门指明, 在运行容器之际, 将会据此执行的命令。并且, 在其中仅仅能够使用一条CMD指令。存在一种指令, 它和 RUN 指令相类似, 其作用是用来运行程序, 然而, 这二者运行的时间点并非一致, 并非相同喔。注意, 要是当中存在着多个CMD指令, 那么仅仅是最后一个会生效, CMD指令是能够被run命令行参数里面所指定的指令给覆盖掉的。- 与CMD类似此指令定义运行容器时将执行的命令。但是, 其不会被由run所对应的、命令行参数指定的相关指令给覆盖掉, 并且, 这些命令行参数会被当作参数送去给指令所指定的那个程序。注意如果 中如果存在多个 指令仅最后一个生效。能够与CMD命令搭配来运用: 通常来讲是变参的情形下才会用到CMD, 此处的CMD等同于在进行传参操作, 举例如下。FROM nginx ENTRYPOINT [nginx, -c] # 定参 CMD [/etc/nginx/nginx.conf] # 变参为了当前的工作 , 针对 RUN, CMD 和 COPY 以及 ADD 设置此指令。USER去设置, 在运行CMD这条指令时, 还有COPY指令时, 以及ADD指令时, 所要使用的用户名或者组。- 将主机目录装载到容器。- 用于指定容器在运行时侦听的端口。将添加至映像中的文件以及目录予以排除之举, 需于上下文目录里创建一个.文件, 使得.之语法同一于Git的.文件。a镜像的创建, 通常是从Hub那儿拉取已有的镜像, 最常被使用的基本镜像, 是这样的, 因其体积微小, 且得以优化, 能够在RAM当中运行。在这个例子里头, 我们会要来开创一个Redis映像, 我们选用18.04当作基本镜像。首先创建一个目录用于存放和程序所用到的文件:mkdir ~/redis_docker进入该目录创建,内容如下FROM ubuntu:18.04 RUN apt-get update \ apt-get install -y redis-server \ apt-get clean EXPOSE 6379 CMD [redis-server, --protected-mode no]the Image接下来的步骤是去构建镜像, 要将此行为予以执行的话, 那就从所处的目录去运行下面这样的命令:build -t /redis .选项 -t进行指定, 这时镜像名称通常是以“/:tag”这种格式呈现的, 其中包含用户名跟标记, 而标记属于可选项目。构建过程的输出将如下所示Sending build context to Docker daemon 3.584kB Step 1/4 : FROM ubuntu:18.04 --- 7698f282e524 Step 2/4 : RUN apt-get update apt-get install -y gosu redis-server apt-get clean --- Running in e80d4dd69263 ... Removing intermediate container e80d4dd69263 --- e19fb7653fca Step 3/4 : EXPOSE 6379 --- Running in 8b2a45f457cc Removing intermediate container 8b2a45f457cc --- 13b92565c201 Step 4/4 : CMD [redis-server, --protected-mode no] --- Running in a67ec50c7048 Removing intermediate container a67ec50c7048 --- d8acc14d9b6b Successfully built d8acc14d9b6b Successfully tagged linuxize/redis:latest构建完成后可使用 image ls查看镜像列表。docker image lsREPOSITORY TAG IMAGE ID CREATED SIZE linuxize/redis latest d8acc14d9b6b 4 minutes ago 100MB ubuntu 18.04 7698f282e524 5 days ago 69.9MBa现在镜像已创建可以通过以下命令运行容器docker run-d-p 6379:6379 --name redis linuxize/redis后台模式运行容器, 是通过 -d 选项来告知的, 容器 6379 端口映射到主机的 6379 端口, 是借助 -p 6379:6379 选项达成的, 指定容器名称, 运用的是 --name redis 选项。运行容器时最后一个参数 /redis , 它是用于运行容器的镜像名称。容器启动时使用以下命令列出所有正在运行的容器docker container lsCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6b7d424cd915 linuxize/redis:v0.0.1 redis-server --pro… 5 minutes ago Up 5 minutes 0.0.0.0:6379-6379/tcp redis结论本教程只是介绍运用构建镜像的基础内容, 若想要知晓关于怎样编写以及最佳实践的更多讯息, 那就去参阅有关最佳实践的相关内容, Best for |。
延伸阅读

更多相关文章

2026/9/8 15:13:46

FPGA基带与中频处理:同步检波、CIC与同步环路的工程实现

1. 先理清基带和中频在系统里的分工 做通信相关的FPGA开发,我有个习惯:拿到需求先不动代码,先把“数据流”画出来。别小看这一步,基带与中频的FPGA算法实现,本质上不是“写代码”,而是用硬件资源搭出一条能…

2026/9/8 15:08:45

运放DC参数详解:失调电压、偏置电流、开环增益、CMRR与PSRR

做硬件这几年,运放数据手册我看过不下百份,但说实话,刚入行那会儿翻开参数表,心里是发怵的。几十项参数里,Vos、Ib、Ios、Avol、CMRR、PSRR这些DC参数,名字个个都认识,真正用起来却经常被坑。我…

2026/9/8 16:24:04

基于STM32的离线语音智能家居控制系统设计与实现

1. 为什么拿STM32做智能家居语音控制:先说清楚选型逻辑做智能家居语音控制这个方向,市面上方案其实不少。有直接用ESP32连天猫精灵或小爱同学的,有上Linux板子跑离线ASR的,也有用树莓派加语音助手的。那为什么还要出一套基于STM32…

2026/9/8 16:24:04

npx一键分发AI技能包:用ponytail把零散开发经验收拢成可复用资产

我一直觉得,判断一个开发者工具生态成不成熟,不用看它的官网多漂亮,就看社区里有没有人愿意把好东西打包成“一行命令就能装”的分发形式。最近我在折腾AI编程助手的工作流时,就顺手试了一个叫 ponytail 的技能包,安装…

2026/9/8 16:24:04

GitHub热榜深度拆解:从大模型课程到个人数据归档的实战指南

每天早上我会花十几分钟刷一遍 GitHub 热榜,这个习惯维持了好几年。很多人把 Trending 当作“收藏夹入口”,刷完就完事;我把它当作一份开源项目体检报告:哪些方向在快速升温、哪些项目从“demo”变成了“可用”、哪些仓库虽然 sta…

2026/9/8 16:24:04

嵌入式MODBUS RTU串口调试实战:帧格式、CRC校验与寄存器解析

1. 内容整体设计与思路拆解 1.1 为什么嵌入式调试绕不开MODBUS 做嵌入式调试这些年,串口工具用过不下十种,但真正让我觉得“这玩意儿值得花时间吃透”的协议,MODBUS绝对排第一。原因很简单:它是工业现场的事实标准,从…

2026/9/8 16:24:04

现在这么多人转行学web前端开发,那么web前端到底能干嘛?

而现在, 有好多人在提及web前端的学习, 好多人仅仅晓得web前端薪资是高的, 然而你这样就太low了, web前端于各个行业领域都存在着应用, 能够讲是无所不能的, 那web前端究竟能够做些什么呢?不少人对于web前端的最初印象, 想来便是往昔在功能机上玩的web前端游戏, 那时我用诺基亚…

2026/9/8 16:19:03

Python 2.7函数模块编程

2.7编程中的模块与函数应用1、 开启IDLE, 能够经由开始菜单之中的2.7或者3.2程序组进去, 挑选IDLE ( GUI)就行。要是不运用IDLE, 同样能够选择别的文本编辑器去编写代码, 或者直接于DOS命令窗口里运行脚本, 操作灵活又多样, 可以依据习惯来选择适宜方式。2、 开始的时候,运用特…

2026/9/8 7:15:10

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/8 7:15:15

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/8 7:15:10

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/8 0:01:49

踩多轮坑才跑通|OpenClaw 3.1.0 双平台本地 AI 自动化搭建实操实录

🔹 工具简述 OpenClaw 是一款备受开发者与办公人群青睐的开源本地智能工具,凭借离线本地运行、可视化图形面板、全流程自主任务处理三大核心特点,积累了众多忠实用户。与普通对话类 AI 产品不同,它能够直接调用电脑的软硬件操作权…

2026/9/8 0:01:50

拒绝复杂命令行,Hermes Agent 一键包快速解锁智能办公能力

🔍前言 不少想要体验 Hermes Agent 办公能力的使用者,往往会被复杂的环境配置拦住使用脚步。手动下载匹配依赖、反复调整系统目录、处理命令行持续报错、修复权限异常、补全丢失核心文件等一系列操作,对普通使用者而言门槛较高,很…

2026/9/7 16:23:03

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/7 22:46:00

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/7 22:45:59

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码