码头工人Dockerfile详解

  从

<强>/强>

  

功能为指定基础镜像,并且必须是第一条指令。
如果不以任何镜像为基础,那么写法为:从零开始。
同时意味着接下来所写的指令将作为镜像的第一层开始

  

语法:   

 <代码> & lt; image>
  从& lt; image>: & lt; tag>
  从& lt; image>: & lt; digest>三种写法,其中& lt; tag>和& lt; digest>是可选项,如果没有选择,那么默认值为最新 
  

<强>
运行功能为运行指定的命令
运行命令有两种格式

  
 <代码> 1。运行& lt; command>
  2. 运行(“可执行”、“param1”、“param2”)第一种后边直接跟壳命令
  在linux操作系统上默认/bin/sh - c
  在windows操作系统上默认cmd/S/C  
  

第二种是类似于函数调用。
可将可执行的理解成为可执行文件,后面就是两个参数。

  

两种写法比对:

  
 <代码>运行/bin/bash - c的$ HOME/. bashrc来源;echo $ HOME
  运行(“/bin/bash”,“c”,“回声你好”)
  注意:多行命令不要写多个运行,原因是Dockerfile中每一个指令都会建立一层。
  多少个运行就构建了多少层镜像,会造成镜像的臃肿,多层,不仅仅增加了构件部署的时间,还容易出的错。
  运行书写时的换行符是\  
  

<强> CMD

  

功能为容器启动时要运行的命令
语法有三种写法

  
 <代码> 1。CMD(“可执行”、“param1”、“param2”)
  2. CMD (“param1”、“param2”)
  3.CMD命令param1 param2第三种比较好理解了,就时壳这种执行方式和写法
  第一种和第二种其实都是可执行文件加上参数的形式
  
  举例说明两种写法:
  CMD(“上海”、“c”,“echo $ HOME”
  CMD(“回声”,“$ HOME”)
  补充细节:这里边包括参数的一定要用双引号,就是”,不能是单引号。千万不能写成单引号。
  原因是参数传递后,码头工人解析的是一个JSON数组 
  

<>强及运行;CMD
不要把运行和CMD搞混了。

  
 <代码>运行是构件容器时就运行的命令以及提交运行结果
  CMD是容器启动时执行的命令,在构件时并不运行,构件时紧紧指定了这个命令到底是个什么样子 
  

<强>
标签功能是为镜像指定标签

  

语法:   

 <代码>标签& lt; key>=& lt; value>& lt; key>=& lt; value>& lt; key>=& lt; value>…一个Dockerfile种可以有多个标签,如下:
  标签com . example。”供应商”=癆CME合并”
  标签com.example.label-with-value=" https://www.yisu.com/zixun/foo "
  标签version=" 1.0 "
  标签描述="本文说明\
  label-values可以跨越多个行。”但是并不建议这样写,最好就写成一行,如太长需要换行的话则使用\符号 
  

如下:   

 <代码>标签多。label1=\“value1”
  多。label2=value2 \
  其他=" value3”
  说明:标签会继承基础镜像种的标签,如遇到关键相同,则值覆盖 
  

<强>维护者
指定作者
语法:

  
 <代码>维护者& lt; name>
  暴露
  功能为暴漏容器运行时的监听端口给外部
  但是公开并不会使容器访问主机的端口
  如果想使得容器与主机的端口有映射关系,必须在容器启动的时候加上- p参数 
  

<强> ENV
功能为设置环境变量
语法有两种

  
 <代码> 1。ENV & lt; key>& lt; value>
  2. ENV & lt; key>=& lt; value>…两者的区别就是第一种是一次设置一个,第二种是一次设置多个 
  

<强>添加
一个复制命令,把文件复制到景象中。
如果把虚拟机与容器想象成两台linux服务器的话,那么这个命令就类似于scp,只是scp需要加用户名和密码的权限验证,而不添加用。

  

语法如下:

  
 <代码> 1。添加& lt; src>…& lt; dest>
  2. 添加(“& lt; src>”,……“& lt; dest>“
  & lt; dest>路径的填写可以是容器内的绝对路径,也可以是相对于工作目录的相对路径
  & lt; src>可以是一个本地文件或者是一个本地压缩文件,还可以是一个url  
  

如果把& lt; src>写成一个url,那么就添加类似于wget命令

  

如以下写法都是可以的:

  
 <代码>添加测试relativeDir/添加测试/relativeDir
  添加http://example.com/foobar
  尽量不要把& lt; scr>写成一个文件夹,如果& lt; src>是一个文件夹了,复制整个目录的内容,包括文件系统元数据

码头工人Dockerfile详解