docker file根据file当中的指令创建出一个新的容器,跟ansible中的role大致一样。
构建docker file时,必须有一个工作目录,而且这个目录中不要存在任何文件,除了docker file。docker file文件的名字必须叫docker file。
docker file中的每一条指令都会重新生成一个新的镜像层。
docker file由众多的指令组成,它的格式虽说不分大小写,但是约定俗成都使用大写。
FROM指令
使用哪个镜像,在新版中,它可以不放在第一条,但是老版本中,它必须放在头一条
语法:FROM <repository>[<tag>]
<repository>:指定镜像名称
tag:镜像标签
示例:
FROM centos:7
LABEL指令
用于给镜像打标签
语法:LABEL < key>=< value> < key>=< value> …
各个标签之间用空格隔开
COPY
用于从docker主机复制文件致创建的新映像文件
语法:COPY <src>…<dest>
src:要复制的源文件或目录
dest:目标路径,即正在创建image的文件路径系统,建议使用绝对路径,否则,copy指定则以WORKDIR为其起始路径。
注意:
src必须是build上下文中的路径,不能是父目录中的文件
如果src是目录,则内部的文件或子文件都会地柜复制,但是src目录本身不会复制
如果指定了多个src,或在src中使用了通配符,则dest必须是一个目录,且必须以/结尾
如果dest不存在,它会自动创建,这包括其父目录。
示例:
[root@localhost docker]# cat work_dir/Dockerfile
FROM busybox
COPY index.html /tmp/
COPY test1 /data/test1/
COPY a* /tmp/
ADD指令
ADD类似于COPY命令,但是支持tar文件和URL路径文件
语法: ADD <src> … <dest> 或ADD ["<src>",… “<dest>”]
如果src是url路径。dest不以/结尾,则src指定的文件将被直接下载并且改名为dest,如果dest以/结尾,则文件下载到dest目录下
如果src是一个tar文件,它将会直接解压成一个目录,但是通过URL制定下载的不会解压。
示例:
ADD nginx-1.19.0.tar.gz /tmp/
ADD http://nginx.org/download/nginx-1.18.0.tar.gz /tmp/
#ADD指令不支持https认证,如果想使用https下载,建议使用RUN指令
WORKDIR
用于为Dockerfile中所有的RUN,CMD,ENTRYPOINT ,COPY 和ADD指定工作目录
语法:WORKDIR <dirpath>
在dockerfile中WORKDIR指令可以出现多个,可以使用相对路径,但是相对路径是相对于上一个WORKDIR来说的。
示例:
WORKDIR /data/ydong
ADD nginx-1.19.0.tar.gz ./
WORKDIR html # 它的父目录是/data/ydong,容器进入后的工作目录再/data/ydong/html
ADD index.html ./
VOLUME
用于在image中创建一个挂载点目录,以挂载docker hosts上的卷或者其它容器上的卷