继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Docker:Dockerfile 常用指令

三国纷争
关注TA
已关注
手记 420
粉丝 51
获赞 178

ADD 复制文件

  • 格式:

    • ADD <src>...<dest>

    • ADD ["<src>",..."<dest>"]

ADD docker-test-demo-0.0.1-SNAPSHOT.jar app.jar
  • 从 src 目录复制文件到容器的 dest,其中 src 可以是 Dockerfile 所在目录的相对路径,也可以是一个 URL,还可以是一个压缩包

  • 注意

    • src 必须在构建的上下文内,不能使用例如:ADD ../somethine /something 这样的命令,因为 docker build 命令首先会将上下文路径和其子目录发送到 docker daemon

    • 如果 src 是一个 URL,同时 dest 不以斜杠结尾,则 dest 会被视为文件,src 对应内容文件会被下载到 dest

    • 如果 src 是一个 URL,同时 dest 以斜杠结尾,则 dest 会被视为目录,src 对应内容文件会被下载到 dest 目录

    • 如果 src 是一个目录,那么整个目录下的内容将会被复制,包括文件系统元数据

    • 如果文件是可是别的压缩包,则 docker 会自动解压

ARG 设置构建参数

  • 格式:

    • ARG <name>[=<default value>]

ARG user1=someuser
  • ARG 指令用于设置构建参数,类似与 ENV,不同的是,ARG 设置的是构建时的环境变量,在容器运行时是不会存在这些变量的

CMD 容器启动命令

  • 格式:

    • CMD ["executable","param1","param2"](推荐)

    • CMD ["param1","param2"](为 ENTRYPOINT 指令提供预设参数)

    • CMD command param1 param2 (在 shell 中执行)

CMD echo "This is a test." | wc -
  • CMD 指令用于为执行容器提供默认值,每个 Dockerfile 只有一个 CMD 命令,如果指定了多个 CMD 命令,那么只有最后一条被执行,如果启动容器时指定了运行的命令,则会被覆盖掉 CMD 指定的指令

COPY 复制文件

  • 格式:

    • COPY <src>...<dest>

    • COPY ["<src>",..."<dest>"]

  • 复制本地端的 src 到容器的 dest,COPY 指令和 ADD 指令类似,COPY 不支持 URL 和压缩包

ENTRYPOINT 入口点

  • 格式:

    • ENTRYPOINT ["executable","param1","param2"]

    • ENTRYPOINT command param1 param2

  • ENTRYPOINT 和 CMD 指令的目的一样,都是指定 Docker 容器启动时的执行命令,可以多次设置,但只有最后一个有效

ENV 设置环境变量

  • 格式:

    • ENV <key> <value>

    • ENV <key>=<value> ...

ENV JAVA_HOME /path/to/java

EXPOSE 声明暴露的端口

  • 格式:

    • EXPOSE <port> [<port>...]

# 声明暴露一个端口EXPOSE port1# 相应的运行容器使用的命令docker run -p port1 image# 也可以使用 -P 选项启动docker run -P image# 声明暴露多个端口EXPOSE port1 port2 port3# 相应的运行容器使用的命令docker run -p port1 -p port2 -p port3 image# 也可以指定需要映射到宿主机器上的端口号docker run -p host_port1:port1 -p host_port2:port2 -p host_port3:port3 image
  • EXPOSE 指令用于声明在运行时容器提供的服务端口,该指令的作用主要是帮助镜像使用者理解该镜像服务的守护端口,其次是当运行时使用随机映射时,会自动映射 EXPOSE 的端口

FROM 指定基础镜像

  • 格式:

    • FROM <image>

    • FROM <image>:<tag>

    • FROM <image>@<digest>

  • 使用 FROM 指令指定基础镜像,FROM 指令类似 Java 里的 extends 关键字,FROM 指令必须指定且必须在其它指令之前,FROM 指令之后的的所有指令都依赖于所指定的镜像

LABEL 为镜像添加元数据

  • 格式:

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

    • 使用 " 和 \ 转换命令行

LABEL "com.example.vendor"="ACME Incorporated"LABEL "com.example.label-with-value"="foo"LABEL version="1.0"LABEL description="This text illustrates \ 
that label-values can span multiple lines."

MAINTAINER 指定维护者信息

  • 格式:

    • MAINTAINER <name>

MAINTAINER 林塬<xxxx@qq.com>

RUN 执行命令

  • 格式:

    • RUN <command>

    • RUN ["executable","param1","param2"]

  • RUN <command> 在 shell 终端中运行,在 Linux 中默认是 /bin/sh -c,在 Windows 中是 cmd /s /c

USER 设置用户

  • 格式:

    • USER 用户名

USER daemon
  • 该指令用于设置启动镜像时的用户或者 UID,写在该指令后的 RUN、CMD 以及 ENTRYPOINT 指令都将使用该用户执行命令

VOLUME 指定挂载点

  • 格式:

    • VOLUME ["/data"]

VOLUME /data
  • 该指令使容器中的一个目录具有持久化存储功能,该目录可被容器本身使用,也可以共享给其它容器

  • 当容器中的应用有持久化数据的需求时可以在 Dockerfile 中使用该指令

WORKDIR 指定工作目录

  • 格式:

    • WORKDIR /path/to/workdir

  • 切换目录指令,类似于 cd 命令,写在该指令后的 RUN、CMD 以及 ENTRYPOINT 都将该工作目录作为当前目录,并执行指令

其它

  • Dockerfile 还有一些其它指令,例如 STOPSINGAL、SHELL 等



作者:林塬
链接:https://www.jianshu.com/p/cad3ec6e91cb


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP