Dockerfile文件详解git
Docker镜像的制做有docker commit 和Dockerfile,官方推荐使用Dockerfile来制做github
经过一个实例来看下docker镜像的制做过程:docker
一、建立一个Dockerfile的文件ubuntu
二、在文件中写入下面代码:vim
FROM ubuntu RUN apt-get install -y vim
三、执行docker bulid命令来构建镜像bash
docker build -t new-ubuntu .
这条命令-t参数指定新的镜像的名称;点“.” 表明的是Dockerfile文件的路径,因为案例的Dockerfile就在当前目录下面因此就用点符号来标识ide
从这个输出中咱们能够看到真正的构建过程 首先 Docker 将 build context 中的全部文件发送给 Docker daemon。build context 为镜像构建提供所须要的文件或目录。memcached
Dockerfile 中的 ADD、COPY 等命令能够将 build context 中的文件添加到镜像。ui
此例中,build context 为当前目录 /root,该目录下的全部文件和子目录都会被发送给 Docker daemon。url
因此,使用 build context 就得当心了,不要将多余文件放到 build context,特别不要把 /、/usr 做为 build context,不然构建过程会至关缓慢甚至失败。
Dockerfile文件中的其余关键字
FROM 是基于那个基础镜像
RUN 须要安装的软件
MAINTAINER 镜像建立者的信息
CMD :容器启动时须要执行的命令;可是在一个Dockerfile文件中只能有一个CMD命令,若是有多个,只执行最后一个CMD命令
若是在启动容器的时候指定了命令,那么这个命令会替换掉容器镜像中默认写的CMD命令
ENTRYPOINT:
container启动时执行的命令,可是一个Dockerfile中只能有一条ENTRYPOINT命令,若是多条,则只执行最后一条
ENTRYPOINT没有CMD的可替换特性
USER:使用那个用户跑容器
例如:
ENTRYPOINT ["memcached"]
USER daemon
EXPOSE:容器内部开启的端口,主机上使用还得在启动容器的时候作端口映射
docker run -p 80:80 xxx
ENV: 设置环境变量
例如:
ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8
ADD:将文件<src>拷贝到container的文件系统对应的路径<dest>
全部拷贝到container中的文件和文件夹权限为0755,uid和gid为0
若是文件是可识别的压缩格式,则docker会帮忙解压缩
若是要ADD本地文件,则本地文件必须在 docker build <PATH>,指定的<PATH>目录下
若是要ADD远程文件,则远程文件必须在 docker build <PATH>,指定的<PATH>目录下。好比:
docker build github.com/creack/docker-firefox
docker-firefox目录下必须有Dockerfile和要ADD的文件
注意:使用docker build - < somefile方式进行build,是不能直接将本地文件ADD到container中。只能ADD
url file.
ADD只有在build镜像的时候运行一次,后面运行container的时候不会再从新加载了。
VOLUME
能够将本地文件夹或者其余container的文件夹挂载到container中。
WORKDIR
切换目录用,能够屡次切换(至关于cd命令),对RUN,CMD,ENTRYPOINT生效
ONBUILD
ONBUILD 指定的命令在构建镜像时并不执行,而是在它的子镜像中执行
参考文献:
http://cloudman.blog.51cto.com/10425448/1923921
http://blog.csdn.net/wsscy2004/article/details/25878223