docker整理
Dockerfile常用指令#
指令 | 功能简介 |
---|---|
FROM | 指定构建新Image时使用的基础Image,通常必须是Dockerfile的第一个有效指令,但其前面也可以出现ARG指令 |
LABEL | 附加到Image之上的元数据,键值对格式 |
ENV | 以键值对格式设定环境变量,可被其后的指令所调用,且基于新生成的Image运行的Container中也会存在这些变量 |
RUN | 以FROM中定义的Image为基础环境运行指定命令,生成结果将作为新Image的一个镜像层,并可由后续指令所使用 |
CMD | 基于该Dockerfile生成的Image运行Container时,CMD能够指定容器中默认运行的程序,因而其只应该定义一次 |
ENTRYPOINT | 类似于CMD指令的功能,但不能被命令行指定要运行的应用程序覆盖,且与CMD共存时,CMD的内容将作为该指令中定义的程序的参数 |
WORKDIR | 为RUN、CMD、ENTRPOINT、COPY和ADD等指令设定工作目录 |
COPY | 复制主机上或者前一段构建结果中(需要使用--from选项)文件或目录生成新的镜像层 |
ADD | 与COPY指令的功能相似,但ADD额外也支持使用URL指定的资源作为源文件 |
VOLUME | 指定基于新生成的Image运行Container时期望作为Volume使用的目录 |
EXPOSE | 指定基于新生成的Image运行Container时期望暴露的端口,但实际暴露与否取决于"docker run”命令的选项,支持TCP和UDP协议 |
USER | 为Dockerfile中该指令后面的RUN、CMD和ENTRYPOING指令中要运行的应用程序指定运行者身份UID,以及一个可选的GID |
ARG | 定义专用于build过程中的变量,但仅对该指标之后的调用生效,其值可由命令行选项"--build-arg"进行传递 |
ONBUILD | 触发器,生效于由该Dockerfile构建出的新lmage被用于另一个Dockerfile中的FROM指令作为基础镜像时 |
STOPSIGNAL | 用于通知Container终止的系统调用信号 |
HEALTHCHECK | 定义检测容器应用的健康状态的具体方法 |
SHELL | 为容器定义运行时使用的默认shell程序,Linux系统默认使用[/bin/sh”, "-c"],Windows默认使用[’cmd',"/S',"/C'] |
指令示例#
- FROM
FROM指令是整个Dockerfile的入口,必须是第一条指令。其代表新制作镜像的基础镜像。基础镜像可以自己制作,也可以从开源的仓库pull,例如dockerhub或是国内阿里云的免费仓库。
Docker中存在一种特殊的情况,就是不以任何基础镜像为基准,此时可以第一句话使用:
格式:
FROM <image>
FROM <image>:<tag>
FROM <image>@<digest>
示例:
FROM mysql:5.7
FROM scratch
注:
tag或digest是可选的,如果不使用这两个值时,会使用latest版本的基础镜像
scratch来表示以空白镜像为基础,也就是直接将可执行文件复制进镜像。例如swarm、coreos/etcd等。
- LABEL
用于为镜像添加元数据
格式:
LABEL <key>=<value> <key>=<value> <key>=<value> ...
示例:
LABEL version="1.0" description="这是一个Web服务器" by="IT笔录"
注:
使用LABEL指定元数据时,一条LABEL指定可以指定一或多条元数据,指定多条元数据时不同元数据
之间通过空格分隔。推荐将所有的元数据通过一条LABEL指令指定,以免生成过多的中间镜像。
- ENV
设置环境变量
格式:
ENV <key> <value> #<key>之后的所有内容均会被视为其<value>的组成部分,因此,一次只能设置一个变量
ENV <key>=<value> ... #可以设置多个变量,每个变量为一个"<key>=<value>"的键值对,如果<key>中包含空格,可以使用\来进行转义,也可以通过""来进行标示;另外,反斜线也可以用于续行
示例:
ENV myName John Doe
ENV myDog Rex The Dog
ENV myCat=fluffy
docker上传阿里云#
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术