注意:本文内容基于docker 18.03.0-ce
Dockerfile中每一条指令都会建立一层layer,UnionFS是有层数上限的(大多为128层)。 层数过多会导致数据读取减慢(UnionFS简介),所以在Dockerfile中相同命令尽量进行合并(COPY/ADD除外)。
PS:Dockerfile执行中不区分指令的大小写,但一般默认都是用大写。
FROM
格式:
FROM <image> [AS <name>]
FROM <image>[:<tag>] [AS <name>]
FROM <image>[@<digest>] [AS <name>]
指定基础镜像,是Dockerfile中必备的一条指令。后续的指令都是在基础镜像的基础上进行操作。其中基础镜像可以是DockerHub中的公开镜像,也可以是私有制做的镜像。如果想从头开始搭建的话,可以使用空镜像scratch
,即你的操作是从第一层镜像上开始的。scratch
所适用于不需要以操作系统为基础,所有库都已存在于可执行文件中了的对象。
RUN
格式:
RUN cmd arg1 arg2
RUN ["executable", "arg1", "arg2"]
执行命令行命令,是Dockerfile中最常用的一条指令。 因为Dockerfile中每一条命令都会对应一层layer,为了避免层数过多,可以将多条命令合并,例如shell格式,多条命令可以通过&&
进行组合。
下面就是一条RUN命令:
RUN apt-get update && \
apt-get -y install \
openssh-server \
sudo \
procps \
wget \
unzip \
mc \
ca-certificates \
curl \
software-properties-common \
python-software-properties && \
mkdir /var/run/sshd
AUFS是RUN执行rm
可能会产生bug
ADD
格式:
ADD [--chown=<user>:<group>] <src>... <dst>
ADD [--chown=<user>:<group>] ["<src>",... "<dst>"]
ADD将来src
定义的源文件,源目录或者远程文件(URL),复制到dst
指定的路径。其中--chown
仅对linux的con