docker(六)dockerfile(二)FROM和RUN命令的基本使用

99 阅读3分钟

上文中我们编写了一个Dockerfile的一个小示例,并且成功使用Dockerfile构建了一个镜像,并成功的执行了。接下来,我们来学习Dockerfile的基本编写语法。

 

一:FROM语法和镜像的选择

1:说到选择镜像,请遵循以下三个原则:

1)      官方镜像优于非官方的镜像;

2)      固定版本的Tag,而不是每次都使用latest:

3)      功能满足,选择体积小的镜像:

 

2:from语法

From命令其实很简单,就是使用哪个镜像来构建容器。但是呢,他也很复杂,下面我们来了解一下使用的注意项

(1):FROM指令开始一个新的构建阶段,设置后续构建依赖的基础镜像,Dockerfile必须以FROM开始。镜像可以是任意有效镜像。示例:在nginx:latest镜像基础上,直接创建一个新的镜像。

FROM nginx
CMD /bin/bash

 

(2):Dockerfile必须以FROM指令开始(除ARG指令之外),否则会出现"Please provide a source image with from prior to commit"。

CMD echo "Before FROM"
FROM nginx
CMD /bin/bash

这么写是会报错的。

 

(3):FROM可以在一个Dockerfile中出现多次,以创建多个镜像或者将当前构建作为另一个构建的依赖。

 

(4):通过向FROM指令添加AS name,可以选择为新生成阶段指定名称。该名称可以在后续的FROM和COPY --FROM=指令中使用,以引用在此阶段中构建的镜像。

FROM nginx AS firstNginx
CMD /bin/bash

 

(5):tag或者digest的值是可选的。如果省略其中任何一个,则默认情况下,构建器使用latest作为默认值。如果找不到tag的值,则构建器返回错误。

FROM nginx:109
CMD /bin/bash

不存在109版本的nginx,下载出现错误

 

(6):--platform可以用于指定镜像的平台,用来处理那些支持多平台的镜像。例如:linux/amd64、linux/arm64或windows/amd64。默认情况下,使用生产请求的平台。全局生成参数可用于此标志的值,例如:自动平台参数允许您强制一个阶段到本机构建平台(--platform=$BUILDPLATFORM),并使用它交叉编译到阶段内部的目标平台。

FROM --platform=linux/arm64 nginx
CMD /bin/bash

nginx:latest作为基础镜像,指定--platform=linux/arm64进行镜像构建。

 

二:RUN执行指令使用技巧

RUN命令用于执行后面跟着的命令行命令。有以下两种格式:

注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。

FROM centos
RUN yum -y install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz

以上执行会创建 3 层镜像。

FROM centos
RUN yum -y install wget \
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
&& tar -xvf redis.tar.gz

如上,以 && 符号连接命令,这样执行后,只会创建 1 层镜像。

注意:在shell编程中,若是使用""执行命令的时候,不管前边命令执行与否都会执行后边的。"&&"则不是这样的,若是前边命令执行失败,后边的命令就不会执行了。

 

以上大概就是Dockerfile中RUN以及FROM语法的基本使用。

 

有好的建议,请在下方输入你的评论。