Dockerfile文件的说明:
格式:
INSTRUCTION arguments
虽然指令忽略大小写,但建议用大写
# 是注释
MAINTAINER命令:
MAINTAINER命令用来指定维护者的姓名和联系方式
FROM命令:
FROM
这个是设置基本的镜像,为后续的命令使用,所以应该作为Dockerfile的第一条指令
比如:
FROM centos6-base
RUN 命令:
会上面FROM 指定的镜像里执行任何命令,然后提交(commit)结果,提交的镜像会在后面继续用到
格式:
RUN
或:
RUN ["executable", "param1", "param2"]
RUN 命令等价于:
docker run image_name command
CMD and ENTRYPOINT
命令设置在容器启动时执行命令
ENTRYPOINT,表示镜像在初始化时需要执行的命令,不可被重写覆盖,需谨记
CMD,表示镜像运行默认参数,可被重写覆盖
ENTRYPOINT/CMD都只能在文件中存在一次,并且最后一个生效 多个存在,只有最后一个生效,其它无效!
需要初始化运行多个命令,彼此之间可以使用 && 隔开,但最后一个须要为无限运行的命令,需切记!
ENTRYPOINT/CMD,一般两者可以配合使用,比如:
ENTRYPOINT ["/usr/sbin/sshd"]
CMD ["-D"]
** 在Docker daemon模式下,无论你是使用ENTRYPOINT,还是CMD,最后的命令,一定要是当前进程需要一直运行的,才能够防容器退出。***
以下无效方式:
ENTRYPOINT service tomcat7 start #运行几秒钟之后,容器就会退出
CMD service tomcat7 start #运行几秒钟之后,容器就会退出
这样有效:
ENTRYPOINT service tomcat7 start && tail -f /var/lib/tomcat7/logs/catalina.out
# 或者
CMD service tomcat7 start && tail -f /var/lib/tomcat7/logs/catalina.out
这样也有效:
ENTRYPOINT ["/usr/sbin/sshd"]
CMD ["-D"]
USER 命令
比如指定 memcached 的运行用户,可以使用上面的 ENTRYPOINT or CMD来实现:
ENTRYPOINT ["memcached", "-u", "daemon"]
更好的方式:
ENTRYPOINT ["memcached"]
USER daemon
EXPOSE 命令
EXPOSE 命令可以设置一个端口在运行的镜像中暴露在外
在docker使用--link来链接两容器时会用到相关端口
EXPOSEd
ENV命令:
用于设置环境变更
使用此dockerfile生成的image新建container,可以通过 docker inspect CONTAINER ID 看到这个环境变量
也可以通过在docker run时设置或修改环境变量
ADD 命令:
从src复制文件到container的dest路径:
ADD
VOLUME 命令
VOLUME ["
如:
VOLUME ["/data"]
创建一个挂载点用于共享目录
WORKDIR 命令
WORKDIR /path/to/workdir
配置RUN, CMD, ENTRYPOINT 命令设置当前工作路径
可以设置多次,如果是相对路径,则相对前一个 WORKDIR 命令
比如:
WORKDIR /a WORKDIR b WORKDIR c RUN pwd
其实是在 /a/b/c 下执行 pwd