Dockerfile 是一个文本文件,包含了一系列用于构建 Docker 镜像的指令。以下是 Dockerfile 中常见指令的详细解释:

基础指令

1. FROM

指定基础镜像,必须为第一条指令(注释除外)。

FROM ubuntu:20.04
FROM python:3.9-slim

2. LABEL

为镜像添加元数据(键值对)。

LABEL maintainer="your.email@example.com"
LABEL version="1.0"
LABEL description="This is a custom image"

3. ENV

设置环境变量,可在后续指令和容器运行时使用。

ENV APP_HOME=/app
ENV PATH=$PATH:/usr/local/bin

4. WORKDIR

设置工作目录,如果目录不存在会自动创建。

WORKDIR /app

构建过程指令

5. RUN

在构建过程中执行命令,会创建新的镜像层。

RUN apt-get update && apt-get install -y \curl \nginx \&& rm -rf /var/lib/apt/lists/*

6. COPY

将文件从构建上下文复制到镜像中。

COPY . /app
COPY requirements.txt /app/
COPY --from=builder /app/bin /usr/local/bin  # 多阶段构建中从其他阶段复制

7. ADD

类似 COPY,但功能更多(自动解压 tar 文件,可从 URL 下载)。

ADD https://example.com/file.tar.gz /tmp/
ADD file.tar.gz /tmp/  # 会自动解压

容器运行时指令

8. CMD

指定容器启动时的默认命令(可被 docker run 覆盖)。

CMD ["nginx", "-g", "daemon off;"]  # 推荐使用 exec 格式
CMD echo "Hello World"  # shell 格式

9. ENTRYPOINT

配置容器启动时运行的命令(不易被覆盖)。

ENTRYPOINT ["/app/start.sh"]

10. EXPOSE

声明容器运行时监听的端口(不会自动映射)。

EXPOSE 80
EXPOSE 443

其他重要指令

11. ARG

定义构建时的变量(构建后不再存在)。

ARG VERSION=latest
FROM ubuntu:$VERSION

12. VOLUME

创建挂载点,用于持久化数据。

VOLUME /data

13. USER

指定运行后续指令的用户(和用户组)。

USER nobody
USER 1000:1000

14. HEALTHCHECK

定义容器健康检查。

HEALTHCHECK --interval=30s --timeout=3s \CMD curl -f http://localhost/ || exit 1

15. ONBUILD

添加触发器,当本镜像作为基础镜像时执行。

ONBUILD COPY . /app/src
ONBUILD RUN make /app/src

多阶段构建

16. 多阶段构建

减少最终镜像大小,只保留必要的文件。

FROM golang:1.16 AS builder
WORKDIR /go/src/app
COPY . .
RUN go build -o /go/bin/appFROM alpine:latest
COPY --from=builder /go/bin/app /usr/local/bin/app
CMD ["app"]

最佳实践

  1. 合并 RUN 指令:减少镜像层数
  2. 使用 .dockerignore:排除不必要的文件
  3. 选择合适的基础镜像:如 alpine 版本更小
  4. 清理缓存:如 apt-get/var/lib/apt/lists/
  5. 指定版本标签:避免使用 latest

示例 Dockerfile

# 多阶段构建示例
FROM node:14 AS build
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run buildFROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

理解这些指令后,你可以根据需要编写高效的 Dockerfile 来构建优化的 Docker 镜像。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/84955.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/84955.shtml
英文地址,请注明出处:http://en.pswp.cn/web/84955.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

InnoDB Cluster 与 NDB Cluster 对比及部署指南

InnoDB Cluster 与 NDB Cluster 对比及部署指南 一、核心区别对比 特性InnoDB ClusterNDB Cluster存储引擎InnoDBNDB (内存优先)架构设计基于Group Replication分布式架构(数据节点管理节点SQL节点)一致性模型最终一致性/强一致性强一致性数据持久化磁盘存储为主内存存储为主…

PySide环境配置及工具使用

文章目录 [toc]1 概述1.1 PySide 能做什么?1.2 PySide 的优点1.3 PySide 的缺点1.4 示例代码(简单窗口) 2 环境准备2.1 安装必要软件2.2 修改 pip 源 3 PySide23.1 环境要求3.2 配置PySide23.3 工具配置 4 PySide64.1 环境4.2 配置PySide64.3…

数据标注师学习内容

目录 文本标注词性标注实体标注 图像标注语音标注 文本标注 词性标注 第一篇 第二篇 实体标注 点击这里 关系标注 事件标注 意图标注 关键词标注 分类标注 问答标注 对话标注 图像标注 拉框标注 关键点标注 2D标注 3D标注 线标注 目标跟踪标注 OCR标注 图像分类标注 语音…

【linux】文件与目录命令 - rsync

文章目录 1. 基本用法2. 常用参数3. 用法举例4. 注意事项 rsync 命令用于快速同步文件和目录,可用于本地和远程传输,支持增量同步、压缩、权限保留等特性。 1. 基本用法 语法: rsync [选项] 源 目标功能: 高效增量同步&#xff…

互联网大厂Java求职面试:电商系统高并发设计

互联网大厂Java求职面试:电商系统高并发设计 文章内容 面试官(技术总监)与郑薪苦的对话 面试官: “郑薪苦,欢迎来到我们的面试。今天我们会围绕一个非常热门的话题——电商系统的高并发设计进行深入探讨。你之前在某…

Nginx跨云反向代理排错:解密配置参数的“陷阱”

前言:在当今的云计算环境中,跨云平台的应用部署变得越来越常见。为了验证跨云平台反向代理的可行性,我们进行了一次测试。本次测试将后端程序部署在阿里云服务器,同时使用在腾讯云注册的已备案国内域名。我们在腾讯云控制台将域名…

股票账户的管理和交易

中国证券登记结算有限责任公司(简称“中国结算”)确实是负责股票的账户管理(开户、销户)和登记、存管、清算、交收等后台业务的中央机构。它确保了股票所有权的准确记录和交易后资金与证券的最终转移。 而股票的交易业务&#xff…

Arcgis地理配准变换方法说明

零阶多项式 - 将使用零阶多项式来平移数据。 当已对数据进行地理配准但通过微小的平移可以更好的排列数据时,通常使用该多项式。 执行零阶多项式平移只需要一个连接线。相似性多项式 - 将使用一阶变换,尝试保持原始栅格的形状。 RMS 错误会高于其他多项式…

深入理解 C++ volatile 与 atomic:五大用法解析 + 六大高频考点

一、volatile volatile是C中一个非常重要的关键字。volatile关键字告诉编译器,被修饰的变量可能会在程序控制之外被改变,因此编译器不能对该变量的访问进行优化。什么意思呢?现代处理器架构中,有寄存器,L1缓存&#x…

跨主机管理Docker容器化应用的操作与技巧

哈喽,大家好,我是左手python! 环境准备与 Docker 安装 在开始跨主机管理 Docker 容器化应用之前,需要确保所有主机上都安装了 Docker 引擎,并且这些主机之间可以通过 SSH 协议进行通信。本节将详细介绍环境准备和 Doc…

编程实践:sigmastar330 调用IVE图像处理加速

说明:本专栏文章有两种解锁方案 1:付费订阅,畅享所有文章 2:免费获取,点击下方链接,关注,自动获取免费链接 https://free-img.400040.xyz/4/2025/04/29/6810a50b7ac8b.jpg 主题:利用IVE进行图像处理加速 Sigmastar 支持的硬件操作,基本都在:mi_ive.h 文件中,本文…

Nginx+PHP+MySQL安装参考

NginxPHPMySQL安装参考 CentOS7环境 配置CentOS7网络: CentOS(最小安装)默认是不打开网络的 启动网络 vi打开:/etc/sysconfig/network-scripts/ifcfg-ens33 文件 将 “ONBOOT:no”属性修改为:“ONBOOT:yes” 重启网络服务 # sudo service …

JavaScript中的反射魔法:揭秘Reflect对象的核心方法(下)

JavaScript中的Reflect对象:高级方法解析(下) 在JavaScript中,Reflect对象不仅提供了基础的对象操作方法(如get、set等),还包含了许多高级API,用于更精细地控制对象行为。本文将继续…

【数字人开发】Unity+百度智能云平台实现长短文本个性化语音生成功能

一、创建自己的应用 百度智能云控制台网址:https://console.bce.baidu.com/ 1、创建应用 2、获取APIKey和SecretKey 3、Api调试 调试网址:https://console.bce.baidu.com/support/?timestamp1750317430400#/api?productAI&project%E8%AF%AD%E9%…

银河麒麟 | ubuntu 搭建属于自己的邮件服务器

目录 遇权不绝就转root 更新系统 安装 Postfix 配置 Postfix 重启 Postfix 安装 Dovecot 配置 Dovecot 编辑 Dovecot 的 IMAP 配置文件 编辑 Dovecot 的用户认证配置文件 编辑 Dovecot 的服务配置文件 重启 Dovecot 安装发送邮箱功能 发送邮件 测试 遇权不绝就转…

嵌入式通信协议框架的四层架构设计与实现

文章目录 一、硬件抽象层:数据收发的基石1.1 设计要点1.2 代码示例 二、协议管理层:智能路由中枢2.1 设计要点2.2 代码示例 三、协议处理层:协议具体实现3.1 设计要求3.2代码示例3.2.1 协议公共定义3.2.2 协议一设计3.2.3 协议二设计 四、应用…

RA信号处理

ra_snr_gui.m 作用:统计不同信噪比下,五种信号的峰值旁瓣比RA和低高频均值比RM,绘制结果,参考图3.11和3.12 DFCW_RA_SNR.m 作用:产生正交离散频率编码信号,并计算峰值旁瓣比RA和低高频均值比 RM LFM_RA_S…

【go的测试】单测之gomock包与gomonkey包

目录 使用gomock包 1. 安装mockgen 2. 定义接口 3. 生成mock文件 4. 在单测中使用mock的函数 5. gomock 包的使用问题 使用gomonkey包 1. mock 一个包函数 2. mock 一个公有成员函数 3. mock 一个私有成员函数 使用gomock包 1. 安装mockgen go get -u github.com/go…

html实现登录与注册功能案例(不写死且只使用js)

目录 案例需求 实现思路 代码参考 login.html register.html 运行效果 升级思路 案例需求 需要一个登录界面和注册页面实现一个较为完整的登录注册功能 1.登录界面没有登录限制需求(降低难度),实现基本的登录判断需求,弹窗…

PHP is the best language.

PHP很好写。 众所周知Python很好写,Python 也能开发 Web 应用,但和 PHP 相比,在“直接处理网页”这件事上,PHP 更加贴近底层和原生。 想快速搭建原型或者 B 端后台工具,不妨用 PHP Laravel 来搞,真的很香…