一、Dockerfile是什么
镜像的定制实际上就是定制每一层所添加的配置、文件。我们把这些操作命令都写入一个脚本,用这个脚本来构建、定制镜像。这个脚本就是Dockerfile
。
二、Dockerfile的格式
- 指令不区分大小写,但是为了与参数区分,推荐大写。
Docker
会顺序执行Dockerfile
中的指令。- 第一条必须是
FROM
指令,它用于指定构建镜像的基础镜像。 #
开头的行是注释。Dockerfile
中每一个指令都会建立一个镜像层
三、FROM指令
# FROM指定基础镜像,tag默认为latest
FROM 或 FROM :
四、
RUN
执行命令
RUN
指令是用来执行命令行命令的。RUN
指令会在前一条命令创建出的镜像的基础上创建一个容器,并在容器中运行命令。在命令结束运行后commit
提交新容器为新镜像,新镜像被Dockerfile
的下一条指令使用。
# shell格式
RUN
# 或 exec格式,非常推荐
RUN [“executable”, “param1“, “param2”]
五、如何使用build指令根据Dockerfile构建一个镜像
docker build [OPTIONS] 上下文路径|URL
[OPTIONS]
: 命令选项,常用的指令包括-t
指定镜像的名字,-f
显示指定Dockerfile
,如果不使用-f
,则默认将上下文路径下的名为Dockerfile
的文件认为是构建镜像的“Dockerfile
”;- 上下文路径
|URL
: 指定构建镜像的上下文的路径,构建镜像的过程中,可以且只可以引用上下文中的任何文件。除了从本地构建以外,
docker build
还支持从URL
构建,比如可以直接从Git repo
中构建,这里也不展开介绍了,如果你对这个感兴趣,可以查看:https://docs.docker.com/engine/reference/commandline/build/#tarball-contexts
例如
# -t指定了镜像名为myimage,由于没有使用-f指令,所以默认使用上下文路径下名为Dockerfile的文件认为是构建镜像的“Dockerfile”。最后指定上下文路径,在这条命令中,上下文路径是.,.代表就是将当前目录设置为上下文路径
docker build -t myimage .
六、实例
#先创建一个新的空文件夹
mkdir newdir
#进入这个新文件夹中
cd newdir
#创建一个Dockerfile文件
touch Dockerfile
# 补全Dockerfile的内容(为了方便展示,这里用的是echo向Dockerfile中输入内容)
# linux中>表示覆盖原文件内容,>>表示追加内容。
echo "FROM busybox:latest" > Dockerfile
echo "RUN touch hello.txt" >> Dockerfile
#使用该Dockerfile构建一个名为busybox:v1的镜像,注意这个小数点
docker build -t busybox:v1 .
&&
将各个命令串联起来
为了避免每一条RUN指令都会新建一个镜像,所以不能为每一条命令都对应一个RUN,如下:
RUN mkdir /dir1
RUN cd dir1
RUN touch hello.txt
而是应该使用&&把命令拼接起来,成为一条指令
RUN mkdir /dir1 \
&& cd dir1 \
&& touch hello.txt
参考:https://www.educoder.net/shixuns/zawfjtnm/challenges