docker整理

Dockerfile常用指令#

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上传阿里云#


posted @   老卫同学  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示
主题色彩