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

Dockerfile教程

什么是Dockerfile

Dockerfile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
Dockerfile基本结构:基础镜像镜像元信息镜像操作指令容器启动时执行命令

为什么要用Dockerfile

用户可将自己的应用打包成镜像,从而让应用在容器中运行,还可对官方镜像进行扩展,打包成适合自己的应用镜像。完整的镜像结构图如下:
在这里插入图片描述

Dockerfile指令

1. FROM

from指定基础镜像。
语法格式

 FROM <image> FROM <image>:<tag> FROM <image>@<digest>

注意:

  1. FROM指令必须为第一个命令。
  2. tagdigest非必须,不指定即使用 latest版本的基础镜像。

MAINTAINER

MAINTAINER指定 Dockerfile的作者/维护者。(已弃用,推荐使用 LABEL指令)
语法格式

 MAINTAINER <author> 

LABEL

LABEL用于为镜像添加元数据
语法格式

 LABEL <key>=<value> <key>=<value> <key>=<value> ...

注意:一条 LABEL指令可指定一条或多条元数据。推荐使用将所有元数据通过一条 LABEL指令指定,防止生成过多的中间镜像。

RUN

RUN 构建过程中在镜像中执行的命令。
语法格式

 # RUN 用于构建镜像时执行的命令,有两种执行方式#Shell 执行RUN <command># exec 执行RUN ["executable", "param1", "param2", ...]

注意:

  1. 多行命令不要写多个 RUN,多行 RUN指令会建立多层,多层会导致镜像的臃肿。
  2. RUN 指令创建的中间镜像会被缓存,可在下次构建中使用,若不想使用这些缓存镜像,在构建时指定 –no-cache参数。

CMD

CMD指定容器创建时的默认命令。(可被覆盖)
语法格式

# 执行可执行文件 
CMD ["executable", "param1", "param2", ...]# 执行 Shell 命令
CMD command param1 param2 ...# 设置 ENTRYPOINT,直接调用 ENTRYPOINT 添加参数
CMD ["param1", "param2", ...]

注意:

  1. D
  2. 多个CMD指令,只有最后一个生效

ENTRYPOINT

ENTRYPOINT指定容器创建时的默认命令。(不可被覆盖)
语法格式

# 执行可执行文件 
ENTRYPOINT ["executable", "param1", "param2", ...]# 执行 Shell 命令
ENTRYPOINT command param1 param2 ...

注意:

  1. Dockerfile中仅执行一个 ENTRYPOINT指令,多次设置指定,后面的会覆盖前面的设置。
  2. ENTRYPOINT指令仅在docker run 执行命令时指定了--entrypoint 参数时,才会被覆盖。

ENV

ENV设置环境变量,后续指令可使用这个环境变量。
语法格式

ENV <key> <value>   # 此种形式一条指令只能设置一个变量
ENV <key>=<value> <key>=<value> ...

EXPOSE

EXPOSE指定容器运行时监听的端口
语法格式

EXPOSE <port> ...

VOLUME

VOLUME为容器设置挂载点(指定持久化目录)
语法格式

VOLUME [<path> ...]

WORKDIR

WORKDIR用于设置后续指令的工作目录
语法格式

WORKDIR path

ADD

ADD用于将本地文件、目录或远程URL复制到镜像中。(路径支持通配符)
语法格式

ADD <src> ...  <dest>
ADD ["<src>" ...  "<dest>"]  # 支持包含空格的路径

注意:

  1. ADD指令可自动将 tar类型文件自动解压(网络资源不会被解压)
  2. ADD指令可访问网络资源,类型 wget

COPY

COPY用于将文件、目录复制到镜像中
语法格式

COPY <src> ...  <dest>
COPY ["<src>" ...  "<dest>"]  # 支持包含空格的路径

注意:

  1. COPY指令不会自动将 tar类型文件进行解压
  2. COPY指令不能访问网络资源

USER

USER用于指定运行容器的用户名和UID,后续 RUNCMDENTRYPOINT 命令都将使用该用户。
语法格式

USER user
USER user:group
USER uid
USER uid:gid
USER user:gid
USER uid:group

ARG

ARG用于指定传递给构建运行时的变量
语法格式

ARG <name>[=<default value>]

ONBUILD

ONBUILD用于设置镜像触发器
语法格式

ONBUILD [INSTRUCTION]

注意:ONBUILD后跟指令,当当前的镜像被用作其他镜像的基础镜像,该镜像中的触发器将会被触发。

使用Dockerfile构建镜像

Dockerfile工作原理

Dockerfile原理工作图

样例

启动springboot项目

FROM openjdk:8
WORKDIR /root
ADD springboot-0.0.1-SNAPSHOT.jar springboot.jar
EXPOSE 8888
ENTRYPOINT ["java", "-jar"]
CMD ["springboot.jar"]

Dockerfile构建镜像

docker build命令用于读取 Dockerfile中定义的指令,并根据上下文,逐步构建 Docker镜像,并将最终结果保存到本地镜像库中。
语法格式

 docker build [options]  path | URLpath  本地文件系统上的一个目录路径URL  远程存储库地址

常见选项

  • -t/–tag 指定镜像名称和标签
  • -f/–file 指定 Dockerfile的路径 (默认当前路径)
  • –build-arg 设置构建参数
  • –rm 构建成功后删除中间容器(默认开启)
  • –force-rf 强制删除中间容器(无论构建成功与否)
  • –pull 始终尝试从注册表拉取最新的基础镜像
  • -m 设置内存最大值
  • –no-cache 设置构建镜像时不适用缓存

http://www.mrgr.cn/news/81631.html

相关文章:

  • 巧妙算法之位运算的应用
  • 使用 PyQt5 构建高效的文件分类与管理工具
  • 企业销售人员培训系统|Java|SSM|VUE| 前后端分离
  • 20241224在ubuntu20.04.6下的终端分屏软件terminator的安装以及使用
  • Redis Java 集成到 Spring Boot
  • 人工智能与区块链的碰撞:双剑合璧的创新前景
  • redis基础知识
  • Git如何设置和修改当前分支跟踪的上游分支
  • 关于DataGridView的使用注意事项
  • 【漏洞复现】BIG-IP Next Central Manager OData 注入漏洞(CVE-2024-21793)
  • uniapp 文本转语音
  • 机器学习之KNN算法预测数据和数据可视化
  • 爆改RagFlow
  • WPF 绘制过顶点的圆滑曲线(样条,贝塞尔)
  • pg数据库主备库切换
  • Vue.use()和Vue.component()
  • 文件路径与Resource接口详解
  • 算法题(16):原地移除元素
  • 学习笔记 --C#基础其他知识点(持续更新)
  • 【Lua之·Lua与C/C++交互·Lua CAPI访问栈操作】
  • jetson Orin nx + yolov8 TensorRT 加速量化 环境配置
  • 《Vue3 二》Vue 的模板语法
  • 精准识别花生豆:基于EfficientNetB0的深度学习检测与分类项目
  • IS-IS协议 配置实验
  • 音视频入门基础:MPEG2-TS专题(22)——FFmpeg源码中,获取TS流的音频信息的实现
  • 六大基础深度神经网络之CNN