学习 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
ENTRYPOINT
和 CMD
类似,但具有更强的控制力。无论你传递什么命令给 docker run
,ENTRYPOINT
定义的命令都会被执行。CMD
可以用来提供默认参数。
- 作用:指定容器启动时始终执行的命令。
- 语法:
ENTRYPOINT ["executable", "param1", "param2"]
- 示例:
解释:容器启动时始终执行ENTRYPOINT ["node", "server.js"]
node server.js
,无论传入什么命令行参数。
5. WORKDIR
WORKDIR
指令用于设置容器中的工作目录,所有后续的命令(如 RUN
、CMD
)都将在该目录下执行。
- 作用:设置工作目录。
- 语法:
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_ENV
为production
,后续的命令或运行时都能访问到这个环境变量。
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>
- 示例:
解释:当容器停止时,Docker 将发送STOPSIGNAL SIGKILL
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 镜像时,Dockerfile 文件是一份至关重要的配置文件,它定义了构建镜像的所有步骤。通过在 Dockerfile 中使用不同的指令(命令),我们可以控制镜像的构建过程、设置环境、指定执行…...

day11 性能测试(3)——Jmeter 断言+关联
【没有所谓的运气🍬,只有绝对的努力✊】 目录 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的数据对象(Obejct),本质上是键值对的集合(Hash结构),但是传统上只能用字符串当作键(一定程度上对其的使用有限制) 比如下面代码 const data {} const element document.…...

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

泊松编辑 possion editing图像合成笔记
开源地址: GitHub - kono-dada/Reproduction-of-possion-image-editing 掩码必须是矩形框...

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

系列2:基于Centos-8.6Kubernetes 集成GPU资源信息
每日禅语 自省,就是自我反省、自我检查,自知己短,从而弥补短处、纠正过失。佛陀强调自觉觉他,强调以达到觉行圆满为修行的最高境界。要改正错误,除了虚心接受他人意见之外,还要不忘时时观照己身。自省自悟之…...
Coturn 实战指南:WebRTC 中的 NAT 穿透利器
1. 什么是 Coturn? Coturn 是一种开源的 TURN(Traversal Using Relays around NAT)服务器,用于解决 NAT 穿透问题。它帮助客户端在受限网络环境(例如防火墙或 NAT 后面)中实现双向通信,常用于 WebRTC 应用、VoIP、在线游戏等场景。 2. Cotur…...

基于卷积神经网络的Caser算法
将一段交互序列嵌入到一个以时间为纵轴的平面空间中形成“一张图”后,基于卷积序列嵌入的推荐(Caser)算法利用多个不同大小的卷积滤波器,来捕捉序列中物品间的点级(point-level)、联合的(union-…...
自闭症在学校:了解自闭症的特点,优化学校教育方式
在教育的广阔天地里,每一片叶子都承载着生命的独特韵律,每一朵花都在以自己的方式绽放。然而,在特殊教育的花园里,有一群孩子,他们或许不那么容易被看见,不那么容易与世界沟通,但他们同样拥有学…...

多线程的知识总结(8):用 thread 类 或全局 async (...) 函数,创建新线程时,谁才是在新线程里第一个被执行的函数
(40)用 thread 类 或全局 async (…) 函数,创建新线程时,谁才是在新线程里第一个被执行的函数? 弄清楚这个问题,有利于推测和理解线程中代码的执行流程。根据 thread 类 和 async (…࿰…...
ArcGIS地理空间平台manager存在任意文件读取漏洞
免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...

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

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

Lumos学习王佩丰Excel第二十一讲:经典Excel动态图表实现原理
一、动态图表实现原理 1、理解图表中的数据系列 在Excel图表中,系列指的是图表中的数据集合,它通常代表着一个数据源。每个系列都可以包含多个数据点,这些数据点在图表中以特定的形式展现,如柱状图中的柱子,折线图中…...

Linux框架(二)——pinctrl和gpio子系统
基于设备树的 LED 驱动,但是驱动的本质还是没变,都是配置 LED 灯所使用的 GPIO 寄存器,驱动开发方式和裸机基本没啥区别。 Linux 内核提供了 pinctrl 和 gpio 子系统用于GPIO 驱动,本章我们就来学习一下如何借助 pinctrl 和 gpio…...
C++ string的基本概念
文章目录 1. 什么是string?2. auto和范围for的使用2. 1 auto2. 2 范围for 3. 迭代器的概念、const string的概念3. 1 迭代器的概念3. 2 const string的概念 1. 什么是string? 在了解什么是string之前,我们首先需要知道字符串是什么。在C语言中…...

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

与 Cursor AI 对话编程:2小时开发报修维修微信小程序
本文记录了如何通过与 Cursor AI 对话,全程不写一行代码的情况下,完成一个完整的报修小程序。整个过程展示了 AI 如何帮助我们: 生成代码 、解决问题、优化实现、完善细节。 先看一下效果图: 一、项目配置 首先我是这样和 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 …...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...

selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...

莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...

在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...

tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...
学习一下用鸿蒙DevEco Studio HarmonyOS5实现百度地图
在鸿蒙(HarmonyOS5)中集成百度地图,可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API,可以构建跨设备的定位、导航和地图展示功能。 1. 鸿蒙环境准备 开发工具:下载安装 De…...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...
加密通信 + 行为分析:运营商行业安全防御体系重构
在数字经济蓬勃发展的时代,运营商作为信息通信网络的核心枢纽,承载着海量用户数据与关键业务传输,其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级,传统安全防护体系逐渐暴露出局限性&a…...
手动给中文分词和 直接用神经网络RNN做有什么区别
手动分词和基于神经网络(如 RNN)的自动分词在原理、实现方式和效果上有显著差异,以下是核心对比: 1. 实现原理对比 对比维度手动分词(规则 / 词典驱动)神经网络 RNN 分词(数据驱动)…...