Dockerfile中指令的介绍和使用

  

1, Dockerfile基本结构

Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。码头工人通过读取Dockerfile中的指令自动生成映像。

Dockerfile由一行行命令语句组成,并且支持以#开头的注释行。

一般Dockerfile分为四部分:基础镜像信息,维护者信息,镜像操作指令和容器启动时执行指令。如下:

 <代码> #这个Dockerfile使用ubuntu的形象
  #版本2 - 1版
  #作者:雷
  #命令格式:指令[参数/命令]. .
  
  #维护者:docker_user & lt; docker_user email.com>(@docker_user)
  维护者雷916551518 @qq.com
  
  #命令来更新图像
  运行回声“deb http://archive.ubuntu.com/ubuntu/渴望主要universe"在比;/etc/apt/sources.list
  运行apt-get更新,,apt-get安装- y nginx
  运行回声“\ ndaemon;“在比;/etc/nginx/nginx.conf
  
  当创建一个新容器#命令
  CMD/usr/sbin/nginx  

其中,一开始必须指明所基于的镜像,接下来推荐说明维护者信息,再接下来就是镜像操作的指令,如运行,复制等。每运行一条指令,就会为镜像添加新的一层并提交,注:一个镜像最多不允许超过127层。最后时CMD指令,是指定运行容器时的操作指令。

2, Dockerfile中的指令

码头工人通过对于在Dockerfile中的一系列指令的顺序解析实现自动的形象的构建通过使用构建命令,根据Dockerfiel的描述来构建镜像通过源代码路径的方式通过标准输入流的方式
1)——指定基础镜像

格式为:& lt; image>或者& lt; image>: & lt; tag>。

第一条指令必须为从指令,如果在同一个Dockerfile中创建多个镜像时,可以使用多个从指令(每个镜像一次,但是一般不会这么做).

2)维护者——指定维护者信息

格式为:维护人员& lt; name>& lt; email>。用来指定维护者信息。

3)运行,运行指令

格式为:运行& lt; command>或者运行(“executable",“param1",“param2"]。

前者将在壳牌终端中运行命令,即/bin/sh - c;后者则使用exec执行。指定使用其它终端可以通过第二种方式实现,例如运行(“/bin/bash",“-c",“回声hello"]。

每条运行指令将在当前镜像基础上执行指定命令,并提交为新的镜像。当命令较长时可以使用\来换行。(注:如果觉得镜像的层数可能过的多,可以一个运行指令后面接多条指令,中间使用,,进行拼接即可)。

4)复制——复制文件\目录

格式为:格式为复制& lt; src>& lt; dest> .

作用:复制本地的& lt; src>(源文件/目录必须要与Dockerfile在相同的目录中)到容器中的& lt; dest>。

当使用本地目录为源目录时,推荐使用副本。

使用复制时,所指定的源文件/目录,也可以是其他镜像中的文件,格式如下:

 <代码>复制——从=nginx:最新/etc/nginx/nginx.conf/nginx。参看 
5)添加——更高级的复制文件\目录

格式为:添加& lt; src>& lt; dest>。它和复制很相似,同样需要源文件和Dockerfile位于相同目录中,或者是一个URL。它比复制更为人性化些。

该命令将复制指定的& lt; src>到容器中的& lt; dest>。其中& lt; src>可以是Dockerfile所在目录的一个相对路径;也可以是一个URL(自动下载URL所对应的文件);还可以是一个焦油文件(自动解压为目录)。

在使用该指令的时候还可以加上——乔恩=& lt; user>: & lt; group>选项来改变文件的所属用户及所属组。

 <代码>添加——乔恩=55:*/mydir mygroup文件
  添加——乔恩=本文件*/mydir/添加——乔恩=1文件*/mydir/ 

添加指令会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。

但在某些情况下,如果我们真的是希望复制个压缩文件进去,而不解压缩,这时就不可以使用添加命令了。

因此在副本和添加指令中选择的时候,可以遵循这样的原则,所有的文件复制均使用复制指令,仅在需要自动解压缩的场合使用添加。

6) ENV,设置环境变量

格式为ENV & lt; key>& lt; value>。指定一个环境变量,会被后续运行指令使用,并在容器运行时保持。

举个栗子:

 <代码> [root@master nginx] #猫Dockerfile
  #测试
  从最新nginx:
  维护者Ray & lt; 916551517 @qq.com>
  ENV var1 hello world
  ENV var2测试
  运行echo $ {var1}, {var2}祝辞/用法
  #最终此镜像运行的容器中用法文件内容如下:
  root@262f47a7682a:/#猫用法
  hello world,测试
  #并且定义的变量存在该容器的环境变量中:
  root@262f47a7682a:/#回声var1美元
  你好,世界
  root@262f47a7682a:/#回声var2美元
  测试代码

Dockerfile中指令的介绍和使用