首页 > 其他 > 详细

Dockerfile定制镜像入门

时间:2019-07-30 23:20:04      阅读:89      评论:0      收藏:0      [点我收藏+]

参考文档

简单案例

Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

在一个空白目录中,建立一个文本文件,并命名为 Dockerfile

1 $ mkdir mynginx
2 $ cd mynginx
3 $ touch Dockerfile

其内容为:

1 FROM nginx
2 RUN echo <h1>Hello, Docker!</h1> > /usr/share/nginx/html/index.html

涉及到了两条指令,FROM 和 RUN

 

FROM 指定基础镜像

一个 Dockerfile中 FROM 是必备的指令,并且必须是第一条指令。

如果不指定镜像基础,这可以使用如下:

1 FROM scratch

如果以 scratch 为基础镜像的话,意味着不以任何镜像为基础,接下来所写的指令将作为镜像第一层开始存在。

对于 Linux 下静态编译的程序来说,并不需要有操作系统提供运行时支持,所需的一切库都已经在可执行文件里了,因此直接 FROM scratch 会让镜像体积更加小巧。

 

RUN 执行命令

RUN 指令是用来执行命令行命令的。由于命令行的强大能力,RUN 指令在定制镜像时是最常用的指令之一。其格式有两种:

  • shell 格式:RUN <命令>,就像直接在命令行中输入的命令一样。刚才写的 Dockerfile 中的 RUN 指令就是这种格式。
1 RUN echo <h1>Hello, Docker!</h1> > /usr/share/nginx/html/index.html
  • exec 格式:RUN ["可执行文件", "参数1", "参数2"],这更像是函数调用中的格式

一个 RUN 指令,并使用  &&  将各个所需命令串联起来。将7 层,简化为了 1 层。

Dockerfile 支持 Shell 类的行尾添加  \  的命令换行方式,以及行首 # 进行注释的格式。

 

构建镜像

 在 Dockerfile 文件所在目录执行:

1 $ docker build -t nginx:v3 .

使用了 docker build 命令进行镜像构建。其格式为:

1 docker build [选项] <上下文路径/URL/->

此时输入如下命令即可查看自己构建的镜像:

1 docker images

 

镜像构建上下文(Context)

docker build 命令最后有一个 .. 表示当前目录,而 Dockerfile 就在当前目录,但是其实  .  表示的是上下文路径,该路径指的是Dockerfile文件所在路径(指定构建镜像上下文的路径)下的内容  打包发送到docker server 中 并解压后所在的目录,构建镜像的过程都是调用一组 REST API 与 Docker 引擎交互,从而完成各种功能。


案例:假如在Dockerfile 文件所在目录下有一个文件 test.txt , 然后在Dockerfile 中编写如下:

1 From tomcat
2 COPY test.txt /usr/local/tomcat/webapps/ROOT/

然后在Dockerfile 文件所在目录下 构建镜像:

1 docker build -t tomcat-v1 .

可以看到构建过程为:

1 Sending build context to Docker daemon  3.072kB
2 Step 1/2 : From tomcat
3  ---> 238e6d7313e3
4 Step 2/2 : COPY test.txt /usr/local/tomcat/webapps/ROOT/
5  ---> 74132bcad66e
6 Successfully built 74132bcad66e

之后运行构建的镜像即可在相关路径下找到copy的文件,因为该文件随着上下文路径发送到服务端,可以copy到

 

Dockerfile 其他的常用指令

上面已经讲过了from 和 run(每个run命令都会启动一个容器) ,下面举出一些其他的

WORKDIR

格式:

  •  WORKDIR <工作目录路径>

使用 WORKDIR 指令可以来指定工作目录(或者称为当前目录),以后各层的当前目录就被改为指定的目录,如该目录不存在,WORKDIR 会帮你建立目录。在Dockerfile中的命令,每一行都是启动一个进程,互相之间没有递进关系,不可能继承前一层构建过程中的内存变化。因此当前一层将文件更改路径之后,在下一层想继续操作该文件,需要先将工作目录指定到文件所在目录,因此也可以在 From 命令后就指定工作目录,方便下面其他层的操作。


COPY

格式:

  • COPY <源路径>... <目标路径>
  • COPY ["<源路径1>",... "<目标路径>"]

就是拷贝一个目录的文件到另一个目录

 

ADD

格式:

  • ADD <源路径>... <目标路径>
  • ADD ["<源路径1>",... "<目标路径>"]

主要用于将文件自动解压缩到一个目录中,

可以遵循这样的原则,所有的文件复制均使用 COPY 指令,仅在需要自动解压缩的场合使用 ADD

 

待补充。。。

Dockerfile定制镜像入门

原文:https://www.cnblogs.com/wuba/p/11272010.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!