Dockerfile中ENTRYPOINT 和 CMD的区别

1、dockerfile中的 CMDdocker

   一、每一个dockerfile中只能有一个CMD若是有多个那么只执行最后一个。centos

   二、CMD 至关于启动docker时候后面添加的参数看,举个简单例子:bash

      docker run -itd --name wohaoshuai docker_image(这个是镜像名称) /bin/bash -c.ui

      a、镜像名称后面跟了一个/bin/bash -c ,其实等价于在dockerfile中的CMD ["/bin/bash","-c"],懂了吧。dockerfile

      b、若是dockerfile中的CMD中有了CMD["/bin/bash","-c"],那么就不用在执行的时候再添加了,若是添加了参数的话那么就至关于要执行你添加的参数,默认的CMD中的参数就无效了。it

2、dockerfile中的ENTRYPOINTio

   一、一个dockerfile中ENTRYPOINT也只能存在一个,若存在多个那么只执行最后一个,你能够理解为开机启动的意思,和CMD有点像,不过仍是有区别。test

   二、举个简单例子:file

      a、dockerfile中有ENTRYPOINT ["tail","-f","/usr/local/aaa"]这句,那么你启动的时候镜像就执行了这个里面的内容,若是你像上面带参数的话就至关于在这个执行的内容后面再加入参数,懂?im

      b、若是你和我同样脑子不灵光的话我就再来举个例子吧:

        若是咱们的dockerfile中有a中的这句话而后咱们启动咱们的docker:

          docker run -itd --name wohaoshuai docker_image(这个是镜像名称) /bin/bash -c。

        此时就至关于咱们启动docker的时候执行了:tail -f /usr/local/aaa /bin/bash -c,这个命令明显就不对嘛,你见过这么牛逼的命令啊?

3、CMD和ENTRYPOINT结合

   一、综合一和二咱们能够来搞一个正常的CMD与ENTRYPOINT的组合命令嘛,看哥来给你秀一把。

   二、dockerfile 内容以下:     

    FROM daocloud.io/centos:latest

    ADD aaa /usr/local/aaa

    CMD ["-f","/usr/local/aaa"]
    ENTRYPOINT ["tail"]

    制做镜像命令也给你说一下吧:docker build -t my/base  .(这儿有个小点)

    启动命令也给你说一下吧:docker run -itd --name wohaoshuai my/base

   三、上面命令启动后就至关于开机执行了tail -f /usr/local/aaa命令

相关文章
相关标签/搜索