一、dockerfile中的 CMD
1、每個dockerfile中只能有一個CMD如果有多個那麼只執行最後一個。
2、CMD 相當於啓動docker時候後面添加的參數看,舉個簡單例子:
docker run -itd --name wohaoshuai docker_image(這個是鏡像名稱) /bin/bash -c.
a、鏡像名稱後面跟了一個/bin/bash -c ,其實等價於在dockerfile中的CMD ["/bin/bash","-c"],懂了吧。
b、如果dockerfile中的CMD中有了CMD["/bin/bash","-c"],那麼就不用在執行的時候再添加了,如果添加了參數的話那麼就相當於要執行你添加的參數,默認的CMD中的參數就無效了。
二、dockerfile中的ENTRYPOINT
1、一個dockerfile中ENTRYPOINT也只能存在一個,若存在多個那麼只執行最後一個,你可以理解爲開機啓動的意思,和CMD有點像,不過還是有區別。
2、舉個簡單例子:
a、dockerfile中有ENTRYPOINT ["tail","-f","/usr/local/aaa"]這句,那麼你啓動的時候鏡像就執行了這個裏面的內容,如果你像上面帶參數的話就相當於在這個執行的內容後面再加入參數,懂?
b、如果你和我一樣腦子不靈光的話我就再來舉個例子吧:
如果我們的dockerfile中有a中的這句話然後我們啓動我們的docker:
docker run -itd --name wohaoshuai docker_image(這個是鏡像名稱) /bin/bash -c。
此時就相當於我們啓動docker的時候執行了:tail -f /usr/local/aaa /bin/bash -c,這個命令明顯就不對嘛,你見過這麼牛逼的命令啊?
三、CMD和ENTRYPOINT結合
1、綜合一和二我們可以來搞一個正常的CMD與ENTRYPOINT的組合命令嘛。
2、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
3、上面命令啓動後就相當於開機執行了tail -f /usr/local/aaa命令