说明

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

在Dockerfile 中命令书写对先后顺序及表示其执行对顺序,在书写时需注意。

约定

命令不区分大小写,但是命名约定为全部大写。

常用命令

FROM

所有Dockerfile 都必须以 FROM 命令开始。

FROM 命令会指定镜像基于哪个基础镜像来进行创建,后面对命令也会机会这个镜像来执行。

FROM 命令可以多次使用,表示创建多个镜像。

语法如下:

FROM [images name]

例如:

FROM mcr.microsoft.com/dotnet/aspnet:5.0-focal AS base

WORKDIR

WORKDIR 命令用于指定 RUNCMDENTRYPOINT 等命令对工作目录。

语法如下:

WORKDIR [path]

例如:

WORKDIR /app

EXPOSE

EXPOSE 用于指定容器在运行时监听对端口

语法如下:

EXPOSE [port]

例如:

EXPOSE 8080

COPY

COPY 复制指令,从上下文目录中复制文件或者目录到容器里指定路径。

语法如下:

COPY [path,newpath]

例如:

COPY src/nuget.config nuget.config

ADD

ADD 指令和 COPY 的使用格类似(同样需求下,官方推荐使用 COPY)。功能也类似

在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。

在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。

语法如下:

ADD [path,newpath]

例如:

ADD src/nuget.config nuget.config

RUN

RUN 在shell或者exec的环境下执行的命令。RUN 指令会在新创建的镜像上添加新的层面,接下来提交的结果用在Dockerfile的下一条指令中。

语法如下:

RUN ["<可执行文件或命令>","<param1>","<param2>",...]

例如:

-- 还原项目资源包
RUN dotnet restore "HanddayRetail.MallApi/HanddayRetail.MallApi.csproj" --configfile "nuget.config"
-- 构建项目
RUN dotnet build "HanddayRetail.MallApi/HanddayRetail.MallApi.csproj" -c Release -o /app/build

CMD

CMD 类似于 RUN 指令,用于运行程序,CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。,但二者运行的时间点不同:

CMD 在docker run 时运行。

RUN 是在 docker build。

CMD ["<可执行文件或命令>","<param1>","<param2>",...]
CMD ["param1","param2"]
CMD command param1 param2

注意:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。

ENTRYPOINT

ENTRYPOINT 配置给容器一个可执行的命令,这意味着在每次使用镜像创建容器时一个特定的应用程序可以被设置为默认程序。同时也意味着该镜像每次被调用时仅能运行指定的应用。

类似于CMD,Docker只允许一个ENTRYPOINT,多个ENTRYPOINT会抵消之前所有的指令,只执行最后的ENTRYPOINT指令。

语法如下:

ENTRYPOINT ["<可执行文件或命令>","<param1>","<param2>",...]
ENTRYPOINT command param1 param2

例如:

ENTRYPOINT ["dotnet", "HanddayRetail.MallApi.dll"]

Dockerfile 中对常用命令详解的更多相关文章

  1. hbase shell基础和常用命令详解(转)

    HBase shell的基本用法 hbase提供了一个shell的终端给用户交互.使用命令hbase shell进入命令界面.通过执行 help可以看到命令的帮助信息. 以网上的一个学生成绩表的例子来 ...

  2. samtools常用命令详解(转)

    转自:samtools常用命令详解 samtools的说明文档:http://samtools.sourceforge.net/samtools.shtml samtools是一个用于操作sam和ba ...

  3. cisco常用命令详解

    cisco常用命令详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常用命令用法展示 1.命令行模式的来回切换 yinzhengjie>enable #从用户模式切换到 ...

  4. H3C常用命令详解

    H3C常用命令详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 1.关闭后台日志输出 <yinzhengjie>sys [yinzhengjie]undo info- ...

  5. hbase shell基础和常用命令详解

    HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服 ...

  6. Tmux 的常用命令详解

    Tmux 的常用命令详解  常用命令: tmux #开启tmux tmux ls #显示已有tmux列表(C-b s) tmux attach-session -t 数字 #选择tmux C-b c ...

  7. Hexo系列(三) 常用命令详解

    Hexo 框架可以帮助我们快速创建一个属于自己的博客网站,熟悉 Hexo 框架提供的命令有利于我们管理博客 1.hexo init hexo init 命令用于初始化本地文件夹为网站的根目录 $ he ...

  8. 【转载】windbg 常用命令详解

    windbg 常用命令详解 https://blog.csdn.net/chenyujing1234/article/details/7743460 vertarget 显示当前进程的大致信息 lmv ...

  9. DOS常用命令详解

    DOS常用命令详解 dir 列文件名 deltree 删除目录树 cls 清屏 cd 改变当前目录 copy 拷贝文件 diskcopy 复制磁盘 del 删除文件 format 格式化磁盘 edit ...

随机推荐

  1. Java 中的final关键字有哪些用法?

    (1)修饰类:表示该类不能被继承:(2)修饰方法:表示方法不能被重写:(3)修饰变量:表示变量只能一次赋值以后值不能被修改(常量).

  2. 有哪些不同类型的IOC(依赖注入)方式?

    构造器依赖注入:构造器依赖注入通过容器触发一个类的构造器来实现的,该类有一系列参数,每个参数代表一个对其他类的依赖. Setter方法注入:Setter方法注入是容器通过调用无参构造器或无参stati ...

  3. 小米手机BL解锁连接不上手机

    解锁工具下载页面:http://www.miui.com/unlock/download.html 线刷工具下载页面:http://www.miui.com/shuaji-393.html 额外注意说 ...

  4. 相对路径在IEAD中的位置

    相对路径在IEAD中的位置 工具栏-->Run -->Edit Configurations -->Working directory-->就是了 这里是直接到软件的地址:剩下 ...

  5. CSS入门指南-4:页面布局

    这是<CSS设计指南>的读书笔记,用于加深学习效果. display 属性 display是 CSS 中最重要的用于控制布局的属性.每个元素都有一个默认的 display 值.对于大多数元 ...

  6. JavaScript中函数节流的理解

    函数节流的原理 函数节流,就是对会频繁触发的函数事件做一些限制,让这些函数可以在每隔一定的时间或者每次满足一定的条件下再触发.一般我们会给他起一个名字throttle.也就是节流的意思.一般这样的函数 ...

  7. 可想实现一个自己的简单jQuery库?(九)

    Lesson-8 事件机制 在讲事件机制之前呢,我们有一个很重要的东西要先讲,那就是如何实现事件委托(代理). 只有必须先明白了如何实现一个事件委托,我们才能更好的去实现on和off.在我看来,on和 ...

  8. 手绘模型图带你认识Kafka服务端网络模型

    摘要:Kafka中的网络模型就是基于主从Reactor多线程进行设计的. 本文分享自华为云社区<图解Kafka服务端网络模型>,作者:石臻臻的杂货铺 . Kafka中的网络模型就是基于主从 ...

  9. centos报错:Could not retrieve mirrorlist http://mirrorlist.centos.org/

    检查是否可以上网. ping 114.114.114.114 如果不可以,调试通.通了之后下一步: 然后检查DNS设置是否正常. ping www.baidu.com 不正常的话,设置DNS,如下: ...

  10. 【每日日报】第三十四天---Scanner类的应用

    1 今天继续看书 Scanner类的应用 1 package File; 2 import java.util.Scanner; 3 4 public class ScannerDemo { 5 pu ...