美文网首页
Docker RUN, CMD, ENTRYPOINT

Docker RUN, CMD, ENTRYPOINT

作者: 逑熙 | 来源:发表于2017-09-27 00:05 被阅读463次

    在使用Dockerfile创建image时, 下面三条指令比较容易混淆。
    RUN, CMD, ENTRYPOINT.

    RUN是在building image时会运行的指令, 在Dockerfile中可以写多条RUN指令.

    CMD和ENTRYPOINT则是在运行container 时会运行的指令, 都只能写一条, 如果写了多条, 则最后一条生效.

    CMD和ENTRYPOINT的区别是:
    CMD在运行时会被command覆盖, ENTRYPOINT不会被运行时的command覆盖, 但是也可以指定.
    例如 :
    Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
    --entrypoint=" " Overwrite the default entrypoint of the image

    docker run postgres:9.3.5 psql
    这里的psql就是command, 将覆盖Dockerfile的CMD, 但是不会覆盖ENTRYPOINT.
    如果要覆盖ENTRYPOINT, 那么可以在docker run运行时输入 --entrypoint="....".

    CMD和ENTRYPOINT一般用于制作具备后台服务的image, 例如apache, database等. 在使用这种image启动container时, 自动启动服务.

    同样执行 docker run -it --rm <image_name> hello world

    如果是ENTERYPOINT ["/bin/bash"]那么实际运行的命令是 /bin/bash hello world

    如果是CMD ["/bin/bash"]那么实际运行的命令是 hello world

    即,运行容器时的命令在 ENTERYPOINT 时是作为 ENTERYPOINT 的参数传递的;在使用 CMD 时是直接替换 CMD 的。

    所以有一种取巧的用法,在 dockerfile 中同时使用二者:

    ENTRYPOINT ["mongod"]
    CMD ["--help"]
    

    这样用户不仅可以自定义启动 mongod 的参数,在不指定参数的时候还可以默认使用 --help 显示帮助信息

    相关文章

      网友评论

          本文标题:Docker RUN, CMD, ENTRYPOINT

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