美文网首页运维相关Docker容器程序员
Docker学习笔记(4)——编写Dockerfile

Docker学习笔记(4)——编写Dockerfile

作者: 无知者云 | 来源:发表于2018-03-09 09:24 被阅读27次

    例子

    FROM alpine
    WORKDIR /usr
    VOLUME /app
    ENV MY_ENV my_value
    CMD ["/"]
    ENTRYPOINT ["ls"]
    

    构建Dockerfile

    docker build -t my-image .
    

    运行该image:

    docker run my-image
    

    常用Dockerfile命令

    命令 用途 例子
    FROM 设置基础的image FROM alpine
    MAINTAINER 维护者信息 MAINTAINER xiaoming
    RUN 在构建image的时候运行的命令 RUN apt-get update
    ADD 向image中添加文件,可添加URL资源 ADD /etc/config /etc/config
    COPY 和ADD一样,但只能拷贝宿主机上的文件 COPY config-file config-file
    ENV 设置环境便令 ENV MY_ENV_URL http://www.baidu.com
    CMD 在启动contianer的时候运行的命令 CMD date
    ENTRYPOINT 在启动container的时候运行命令,覆盖CMD ENTRYPOINT echo
    EXPOSE 声明向外暴露的网络端口 EXPOSE 80
    VOLUME 创建一个volume,并mount到container中的指定目录 VOLUME /app
    WORKDIR 声明工作路径 WORKDIR /app
    HEALTHCHECK 健康检查 HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/ || exit 1

    CMD和ENTRYPOINT的区别

    在默认情况下,CMD和ENTRYPOINT的行为是一样的,都是指定在运行container的时候需要运行的主进程。

    CMD和ENTRYPOINT都有shell模式和exec模式,在shell模式下,container的主进程通过sh为入口,在sh中再执行CMD/ENTRYPOINT所指定的命令,在exec模式下,container直接就执行CMD/ENTRYPOINT所指定的命令。

    在shell模式下,设置命令如下:

    CMD ls /
    ENTRYPOINT ls /
    

    在exec模式下,设置命令如下:

    CMD ["ls", "/"]
    ENTRYPOINT  ["ls", "/"]
    

    在shell模式下,ENTRYPOINT会覆盖CMD。在exec模式下,CMD所设置的参数会成为ENTRYPOINT的参数,如下:

    CMD ["/"]
    ENTRYPOINT  ["ls"]
    

    在运行上述Dockerfile所对应的container时:

    docker run image 
    

    此时的效果相当于执行了ls /,即CMD作为参数跟到了ENTRYPOINT后面。

    此时我们也可以在命令行中覆盖CMD:

    docker run image /usr
    

    此时则相当于ls /usr

    在运行image时,要覆盖CMD可以直接将覆盖的参数跟到image后面,如果要覆盖ENTRYPOINT则需要通过--entrypoint设置。通常来说,如果我们的container要运行一个应用程序,比如java,那么可以通过ENTRYPOINT设置java命令,然后用CMD设置java程序的默认命令行参数,之后在实际运行的时候再重新指定参数。

    EXPOSE

    • 如果不使用EXPOSE,那么container中的端口只能通过-p向外发布(但是使用非默认bridge网络的container除外)
    • 如果使用了EXPOSE,那么可以通过docker run时使用-P将所有EXPOSE的端口映射到宿主机的随机端口
    • 如果使用了EXPOSE,那么也可以通过-p向外发布

    Dockerfile最佳实践

    请参考Docker官方文档

    相关文章

      网友评论

        本文标题:Docker学习笔记(4)——编写Dockerfile

        本文链接:https://www.haomeiwen.com/subject/gotufftx.html