映象的製作CMD與ENTRYPOINT區別

阿哲技术之路發表於2024-03-28

1.構建映象時必須指定一個CMD 或者ENTRYPOINT 去夯住程序,不讓它退出,放在容器前臺執行,否則容器就退出了。

2.CMD exec 形式變數傳參需要指定("sh","-c","/usr/bin/run.sh $abc")

FROM centos:7

LABEL maintalner liuzhe

COPY run.sh /usr/bin

ENV abc=azhe

EXPOSE 80

CMD ["sh","-c","/usr/bin/run.sh $abc"]

3.CMD shell形式直接使用變數傳參

FROM centos:7

LABEL maintalner liuzhe

COPY run.sh /usr/bin

ENV abc=azhe

EXPOSE 80

CMD run.sh $abc

4.docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

docker run -d test run.sh liuzhe

透過命令列指定的形式覆蓋Dockerfile 中的CMD命令

5.docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

docker run -d test run.sh wangwu

透過命令列指定的形式覆蓋Dockerfile 中的ENTRYPOINT命令需要指定 --entrypoint引數

6.當CMD和ENTRYPOINT配合使用時,CMD的值會作為ENTRYPOINT 的預設引數

FROM centos:7

LABEL maintalner liuzhe

COPY run.sh /usr/bin

ENV abc=azhe

EXPOSE 80

ENTRYPOINT ["run.sh"] #ENTRYPOINT執行 可執行檔案 必須使用exec的形式

CMD ["hello","libai"] #CMD的值為ENTRYPOINT傳參

#####run.sh#######

#!/bin/bash

echo $@

sleep 70000

最終執行的命令就是

/usr/bin/run.sh hello libai

docker run -d test hello liuzhe 也可以透過命令列的形式覆蓋CMD命令的值

小結:

1. CMD和ENTRYPOINT指令都可以用來定義執行容器時所使用的預設命令

2. Dockerfile至少指定一個CMD或ENTRYPOINT

3. CMD可以用作ENTRYPOINT預設引數,或者用作容器的預設命令

4. docker run指定<command>時,將會覆蓋CMD的值

5. 如果是可執行檔案,希望執行時傳參,應該使用ENTRYPOINT

相關文章