Dockerfile文件的说明:docker
格式:shell
INSTRUCTION argumentsvim
虽然指令忽略大小写,但建议用大写centos
# 是注释tomcat
MAINTAINER命令:session
MAINTAINER命令用来指定维护者的姓名和联系方式ssh
FROM命令:memcached
FROM <image>/<image>:<tag>ui
这个是设置基本的镜像,为后续的命令使用,因此应该做为Dockerfile的第一条指令url
好比:
FROM centos6-base
RUN 命令:
会上面FROM 指定的镜像里执行任何命令,而后提交(commit)结果,提交的镜像会在后面继续用到
格式:
RUN <command> (这个命令运行一个shell中 - '/bin/sh -c')
或:
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 <port>
ENV命令:
用于设置环境变动
使用此dockerfile生成的image新建container,能够经过 docker inspect CONTAINER ID 看到这个环境变量
也能够经过在docker run时设置或修改环境变量
ADD 命令:
从src复制文件到container的dest路径:
ADD <src> <dest>
<src> 是相对被构建的源目录的相对路径,能够是文件或目录的路径,也能够是一个远程的文件url
<dest> 是container中的绝对路径
VOLUME 命令
VOLUME ["<mountpoint>"]
如:
VOLUME ["/data"]
建立一个挂载点用于共享目录
WORKDIR 命令
WORKDIR /path/to/workdir
配置RUN, CMD, ENTRYPOINT 命令设置当前工做路径
能够设置屡次,若是是相对路径,则相对前一个 WORKDIR 命令
好比:
WORKDIR /a WORKDIR b WORKDIR c RUN pwd
实际上是在 /a/b/c 下执行 pwd
Dockerfile文件到此介绍完毕。
下面是一个完整的Dockerfile文件
#Dockerfile FROM centos6-base MAINTAINER zhou_mfk <zhou_mfk@163.com> RUN ssh-keygen -q -N "" -t dsa -f /etc/ssh/ssh_host_dsa_key RUN ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_rsa_key RUN sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh EXPOSE 22 RUN echo 'root:redhat' | chpasswd RUN yum install -y yum-priorities && rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm && rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 RUN yum install tar gzip gcc vim wget -y ENV LANG en_US.UTF-8 ENV LC_ALL en_US.UTF-8 CMD /usr/sbin/sshd -D #End