• Dockerfile指令的使用


    关于Dockerfile

    Dockerfile实际上就是一系列创建Docker镜像的脚本, 虽然可以通过命令行来执行, 但是那样繁琐而且容易出错.

    Dockerfile指令

    FROM

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

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

    RUN

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

    • 格式:
      • 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的路径中.

    • 格式:
      • 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规范从远程位置复制文件。

    WORKDIR

    Workdir指定的功能相当于使用cd切换工作目录.

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

    ENTRYPOINT

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

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

    ENV

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

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

    CMD

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

    docker run [$image] [$other_command]
    

    EXPOSE

    Expose用来指定端口,使容器内的应用可以通过端口和外界交互。

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

    补充

    总结

    通过上述我们可以看到RUN、ENTRYPOINT和CMD都是执行命令, 但是其实他们是有区别的.

    执行的时间点不同, 作用也不同, 按顺序如下:

    • RUN:创建镜像时, 通常用于安装软件包
    • ENTRYPOINT:启动容器时, 可以用来输出日志
    • CMD:启动容器后, 可以用来启动应用

    转义字符

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

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

    # escape=`
    

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

    优化

    大致总结优化规则如下:

    • 选择合适的基础镜像
    • 优化指令顺序
    • 合并指令
    • 删除多余文件和清理没用的中间结果
    • 使用 .dockerignore
  • 相关阅读:
    Spring aop 记录操作日志 Aspect 自定义注解
    winSCP连接FTP没有上传的权限
    Ubantu下安装FTP服务器
    设置ubantu的软件源地址
    Ubantu中安装sublime
    Ubantu 新建用户后没有生成对应文件夹
    Spring aop 记录操作日志 Aspect
    Java中如何获取spring中配置文件.properties中属性值
    java中获取ServletContext常见方法
    解决:“java.lang.IllegalArgumentException: error at ::0 can't find referenced pointcut myMethod”问题!
  • 原文地址:https://www.cnblogs.com/jerryqi/p/11777269.html
Copyright © 2020-2023  润新知