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