dockerfile

格式:
    #comment注释
    INSTRUCTION argument
    
FROM eddy/centos_nginx:latest
MAINTAINER eddy "[email protected]"
RUN yum install -y vim
EXPOSE 80    

FROM
FROM<image>
FROM<image>:<tag>
必须是存在的镜像,必须是第一条非注释的指令

MAINTAINER
指定镜像作者信息,包含镜像所有者和联系信息

RUN
指定当前镜像构建时的命令
RUN <command> shell模式
RUN echo hello

RUN [executeable,param1,param2] exec模式
RUN ["/bin/bash" "-c","echo hello"]
这里的RUN命令可合并使用&&构建过程可少一步
yum install -y nginx && yum install -y vim 
EXPOSE
指定运行该镜像的容器使用端口,可以使用多个
运行容器时候任然要指定端口


root@eddy:~/dockfile/df_test1# docker build -t "eddy/df_test1" .
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM eddy/centos_nginx:latest
 ---> 72a842011cc1
Step 2 : MAINTAINER eddy "[email protected]"
 ---> Using cache
 ---> a16ca9a40f4f
Step 3 : RUN yum install -y vim
 ---> Using cache
 ---> a27db230d99c
Step 4 : EXPOSE 80
 ---> Using cache
 ---> 058c96b40d77
Successfully built 058c96b40d77
root@eddy:~/dockfile/df_test1# docker run -d --name nginx_web2 -p 80 eddy/df_test1 nginx -g "daemon off;"

CMD
容器运行时执行的命令
CMD command param1 param2 shell模式
CMD echo hello

CMD [executeable,param1,param2] exec模式
CMD ["/bin/bash" "-c","echo hello"]
CMD ["/usr/sbin/nginx" "-g","daemon off"]
当在启动容器的时候添加了命令,dockerfile中的指令会被覆盖

CMD [param1,param2]做为ENTERYPOINT指令的默认参数

ENTERYPOINT
和CMD很类似,区别就是不会被启动镜像的命令所覆盖
ENTERYPOINT [executeable,param1,param2] exec模式
ENTERYPOINT command param1 param2 shell模式
ENTERYPOINT ["/usr/sbin/nginx" "-g","daemon off"]
组合使用
CMD指定参数,ENTERYPOINT执行命令
ENTERYPOINT  ["/usr/sbin/nginx"]
CMD ["-h"]
这样在容器启动的时候执行命令会覆盖CMD并以参数的形式传递给ENTERYPOINT

ADD
ADD ["src"..."dest"]
包含类似tar解压功能

COPY
COPY ["src"..."dest"]
单纯复制文件docker推荐使用copy
COPY index.html /usr/share/nginx/html/

VOLUME
VOLUME["/data"]
基于镜像的容器创建卷

WORKDIR
WORKDIR /path/to/workdir
通常不使用绝对路径
WORKDIR a
WORKDIR b
WORKDIR c
RUN pwd
/a/b/c

ENV
ENV <key><value>
ENV <key>=<value>

USER
镜像以什么用户启动
USER user
USER uid
USER user:group
USER user:gid
USER uid:gid
USER uid:group
默认root

ONBUILD
镜像触发器
当一个镜像被其他镜像做为基础镜像执行时
会在构建过程中插入指令

一个完整的dockerfile文件内容
FROM eddy/centos_nginx:latest
MAINTAINER eddy "[email protected]"
RUN yum clean all
RUN yum install -y vim
ONBUILD COPY index.html /var/share/nginx/html/
EXPOSE 80   
ENTERYPOINT ["/usr/bin/nginx","-g","daemon off"]
构建镜像
docker build -t "eddy/web01"

这里是不会执行COPY的

以这个镜像会基础镜像构建
FROM eddy/web01
MAINTAINER eddy "[email protected]"
EXPOSE 80   
ENTERYPOINT ["/usr/bin/nginx","-g","daemon off"]
这里会执行CPOY


从基础镜像运行一个容器
执行一条指令,对容器进行修改
执行类似docker commit的操作,提交一个新的镜像层
再基于刚提交的镜像运行一个新的容器
执行dockerfile中的下一条指令,直至所有指令执行完毕
FROM eddy/centos_nginx:latest
MAINTAINER eddy "[email protected]"
RUN yum install -y vim && yum install -y nginx
EXPOSE 80

root@eddy:~/dockfile/df_test1# docker build -t "eddy/df_test1" .
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM eddy/centos_nginx:latest
 ---> 72a842011cc1
Step 2 : MAINTAINER eddy "[email protected]"
 ---> Using cache
 ---> a16ca9a40f4f
Step 3 : RUN yum install -y vim
 ---> Using cache
 ---> a27db230d99c
Step 4 : EXPOSE 80
 ---> Using cache
 ---> 058c96b40d77
 
不会删除中间层镜像
可以进入看是否执行完毕,查找错误
 docker run -it a27db230d99c /bin/bash
 进入查看nginx是否安装完毕

构建缓存
每一个结果都会提交为镜像
会把之前的镜像作为缓存
不使用缓存
docker build --no-cache

使用ENV=REFRESH_DATE=2016-01-24
修改这个时间会在dockerfile中下面的命令不使用缓存

查看镜像构建过程
docker history eddy/web01
root@eddy:~/dockfile/df_test1# docker history eddy/df_test1
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
058c96b40d77        6 hours ago         /bin/sh -c #(nop) EXPOSE 80/tcp                 0 B                 
a27db230d99c        6 hours ago         /bin/sh -c yum install -y vim                   36.32 MB            
a16ca9a40f4f        6 hours ago         /bin/sh -c #(nop) MAINTAINER eddy "[email protected]   0 B                 
72a842011cc1        7 hours ago         /bin/bash                                       163.2 MB            nginx
9a769720073e        2 days ago                                                          289.6 MB            Imported from -


你可能感兴趣的:(dockerfile)