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 ["world"] 【官方推荐使用exec格式】
实例:
结构查看:
[root@localhost ~]# tree /opt/haproxy/
/opt/haproxy/
├── Dockerfile
└── files
├── haproxy-2.4.0.tar.gz
├── haproxy.cfg
├── install.sh
└── start.sh
1 directory, 5 files
[root@localhost ~]# tree test/
test/
├── html1
│ └── index.html
└── html2
└── index.html
2 directories, 2 files
[root@localhost ~]# mkdir -p /opt/haproxy/{conf,files}/
[root@localhost ~]# cd /opt/haproxy/
[root@localhost haproxy]# touch Dockerfile
编写Dockerfile
[root@localhost haproxy]# vim Dockerfile
[root@localhost haproxy]# cat Dockerfile
#基础镜像
FROM centos
#作者信息
LABEL MAINTAINER "sean 1163582076@qq.com"
#环境变量
ENV version 2.4.0
#传输文件
COPY files/haproxy-${
VERSION}.tar.gz /usr/src
COPY files/haproxy.cfg /usr/local/haproxy/conf/haproxy.cfg
ADD files/start.sh /scripts/
COPY files/install.sh /scripts/
#安装
RUN ["/bin/bash","-c",