关于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

Dockerfile指令的使用的更多相关文章

  1. docker学习笔记17:Dockerfile 指令 ONBUILD介绍

    ONBUILD指令可以为镜像添加触发器.其参数是任意一个Dockerfile 指令. 当我们在一个Dockerfile文件中加上ONBUILD指令,该指令对利用该Dockerfile构建镜像(比如为A ...

  2. docker之Dockerfile指令介绍

    Docker通过对于在Dockerfile中的一系列指令的顺序解析实现自动的image的构建 通过使用build命令,根据Dockerfiel的描述来构建镜像 通过源代码路径的方式 通过标准输入流的方 ...

  3. docker Dockerfile指令ADD和COPY的区别,添加目录方法

    docker Dockerfile指令ADD和COPY的区别,添加目录方法 ADD指令的功能是将主机构建环境(上下文)目录中的文件和目录.以及一个URL标记的文件 拷贝到镜像中.其格式是: ADD 源 ...

  4. Dockerfile指令学习 (转)

    原文地址:http://blog.csdn.net/we_shell/article/details/38445979 Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一 ...

  5. Docker学习笔记三 Dockerfile 指令 定制镜像

    本文地址:https://www.cnblogs.com/veinyin/p/10412079.html  镜像是分层存储的,每一层都是独立存在的,修改当前层并不会修改其依赖的上一层,删除某一层也只是 ...

  6. Dockerfile 指令汇总及解析

        原文地址:http://www.maoyupeng.com/dockerfile-command-introduction.html 什么是Dockerfile Dockerfile是由一系列 ...

  7. Docker基本命令与使用 —— Dockerfile指令与构建(三)

    一.Dockerfile指令上 1.指令格式 # Comment 注释, 以#开头 INSTRUCTION argument 以大写的指令+参数 #First Dockerfile 注释 FROM u ...

  8. Docker学习(三): Dockerfile指令介绍

    特别声明: 博文主要是学习过程中的知识整理,以便之后的查阅回顾.部分内容来源于网络(如有摘录未标注请指出).内容如有差错,也欢迎指正! =============系列文章============= 1 ...

  9. Dockerfile指令:

    Dockerfile指令: 第一行注释,指令是大写字母开头, FROM指令: FROM<image>,后面跟镜像名, FROM<image>:<tag>,后面跟镜像 ...

随机推荐

  1. linux 最大TCP连接数限制

    ----------------------------------------------问题--------------------------------------------- 前几日碰到问 ...

  2. 下载 Java

    官网:https://www.java.com 官网可以下载到最新版本,如果需要下载旧版本的,可以访问: http://www.oracle.com/technetwork/java/archive- ...

  3. vue列表拖拽排序功能实现

    1.实现目标:目标是输入一个数组,生成一个列表:通过拖拽排序,拖拽结束后输出一个经过排序的数组. 2.实现思路: 2.1是使用HTML5的drag功能来实现,每次拖拽时直接操作Dom节点排序,拖拽结束 ...

  4. PHP-FPM远程代码执行漏洞(CVE-2019-11043)

    0x00 简介 在长亭科技举办的 Real World CTF 中,国外安全研究员 Andrew Danau 在解决一道 CTF 题目时发现,向目标服务器 URL 发送 %0a 符号时,服务返回异常, ...

  5. 第2课第1节_Java面向对象编程_类的引入_P【学习笔记】

    摘要:韦东山android视频学习笔记 1. 面向对象编程的引入,我们先写一个简单的程序输出张三,李四的名字.代码如下,假如,现在我们要在名字前面添加籍贯广东,那样岂不是每个printf语句都得修改添 ...

  6. chrome 打开本地 pdf 会自动开启下载

    正解:修改注册表:[HKEY_CLASSES_ROOT\.pdf],将 Content Type 的值改为: application/pdf 即可

  7. word: 插入或修改文字时后面的字消失 解决办法

    在编辑Word文档中的文字时,我们有时需要插入或修改文字,可是在插入或修改时会发现改动处后面的文字会消失.比如插入或修改3个字,后面的文字随之也会消失3个,这时该怎么办呢? 点击-“文件”-“选项”- ...

  8. SpringMvc使用JavaMail发送邮件,并使用465端口开启ssl加密传输,保证邮件安全

    代码在本地发邮件没任何问题.但部署到服务器,发送邮件显示连接异常.一开始非常懵逼,之后telnet smtp.163.com 25不通,发现是云服务器出于安全考虑,关闭了服务器的25端口,而25端口是 ...

  9. nginx 开启rewrite_log日志

  10. std::shared_mutex和std::mutex的性能对比(banchmark)

    原文作者:@玄冬Wong 转载请注明原文出处:http://aigo.iteye.com/blog/2296462 key world: std::shared_mutex.std::mutex.pe ...