闲的蛋疼整理了一下Dockerfile的命令和参数备查
Dockerfile 主要指令及参数:
指令 | 主要参数 | 作用 | 用法示例 |
---|---|---|---|
FROM | <image>[:<tag>] [AS <name>] | 指定基础镜像 | FROM ubuntu:24.04 AS base |
RUN | <command> 或 ["executable", "param1", "param2"] | 执行命令,通常用于安装软件包 | RUN apt-get update && apt-get install -y python3 |
CMD | <command> 或 ["executable","param1","param2"] | 指定容器启动时执行的命令 | CMD ["python3", "app.py"] |
LABEL | <key>=<value> | 为镜像添加元数据 | LABEL version="1.0" description="This is my app" |
EXPOSE | <port>[/<protocol>] | 声明容器运行时监听的端口 | EXPOSE 80/tcp |
ENV | <key>=<value> | 设置环境变量 | ENV NODE_ENV production |
ADD | <src>... <dest> | 复制文件,支持URL和自动解压 | ADD https://example.com/big.tar.xz /usr/src/things/ |
COPY | [--chown=<user>:<group>] <src>... <dest> | 复制文件或目录 | COPY --chown=user:group files* /data/ |
ENTRYPOINT | ["executable", "param1", "param2"] | 设置容器的入口点,通常与CMD结合使用 | ENTRYPOINT ["nginx", "-g", "daemon off;"] |
VOLUME | ["/data"] | 创建挂载点,用于持久化数据 | VOLUME ["/var/log/"] |
USER | <user>[:<group>] | 指定运行容器时的用户名或UID | USER www-data |
WORKDIR | /path/to/workdir | 设置工作目录 | WORKDIR /app |
ARG | <name>[=<default value>] | 定义构建参数,可以在构建时传递 | ARG VERSION=latest |
ONBUILD | INSTRUCTION | 为镜像添加触发器,执行特定命令 | ONBUILD RUN /usr/local/bin/python-build --dir /app/src |
STOPSIGNAL | signal | 设置停止容器的系统调用信号 | STOPSIGNAL SIGTERM |
HEALTHCHECK | [OPTIONS] CMD command | 定义容器健康检查 | `HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/ |
SHELL | ["executable", "parameters"] | 覆盖默认shell | SHELL ["/bin/bash", "-c"] |
COPY --from | 从多阶段构建中复制文件 | COPY --from=builder /app /app | |
RUN --mount | 在构建时挂载目录或缓存 | RUN --mount=type=cache,target=/root/.cache pip install -r requirements.txt |
额外的参数和选项:
COPY和ADD指令:
--chown=\<user\>:\<group\>
--chmod=\<permissions>
--from=\<name|index>
RUN指令:
--mount=type=\<type>,target=\<path>,source=\<source>
--network=\<network>
--security=\<security-opt>
HEALTHCHECK指令选项:
--interval=DURATION
(默认: 30s)--timeout=DURATION
(默认: 30s)--start-period=DURATION
(默认: 0s)--retries=N
(默认: 3)
ARG指令:
- 可以在FROM指令之前使用,影响基础镜像的选择
多阶段构建相关:
FROM \<image\> AS \<stage>
COPY --from=\<stage\> \<src\> \<dest>
Dockerfile样例:
> #### 注意:此文件仅用于参考,不要直接使用
# 语法版本声明
# syntax=docker/dockerfile:1
# 定义构建参数
ARG BASE_IMAGE=ubuntu:24.04
# 指定基础镜像
FROM ${BASE_IMAGE} AS base
# 设置维护者信息(已弃用,使用LABEL代替)
MAINTAINER John Doe <john.doe@example.com>
# LABEL添加元数据
# 代替MAINTAINER
LABEL org.opencontainers.image.authors="John Doe <john@example.com>"
LABEL version="1.0" description="这是一个示例Dockerfile"
# 设置环境变量
ENV APP_HOME=/app \
NODE_ENV=production
# 设置工作目录
WORKDIR ${APP_HOME}
# 复制文件到镜像中
COPY --chown=node:node . .
# 添加远程文件到镜像中
ADD https://example.com/big.tar.xz /tmp/
# 运行命令
RUN apt-get update && apt-get install -y python3 \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# 使用挂载运行命令(需要BuildKit支持)
RUN --mount=type=cache,target=/root/.cache \
pip install -r requirements.txt
# 暴露端口
EXPOSE 8080
# 创建数据卷
VOLUME ["/data"]
# 设置默认用户
USER node
# 定义健康检查
HEALTHCHECK --interval=5m --timeout=3s \
CMD curl -f http://localhost:8080/ || exit 1
# 设置容器启动时运行的命令
ENTRYPOINT ["node"]
# 设置默认命令
CMD ["app.js"]
# 设置停止信号
STOPSIGNAL SIGTERM
# 更改默认shell
SHELL ["/bin/bash", "-c"]
# 多阶段构建:新阶段
FROM base AS production
# 为子镜像添加触发器指令
ONBUILD RUN echo "This is triggered when used as a base image"
# 从之前阶段复制文件
COPY --from=base ${APP_HOME} ${APP_HOME}
> AI提醒构建Dockerfile时要注意的问题:
> - 某些指令(如HEALTHCHECK和RUN --mount)
需要较新版本的Docker或特定的构建器(如BuildKit)才能使用。
> - 在实际使用中,您通常不会在一个Dockerfile中使用所有这些指令。应该根据项目需求选择适当的指令。
> - 指令的顺序很重要,特别是像FROM、ARG、ENV
这样的指令,它们会影响后续指令的行为。
> - 多阶段构建(在此示例中使用FROM ... AS ...
)是一种优化镜像大小和提高安全性的高级技术。
> - MAINTAINER
指令已被弃用,建议使用LABEL
来添加维护者信息。
参考:
[1] https://docs.docker.com/reference/dockerfile/
[2] https://docs.docker.com/build/concepts/dockerfile/
闲的蛋疼整理了一下Dockerfile的命令和参数备查的更多相关文章
- [闲的蛋疼系列]从零开始用TypeScript写React的UI组件(0)-先写一个Button??
0.咸鱼要说的 一入前端深似海,咸鱼入海更加咸. 最近闲的蛋疼,手上年前的事也完成了7788了,借助[PG1]的话来说,我们要keep real. 咸鱼肯定不real 了,因为我们都活在梦里,所以咱们 ...
- Docker - Dockerfile - 常见命令简介
概述 感觉是个 比较重要的东西 有个疑问 我是先讲 docker build 还是 先讲 Dockerfile 穿插讲 docker build 最基本的东西 原理 -t -f docker file ...
- 学习Docker之Dockerfile的命令
使用Dockerfile去构建镜像好比堆积木.使用pom去构建maven项目一样,有异曲同工之妙,下面就把Dockerfile中主要的命令介绍一下. 组成部分 部分 命令 基础镜像信息 FROM 维护 ...
- dockerfile基础命令
一直想写一个, 但发现网上有很多了, 直接copy把 如何使用 Dockerfile用来创建一个自定义的image,包含了用户指定的软件依赖等.当前目录下包含Dockerfile,使用命令build来 ...
- 整理:WPF用于绑定命令和触发路由事件的自定义控件写法
原文:整理:WPF用于绑定命令和触发路由事件的自定义控件写法 目的:自定义一个控件,当点击按钮是触发到ViewModel(业务逻辑部分)和Xaml路由事件(页面逻辑部分) 自定义控件增加IComman ...
- csdn我的blog成长轨迹(好吧我是闲的蛋疼)
2014-06-26 21:26 2014-06-28 15:17 2014-07-03 14:35 2014-08-31 0922 ...
- 闲着蛋疼没事干,写个Mac端的Kcptun Client管理器
原理: 执行一行脚本 输入服务器地址,端口,密码等做了图形化编辑 可以控制Kcptun是否正在运行 App已上传github https://github.com/nicky2k8/KcptunCli ...
- 闲得蛋疼,JavaScript版本BadApple
参考Vim版本的BadApple改写而成.由于加载数据比较大,可能网速不给力的童鞋效果不太好,多刷新几次就好了,^_^.运行环境:支持HTML5 Canvas的浏览器.1. 代码:$(functio ...
- 闲着蛋疼看下a++的过程
赋值过程 int a = 1; int b = a++; x86 反汇编: int a = 1; 00D06428 C7 45 F8 01 00 00 00 mov dword ptr [a],1 i ...
- 016、Dockerfile 常用命令(2019-01-07 周一)
参考https://www.cnblogs.com/CloudMan6/p/6864000.html Dokcerfile常见命令 FROM 指定base镜像 MAINTAINER ...
随机推荐
- 利用SpringBoot+rabbitmq 实现邮件异步发送,保证100%投递成功
在之前的文章中,我们详细介绍了 SpringBoot 整合 mail 实现各类邮件的自动推送服务. 但是这类服务通常不稳定,当出现网络异常的时候,会导致邮件推送失败. 本篇文章将介绍另一种高可靠的服务 ...
- redis基本数据结构-有序集合
redis基本数据结构-有序集合zset 特性 使用哈希表+跳表数据结构存储 每个元素由 分数和字段名 两部分组成 增加元素 zadd key score1 member1 [score2 membe ...
- C++11标准库<chrono><future> <atomic><condition_variable><mutex><thread>梳理 (5万字)
<chrono> C++11中提供了日期和时间相关的库chrono. chrono库主要包含三种类型的类:时间间隔duration.时钟clocks.时间点time point. 时间间隔 ...
- oeasy教您玩转vim - 39 - # 剪切粘贴
剪切粘贴 回忆上节课内容 我们大幅度地复习了整个 motion: 直接运动 h j k l 行运动 首行g g 末行G 第n行n G 单词运动 wbe w 是到下一个 word 的开头 b 是到当 ...
- 数据仓库建模工具之一——Hive学习第四天
Hive的基本操作 1.3HIve的表操作(接着昨天的继续学习) 1.3.2 显示表 show tables; show tables like 'u*'; desc t_person; desc f ...
- ScaleDet:AWS 基于标签相似性提出可扩展的多数据集目标检测器 | CVPR 2023
论文提出了一种可扩展的多数据集目标检测器(ScaleDet),可通过增加训练数据集来扩大其跨数据集的泛化能力.与现有的主要依靠手动重新标记或复杂的优化来统一跨数据集标签的多数据集学习器不同,论文引入简 ...
- SQL 注入漏洞详解 - Union 注入
1)漏洞简介 SQL 注入简介 SQL 注入 即是指 Web 应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在 Web 应用程序中事先定义好的查询语句的结尾上添加额外的 SQL 语句,在 ...
- WordPress基础之主题和插件安装
本篇文章学习WordPress如何安装主题.插件.同时推荐几个我常用的主题.插件及其设置方法. WordPress有海量的主题和插件,有付费的,也有免费的.每个主题都有自己的优缺点,当然,你可以在WP ...
- 全网最适合入门的面向对象编程教程:27 类和对象的Python实现-Python中异常层级与自定义异常类的实现
全网最适合入门的面向对象编程教程:27 类和对象的 Python 实现-Python 中异常层级与自定义异常类的实现 摘要: 本文主要介绍了在使用 Python 进行面向对象编程时,异常的层级和如何使 ...
- 【SpringBoot】11 Web开发 Part2 模板引擎
开发回顾: JavaWeb开发使用JSP技术,所有的页面文件必须是JSP,才能接受数据处理 JSP的好处是,数据交互方便,有JSTL补充 SpringBoot的区别: 我们最终的项目是一个jar包 内 ...