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

学习 Dockerfile 常用指令

学习 Dockerfile 常用指令

在构建 Docker 镜像时,Dockerfile 文件是一份至关重要的配置文件,它定义了构建镜像的所有步骤。通过在 Dockerfile 中使用不同的指令(命令),我们可以控制镜像的构建过程、设置环境、指定执行命令等。本文将为你详细介绍 Dockerfile 中常用的指令及其用途,帮助你更好地理解和使用 Docker。

1. FROM

FROM 是 Dockerfile 中最基本的指令,它指定了基础镜像,所有的 Docker 镜像都需要从某个基础镜像开始构建。

  • 作用:指定基础镜像。
  • 语法
    FROM <image-name>:<tag>
    
  • 示例
    FROM node:20-slim
    
    解释:这个指令表示使用 node:20-slim 作为基础镜像。

2. RUN

RUN 指令用于在镜像构建时执行命令。它可以用来安装软件包、运行脚本等,常用于配置和安装依赖。

  • 作用:在镜像构建时执行命令。
  • 语法
    RUN <command>
    
  • 示例
    RUN apt-get update && apt-get install -y curl
    
    解释:该指令更新包管理器并安装 curl

3. CMD

CMD 指令指定容器启动时执行的默认命令。如果用户没有在运行容器时指定其他命令,Docker 将执行 CMD 中定义的命令。

  • 作用:指定容器启动时的默认命令。
  • 语法
    CMD ["executable", "param1", "param2"]
    
    或者
    CMD command param1 param2
    
  • 示例
    CMD ["node", "server.js"]
    
    解释:如果用户未指定其他命令,容器启动时将执行 node server.js

4. ENTRYPOINT

ENTRYPOINTCMD 类似,但具有更强的控制力。无论你传递什么命令给 docker runENTRYPOINT 定义的命令都会被执行。CMD 可以用来提供默认参数。

  • 作用:指定容器启动时始终执行的命令。
  • 语法
    ENTRYPOINT ["executable", "param1", "param2"]
    
  • 示例
    ENTRYPOINT ["node", "server.js"]
    
    解释:容器启动时始终执行 node server.js,无论传入什么命令行参数。

5. WORKDIR

WORKDIR 指令用于设置容器中的工作目录,所有后续的命令(如 RUNCMD)都将在该目录下执行。

  • 作用:设置工作目录。
  • 语法
    WORKDIR <path>
    
  • 示例
    WORKDIR /app
    
    解释:将工作目录设置为 /app,后续的操作会在此目录下进行。

6. COPY

COPY 指令用于将文件或目录从主机复制到容器的指定位置。

  • 作用:复制本地文件或目录到容器中。
  • 语法
    COPY <source> <destination>
    
  • 示例
    COPY . /app
    
    解释:将当前目录(主机中的 . )复制到容器中的 /app 目录。

7. ADD

ADD 指令类似于 COPY,但功能更强大,支持从 URL 下载文件并自动解压文件。

  • 作用:将本地文件或远程文件复制到容器,并且支持解压。
  • 语法
    ADD <source> <destination>
    
  • 示例
    ADD ./config.tar.gz /app/config/
    
    解释:该指令将压缩包 config.tar.gz 解压到容器中的 /app/config/ 目录。

8. ENV

ENV 指令用于设置环境变量,这些变量会在容器的整个生命周期中可用。

  • 作用:设置环境变量。
  • 语法
    ENV <key>=<value>
    
  • 示例
    ENV NODE_ENV production
    
    解释:设置环境变量 NODE_ENVproduction,后续的命令或运行时都能访问到这个环境变量。

9. EXPOSE

EXPOSE 指令用于声明容器监听的端口,通常用于文档说明,告诉其他开发者容器会监听哪些端口。它不会实际打开端口。

  • 作用:声明容器暴露的端口。
  • 语法
    EXPOSE <port>
    
  • 示例
    EXPOSE 3000
    
    解释:声明容器会监听端口 3000,容器在运行时,可以通过 docker run -p 映射到主机端口。

10. VOLUME

VOLUME 指令用于创建一个挂载点,可以将宿主机的目录或 Docker 卷挂载到容器中,以便数据持久化。

  • 作用:定义容器挂载点,持久化数据。
  • 语法
    VOLUME ["/path"]
    
  • 示例
    VOLUME ["/data"]
    
    解释:创建一个名为 /data 的挂载点,可以将容器中的数据持久化。

11. USER

USER 指令用于指定在容器中运行后续命令的用户,通常为了安全考虑,避免以 root 用户运行容器。

  • 作用:指定容器内运行命令的用户。
  • 语法
    USER <username>
    
  • 示例
    USER node
    
    解释:后续命令将以 node 用户身份执行。

12. HEALTHCHECK

HEALTHCHECK 指令定义容器的健康检查命令。Docker 会周期性地执行这个命令来检查容器是否运行正常。

  • 作用:定义健康检查命令。
  • 语法
    HEALTHCHECK CMD <command>
    
  • 示例
    HEALTHCHECK CMD curl --fail http://localhost:3000/health || exit 1
    
    解释:容器会定期执行 curl 命令来检查应用是否可用。

13. STOPSIGNAL

STOPSIGNAL 指令用于定义容器停止时发送的信号,默认情况下是 SIGTERM

  • 作用:定义停止容器时的信号。
  • 语法
    STOPSIGNAL <signal>
    
  • 示例
    STOPSIGNAL SIGKILL
    
    解释:当容器停止时,Docker 将发送 SIGKILL 信号,而不是默认的 SIGTERM

14. ARG

ARG 指令用于定义构建时的变量,它的作用范围仅限于构建阶段。

  • 作用:定义构建时的变量。
  • 语法
    ARG <name>[=<default value>]
    
  • 示例
    ARG NODE_VERSION=20
    FROM node:${NODE_VERSION}-slim
    
    解释:定义 NODE_VERSION 变量,并在 FROM 中使用该变量。

总结

指令作用执行时机
FROM指定镜像基础构建时
RUN执行命令,生成中间镜像构建时
CMD容器启动时的默认命令容器运行时
ENTRYPOINT容器启动时强制执行的命令容器运行时
WORKDIR指定工作目录构建+运行时
COPY复制本地文件构建时
ADD复制或解压本地/URL 文件构建时
ENV设置环境变量构建+运行时
EXPOSE指定要暴露的端口仅用于文档
VOLUME定义可挂载的存储路径容器运行时
USER指定运行命令的用户构建+运行时
HEALTHCHECK健康检查容器运行时

掌握这些常用指令,可以帮助你更加高效地编写和管理 Dockerfile,构建出高质量的 Docker 镜像。希望本文能对你有所帮助,欢迎留言交流!

相关文章:

学习 Dockerfile 常用指令

学习 Dockerfile 常用指令 在构建 Docker 镜像时&#xff0c;Dockerfile 文件是一份至关重要的配置文件&#xff0c;它定义了构建镜像的所有步骤。通过在 Dockerfile 中使用不同的指令&#xff08;命令&#xff09;&#xff0c;我们可以控制镜像的构建过程、设置环境、指定执行…...

day11 性能测试(3)——Jmeter 断言+关联

【没有所谓的运气&#x1f36c;&#xff0c;只有绝对的努力✊】 目录 1、复习 2、查看结果树 多个http请求原因分析 3、作业 4、Jmeter断言 4.1 响应断言 4.1.1 案例 4.1.2 小结 4.2 json断言 4.2.1 案例 4.2.2 小结 4.3 断言持续时间 4.3.1 案例 4.3.2 小结 4.…...

ES6中的map和set

Map JS的数据对象&#xff08;Obejct&#xff09;&#xff0c;本质上是键值对的集合&#xff08;Hash结构&#xff09;&#xff0c;但是传统上只能用字符串当作键&#xff08;一定程度上对其的使用有限制&#xff09; 比如下面代码 const data {} const element document.…...

UE5中实现Billboard公告板渲染

公告板&#xff08;Billboard&#xff09;通常指永远面向摄像机的面片&#xff0c;游戏中许多技术都基于公告板&#xff0c;例如提示拾取图标、敌人血槽信息等&#xff0c;本文将使用UE5和材质节点制作一个公告板。 Gif效果&#xff1a; 网格效果&#xff1a; 1.思路 通过…...

泊松编辑 possion editing图像合成笔记

开源地址&#xff1a; GitHub - kono-dada/Reproduction-of-possion-image-editing 掩码必须是矩形框...

#渗透测试#漏洞挖掘#红蓝攻防#SRC漏洞挖掘

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…...

系列2:基于Centos-8.6Kubernetes 集成GPU资源信息

每日禅语 自省&#xff0c;就是自我反省、自我检查&#xff0c;自知己短&#xff0c;从而弥补短处、纠正过失。佛陀强调自觉觉他&#xff0c;强调以达到觉行圆满为修行的最高境界。要改正错误&#xff0c;除了虚心接受他人意见之外&#xff0c;还要不忘时时观照己身。自省自悟之…...

Coturn 实战指南:WebRTC 中的 NAT 穿透利器

1. 什么是 Coturn&#xff1f; Coturn 是一种开源的 TURN(Traversal Using Relays around NAT)服务器&#xff0c;用于解决 NAT 穿透问题。它帮助客户端在受限网络环境(例如防火墙或 NAT 后面)中实现双向通信&#xff0c;常用于 WebRTC 应用、VoIP、在线游戏等场景。 2. Cotur…...

基于卷积神经网络的Caser算法

将一段交互序列嵌入到一个以时间为纵轴的平面空间中形成“一张图”后&#xff0c;基于卷积序列嵌入的推荐&#xff08;Caser&#xff09;算法利用多个不同大小的卷积滤波器&#xff0c;来捕捉序列中物品间的点级&#xff08;point-level&#xff09;、联合的&#xff08;union-…...

自闭症在学校:了解自闭症的特点,优化学校教育方式

在教育的广阔天地里&#xff0c;每一片叶子都承载着生命的独特韵律&#xff0c;每一朵花都在以自己的方式绽放。然而&#xff0c;在特殊教育的花园里&#xff0c;有一群孩子&#xff0c;他们或许不那么容易被看见&#xff0c;不那么容易与世界沟通&#xff0c;但他们同样拥有学…...

多线程的知识总结(8):用 thread 类 或全局 async (...) 函数,创建新线程时,谁才是在新线程里第一个被执行的函数

&#xff08;40&#xff09;用 thread 类 或全局 async (…) 函数&#xff0c;创建新线程时&#xff0c;谁才是在新线程里第一个被执行的函数&#xff1f; 弄清楚这个问题&#xff0c;有利于推测和理解线程中代码的执行流程。根据 thread 类 和 async &#xff08;…&#xff0…...

ArcGIS地理空间平台manager存在任意文件读取漏洞

免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...

HarmonyOS Next 元服务新建到上架全流程

HarmonyOS Next 元服务新建到上架全流程 接上篇 这篇文章的主要目的是介绍元服务从新建到上家的完整流程 在AGC平台上新建一个项目 链接 一个项目可以多个应用 AGC新建一个元服务应用 新建一个本地元服务项目 如果成功在AGC平台上新建过元服务&#xff0c;那么这里会自动显…...

【Linux】makefile项目管理

前言 makefile是一种自动化构建工具&#xff0c;广泛用于管理和编译项目&#xff0c;特别是在C和C等语言中。它通过定义规则来控制源代码的编译、链接和清理等过程。以下是一个基本的Makefile结构和示例&#xff0c;帮助你理解如何管理项目&#xff1a; 首先&#xff1a;创建…...

Lumos学习王佩丰Excel第二十一讲:经典Excel动态图表实现原理

一、动态图表实现原理 1、理解图表中的数据系列 在Excel图表中&#xff0c;系列指的是图表中的数据集合&#xff0c;它通常代表着一个数据源。每个系列都可以包含多个数据点&#xff0c;这些数据点在图表中以特定的形式展现&#xff0c;如柱状图中的柱子&#xff0c;折线图中…...

Linux框架(二)——pinctrl和gpio子系统

基于设备树的 LED 驱动&#xff0c;但是驱动的本质还是没变&#xff0c;都是配置 LED 灯所使用的 GPIO 寄存器&#xff0c;驱动开发方式和裸机基本没啥区别。 Linux 内核提供了 pinctrl 和 gpio 子系统用于GPIO 驱动&#xff0c;本章我们就来学习一下如何借助 pinctrl 和 gpio…...

C++ string的基本概念

文章目录 1. 什么是string&#xff1f;2. auto和范围for的使用2. 1 auto2. 2 范围for 3. 迭代器的概念、const string的概念3. 1 迭代器的概念3. 2 const string的概念 1. 什么是string&#xff1f; 在了解什么是string之前&#xff0c;我们首先需要知道字符串是什么。在C语言中…...

MAC虚拟机上安装WDA环境

MAC虚拟机上安装WDA环境 一、MAC虚拟机切换root权限二、macOS上安装xcode若你的macOS系统可以在appstore下载安装若你安装的macOS系统版本太低&#xff0c;无法在appstore上安装xcode 三、macOS上安装WebDriverAgent四、使用xcode配置WDA安装到手机上高版本系统支持 一、MAC虚拟…...

与 Cursor AI 对话编程:2小时开发报修维修微信小程序

本文记录了如何通过与 Cursor AI 对话&#xff0c;全程不写一行代码的情况下&#xff0c;完成一个完整的报修小程序。整个过程展示了 AI 如何帮助我们&#xff1a; 生成代码 、解决问题、优化实现、完善细节。 先看一下效果图&#xff1a; 一、项目配置 首先我是这样和 AI 对…...

leetcode-73.矩阵置零-day5

class Solution {public void setZeroes(int[][] mat) {int m mat.length, n mat[0].length;// 1. 扫描「首行」和「首列」记录「首行」和「首列」是否该被置零boolean r0 false, c0 false;for (int i 0; i < m; i) {if (mat[i][0] 0) {r0 true;break;}}for (int j …...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...