######1.dockerfile详解######
dockerfile常用指令:
- FROM:指定base镜像;如果本地有从本地调取,如果本地不存在会从远程仓库下载。
- MAINTAINER:设置镜像的作者,比如用户邮箱等。
- COPY:把文件从build context复制到镜像。支持两种形式:COPY src dest和COPY ["src","dest"]
src必须指定build context中的文件或目录。- ADD:用法和COPY类似,不同的是src可以是归档压缩文件,文件会被自动解压到dest,
也可以自动下载URL并拷贝到镜像:
ADD html.tar /var/www ADD http://ip/html.tar/var/www- ENV:设置环境变量,变量可以被后续的指令使用。 ENV HOSTNAME server1.example.com
- EXPOSE:如果容器中运行应用服务,可以把服务端口暴露出去。 EXPOSE 80
- VOLUME:申明数据卷,通常指定的是应用的数据挂载点。 VOLUME ["/var/www/html"]
- WORKDIR:为RUN、CMD、ENTRYPOINT、ADD和COPY指令设置镜像中的当前工作目录,
如果目录不存在会自动创建。- RUN:在容器中运行命令并创建新的镜像层,常用于安装软件包。 RUN yum install -y vim
- CMD:用于设置容器启动后执行的命令,会被docker run后面的命令行覆盖。
- ENTRYPOINT:用于设置容器启动后执行的命令,不会被忽略,一定会被执行。
docker run后面的参数可以传递给ENTRYPOINT指令当作参数。
Dockerfile中只能指定一个ENTRYPOINT,如果指定了多个,只有最后一个有效。
shell格式底层会调用/bin/sh -c来执行命令,可以解析变量,而exec格式不会。
FROM busybox 【shell格式】 FROM busybox 【exec格式】
ENV name world ENV name world
ENTRYPOINT echo "hello,$name" ENTRYPOINT ["/bin/echo","hello,$name"]
需要改写为ENTRYPOINT ["/bin/sh","-c","echo hello,$name"]
在exec格式时,ENTRYPOINT可以通过CMD提供额外参数,CMD的额外参数可以在容器启动时动态替换。
在shell格式时,ENTRYPOINT会忽略任何CMD或docker run提供的参数。
FROM busybox
ENTRYPOINT ["/bin/echo","hello"]
CMD ["worl