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

Dockerfile常用指令详解

Dockerfile 是一个用于定义 Docker 镜像构建过程的脚本文件,其中包含了一系列指令,用于指定如何构建和配置镜像。以下是一些常用的 Dockerfile 指令及其示例用法:

1. FROM

指定基础镜像,Dockerfile 必须以该指令开始。

示例:

FROM ubuntu:20.04

这行表示以 Ubuntu 20.04 作为基础镜像。

2. RUN

执行命令行指令,通常用于安装软件包或进行系统配置。

示例:

RUN apt-get update && apt-get install -y curl

这行表示在镜像中更新包列表并安装 curl

3. COPY

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

示例:

COPY ./myapp /app

这行表示将当前目录下的 myapp 文件夹复制到镜像中的 /app 目录。

4. ADD

类似于 COPY,但支持自动解压 tar 文件并且可以从 URL 直接下载文件。

示例:

ADD myapp.tar.gz /app

5. WORKDIR

设置工作目录,此后的命令将在该目录下执行。

示例:

WORKDIR /app

这行表示设置 /app 为工作目录。

6. CMD

指定容器启动时执行的命令。Dockerfile 中只能有一个 CMD,多个会被覆盖。

示例:

CMD ["python", "app.py"]

这行表示容器启动时执行 python app.py 命令。

7. ENTRYPOINT

类似于 CMD,但通常用于定义一个固定的命令,CMD 的参数会被附加到 ENTRYPOINT 的后面。

示例:

ENTRYPOINT ["python"]
CMD ["app.py"]

这行表示容器启动时执行 python app.py,用户运行容器时提供的参数会附加在 python 命令后面。

8. ENV

设置环境变量,构建时和运行时都可以使用。

示例:

ENV APP_HOME /app

这行表示设置环境变量 APP_HOME/app

9. EXPOSE

声明容器暴露的端口,通常用于文档目的。

示例:

EXPOSE 8080

这行表示容器将暴露 8080 端口。

10. VOLUME

创建一个挂载点,指定将来容器运行时可以将宿主机目录挂载到该点。

示例:

VOLUME /data

这行表示在 /data 目录创建一个挂载点。

11. USER

指定运行后续命令的用户,默认为 root。

示例:

USER nobody

这行表示之后的命令将以 nobody 用户运行。

12. ARG

定义构建时的参数,可以在构建时通过 --build-arg 传递值。

示例:

ARG VERSION=1.0
RUN echo "Building version $VERSION"

这行表示定义了构建时的参数 VERSION,并在运行命令时使用它。

13. LABEL

添加元数据到镜像中,通常用于描述镜像信息。

示例:

LABEL maintainer="yourname@example.com"

这行表示为镜像添加了维护者信息。

14. HEALTHCHECK

指定容器的健康检查命令,以便 Docker 可以定期检查容器是否正常工作。

示例:

HEALTHCHECK CMD curl --fail http://localhost:8080/ || exit 1

这行表示每次运行 curl 命令检查服务状态,失败则认为容器不健康。

15. SHELL

指定后续 RUN 指令使用的 shell,默认是 /bin/sh -c

示例:

SHELL ["/bin/bash", "-c"]

这行表示后续的 RUN 指令将使用 bash 来执行。

这些指令可以组合使用,定义出一个功能强大的 Dockerfile,帮助你构建所需的 Docker 镜像。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 在NVIDIA jetson中使用jetson-ffmpeg调用硬件编解码加速处理
  • TCP的连接建立及报文段首部格式
  • ESP32-IDF 在 Ubuntu 下的配置
  • 【xilinx】Vivado 成功运行Ubuntu需要哪些 文件?
  • 微软RDL远程代码执行超高危漏洞(CVE-2024-38077)漏洞检测排查方式
  • JavaSE基础(12)——文件、递归、IO流
  • 未知单播泛洪原因
  • 日志审计Graylog 使用教程-kafka收取消息
  • 【数据结构】一篇讲清楚什么是堆? 带图食用超详细~
  • go-zero接入skywalking链路追踪
  • C语言高手参考手册:函数进阶技巧
  • C++基础面试题 | C++中值传递和引用传递的区别?
  • 基于Kotlin Multiplatform的鸿蒙跨平台开发实践
  • Leetcode 2760.最长奇偶子数组
  • Linux:Linux多线程
  • 【译】JS基础算法脚本:字符串结尾
  • 0基础学习移动端适配
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • Java教程_软件开发基础
  • React 快速上手 - 07 前端路由 react-router
  • React-生命周期杂记
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 反思总结然后整装待发
  • - 概述 - 《设计模式(极简c++版)》
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 使用parted解决大于2T的磁盘分区
  • 通信类
  • 我的业余项目总结
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • k8s使用glusterfs实现动态持久化存储
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 阿里云API、SDK和CLI应用实践方案
  • ​14:00面试,14:06就出来了,问的问题有点变态。。。
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​TypeScript都不会用,也敢说会前端?
  • ​渐进式Web应用PWA的未来
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (12)Linux 常见的三种进程状态
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (TOJ2804)Even? Odd?
  • (二)JAVA使用POI操作excel
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (十三)MipMap
  • (算法)硬币问题
  • (一)Java算法:二分查找
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)创业家杂志:UCWEB天使第一步
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...