Dockerfile指令的使用

关于Dockerfile

Dockerfile实际上就是一系列建立Docker镜像的脚本, 虽然能够经过命令行来执行, 可是那样繁琐并且容易出错.html

Dockerfile指令

FROM

他的意思是在建立新的镜像时使用的基础镜像.python

  • 格式:
    • From [name]
  • 示例:
    • From nginx
    • From microsoft/dotnet-aspnetcore-runtime

RUN

他的意思是在容器中须要运行的命令, 它包括安装软件、建立文件和目录, 以及建立环境配置等.
nginx

  • 格式:
    • Run ["","",""]
    • Run [command]
  • 示例:
    • Run npm install npm -g
    • Run mkdir -p /usr/src/redis
    • Run npm install && npm start
    • Run ["npm","install","npm","-g"]

COPY

Copy指令将文件或者目录复制到容器的文件系统, 文件和目录需位于相对于Dockerfile的路径中.redis

  • 格式:
    • Copy [ospath] [dockerpath]
    • Copy ["",""]
  • 示例:
    • Copy . .
    • Copy nginx.conf /etc/nginx/nginx.conf
    • Copy . /usr/share/nginx/html
    • Copy hom* /mydir/

ADD

Add指令与Copy指令很是相似,但它包含更多功能。除了将文件从主机复制到容器映像,Add指令还可使用URL规范从远程位置复制文件。docker

WORKDIR

Workdir指定的功能至关于使用cd切换工做目录.npm

  • 格式:
    • Workdir [newpath]
  • 示例:
    • Workdir /app

ENTRYPOINT

配置容器启动后执行的命令,而且不可被docker run提供的参数覆盖。每一个Dockerfile中只能有一个Entrypoint,当指定多个时,只有最后一个有效。bash

  • 格式:
    • Entrypoint ["", ""]
  • 示例:
    • Entrypoint ["dotnet", "App.Web.Host.dll"]

ENV

ENV命令用于设置环境变量。这些变量以”key=value”的形式存在,并能够在容器内被脚本或者程序调用。这个机制给在容器中运行应用带来了极大的便利。app

  • 格式:
    • Env [name]=[value]
  • 示例:
    • Env VERSION=1.0 DEBUG=on NAME="Magicodes"

CMD

Cmd指令用于设置部署容器映像的实例时要运行的默认命令。若是 Dockerfile中指定了多个Cmd指令,只会计算最后一个指令。也可使用以下命令行在启动时重载:优化

docker run [$image] [$other_command]

EXPOSE

Expose用来指定端口,使容器内的应用能够经过端口和外界交互。spa

  • 格式:
    • Expose [port]
  • 示例:
    • Expose 80

补充

总结

经过上述咱们能够看到RUN、ENTRYPOINT和CMD都是执行命令, 可是其实他们是有区别的.

执行的时间点不一样, 做用也不一样, 按顺序以下:

  • RUN:建立镜像时, 一般用于安装软件包
  • ENTRYPOINT:启动容器时, 能够用来输出日志
  • CMD:启动容器后, 能够用来启动应用

转义字符

在许多状况下, Dockerfile指令须要跨多个行;这可经过转义字符完成。 默认Dockerfile转义字符是反斜杠"". 因为反斜杠在Windows中也是一个文件路径分隔符,这可能致使出现问题。

因此在Windows下能够修改转义字符, 方法是Dockerfile的第一行放置以下转义分析程序指令:

# escape=`

注意,只有两个值可用做转义字符: 和 ` 。

优化

大体总结优化规则以下:

  • 选择合适的基础镜像
  • 优化指令顺序
  • 合并指令
  • 删除多余文件和清理没用的中间结果
  • 使用 .dockerignore
相关文章
相关标签/搜索