Dockerfile详解

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

官网学习

https://docs.docker.com/engine/reference/builder/#usage

FROM

必须为第一个命令,指定基础镜像

尽量使用官方的image作为base image!那是经得起考验的!

LABEL

给镜像添加信息。使用docker inspect可查看镜像的相关信息

其实就类似咱们写代码的注释,很多人写代码不愿意写注释,其实写注释对自己的负责,过段时间翻坑的时候,想想当初的意思,容易很快的解决,所以一定要写LABEL

RUN

构建镜像时执行的命令

为了美观,复杂的RUN请用反斜线换行,避免无用分层,合并多条命令成一行!

WORKDIR

工作目录

用WORKDIR,不要用RUN cd 尽量使用绝对目录!

ADD and COPY

大部分情况,COPY优于ADD,ADD除了COPY还有额外功能(解压缩)!添加远程文件/目录请使用curl 或者wget

ENV

设置环境变量

尽量多使用,减少维护成本!

学习下面的先了解下

Shell 和Exec 格式

Shell格式

Exec格式

Dockerfile1

Dockerfile2

通过实际的例子查看区别。

`

先执行Dockerfile1

`

`

`

先执行Dockerfile2

`

`

`

我们通过shell格式运行的话,它会通过默认的bash里面通过shell执行命令,它会通过shell替换这边变量,通过exec格式运行的话,只是单纯的执行echo,没办法帮我们替换到$name。如何解决不一样的问题呢?请开始我的表演!修改Dockerfile2

是不是很nice!

CMD

设置容器启动后默认执行的命令和参数

容器启动时默认执行的命令

如果docker run 指定了其他命令,CMD命令被忽略

如何定义了多个CMD,只有最后一个会执行

ENTRTYPOINT

设置容器启动时运行的命令

让容器以应用程序或者服务的形式运行

不会被忽略,一定会执行

PS:Dockerfile详解基本就介绍这么多,可能还有很多命令没有讲解,以后用到了在说吧。一定要CMD和ENTRTYPOINT因为很多官方的都常用这两个命令。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180617A0MHIC00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券