docker build与Dockerfile指令详解
Dockerfile的指令介绍
-
FROM ☆☆☆☆
用来指定基础镜像,新镜像依赖此基础镜像,FROM必须是Dockerfile的第一条指令。
语法:
FROM <imageName> (默认最新版本)
FROM <imageName>@<ImageID>
FROM <imageName>:<tag>
FROM <imageName>:<digest> -
MAINTAINER ☆
用来指定作者
语法:
MAINTAINER <name> -
ADD☆☆☆☆☆
将宿主机文件复制到镜像中。压缩文件会自动解压
语法:
ADD <src>… <dest>
ADD ["<src>",… “<dest>”] -
COPY☆☆
也是复制,有弊端,建议直接用ADD
-
EXPOSE☆☆☆
暴露端口给外部
语法:
EXPOSE <port>/<tcp/udp> -
ENV☆☆☆
为设置环境变量
语法:
设置一个变量:ENV <key> <value>
设置多个变量:ENV <key>=<value> …
在Dockerfile中使用变量与shell使用变量基本相同:$varname或${varname}
变量不存在使用default值: v a r n a m e : − d e f a u l t v a l u e 变 量 存 在 时 使 用 d e f a u l t 值 : {varname:-default value} 变量存在时使用default值: varname:−defaultvalue变量存在时使用default值:(varname:+default value} -
RUN☆☆☆☆☆
运行指定的命令(在基础镜像的基础上运行命令,相当于启动容器后在容器内运行命令)
语法:
1)单命令:RUN <command>
2)多命令:RUN <command> && <command> && <command>…
3)非shell自带命令(比如用户安装的mysql等):RUN [“executable”, “param1”, “param2”] -
CMD☆☆☆☆☆
容器启动时默认命令或参数,相当于docker run启动时最后的命令
语法:
CMD [“executable”,“param1”,“param2”]
CMD [“param1”,“param2”]
CMD command param1 param2 -
ENTRYPOINT☆☆☆
容器启动时运行得启动命令
语法:
ENTRYPOINT [“executable”, “param1”, “param2”]
ENTRYPOINT command param1 param2-与CMD比较
相同点:只能写一条,如果写了多条,那么只有最后一条生效
容器启动时才运行,运行时机相同
不同点:ENTRYPOINT不会被运行的command覆盖,而CMD则会被覆盖
如果我们在Dockerfile种同时写了ENTRYPOINT和CMD,并且CMD指令不是一个完整的可执行命令,那么CMD指定的内容将会作为ENTRYPOINT的参数 -
VOLUME☆☆☆☆☆
可实现挂载功能,可以将宿主机目录挂载到容器中
语法:
VOLUME ["/var/log/"]
VOLUME /var/log
VOLUME /var/log /var/db -
USER☆☆☆
设置启动容器的用户,可以是用户名或UID
-
WORKDIR☆☆☆
设置工作目录,对RUN,CMD,ENTRYPOINT,COPY,ADD生效
语法:WORKDIR /path/to/workdir