認識 Dockerfile 的 Entrypoint、CMD

閱讀時間約 4 分鐘

在 Dockerfile 需要 ENTRYPOINT、CMD 指令,當用 docker run 建立 container 的時候,才可以控制 container 預設啟動哪個程式。ENTRYPOINT、CMD 有各種不同的搭配,可以根據不同的情況使用,但我這邊只介紹其中一種用法:當成一般的 CLI 使用。關鍵如下:

  1. 安裝執行檔。
  2. 用 ENTRYPOINT 設定預設執行檔。
  3. 用 CMD 設定預設執行檔的預設參數。

Dockerfile,安裝執行檔:

FROM ubuntu:20.04

RUN apt-get update
RUN apt-get install -y figlet
RUN apt-get install -y toilet

設定預設執行檔是 figlet,預設參數是「Hello World!」:

ENTRYPOINT ["figlet"]
CMD ["Hello World!"]

建立 Docker Image:

docker build -t ft .

建立 Container,得到「figlet Hello World!」的結果:

$ docker run --rm ft
_ _ _ _ __ __ _ _ _
| | | | ___| | | ___ \ \ / /__ _ __| | __| | |
| |_| |/ _ \ | |/ _ \ \ \ /\ / / _ \| '__| |/ _` | |
| _ | __/ | | (_) | \ V V / (_) | | | | (_| |_|
|_| |_|\___|_|_|\___/ \_/\_/ \___/|_| |_|\__,_(_)

加上參數「Hello Linux Guy」,替換掉 Dockerfile 內 CMD 的參數,得到「figlet Hello Linux Guy」的結果:

$ docker run --rm ft Hello Linux Guy
_ _ _ _ _ _ ____
| | | | ___| | | ___ | | (_)_ __ _ ___ __ / ___|_ _ _ _
| |_| |/ _ \ | |/ _ \ | | | | '_ \| | | \ \/ / | | _| | | | | | |
| _ | __/ | | (_) | | |___| | | | | |_| |> < | |_| | |_| | |_| |
|_| |_|\___|_|_|\___/ |_____|_|_| |_|\__,_/_/\_\ \____|\__,_|\__, |
|___/

用 --entrypoint 更換預設執行檔,並加上參數「Hello」,得到「toilet Hello」的結果:

$ docker run --rm --entrypoint toilet ft Hello
m m ""# ""#
# # mmm # # mmm
#mmmm# #" # # # #" "#
# # #"""" # # # #
# # "#mm" "mm "mm "#m#"


以下是完整的 Dockerfile:

FROM ubuntu:20.04

RUN apt-get update
RUN apt-get install -y figlet
RUN apt-get install -y toilet

ENTRYPOINT ["figlet"]
CMD ["Hello World!"]
專注於 C#, DevOps 的工程師
留言0
查看全部
發表第一個留言支持創作者!
安裝 Prometheus
閱讀時間約 4 分鐘
API Gateway
閱讀時間約 6 分鐘
PromQL
閱讀時間約 18 分鐘
CI/CD Pipeline
閱讀時間約 3 分鐘
認識 Docker bridge network
閱讀時間約 17 分鐘