認識 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
查看全部
avatar-img
發表第一個留言支持創作者!
Docker network 會影響 Container: 是否可以透過網路存取其它的 Container。 是否可以存取網際網路(Internet)。 是否可以存取實體網路(Physical Network)。 Docker bridg
CI/CD Pipeline 是一連串自動化步驟,可以測試軟體,部屬應用程式。但實際上到底要做什麼事情呢?可以從 GitLab 的 Auto DevOps 了解。 Auto Dependency Scanning 掃描第三方函式庫的安全性漏洞。參考下圖: 如果是 .NET 6 可以用以下指令掃描:
Prometheus 提供 PromQL 讓我們對 metrics 查詢,可以查出最近 1 小時內的請求成功率,最近 30 分鐘內的請求延遲等等的資訊,下面用範例說明。 Request Per Second 此範例查詢「每秒的請求數量」,我用 Traefik 當作範例說明。 這幫我們得出以下結果:
API Gateway 是什麼? 參考上圖,API Gateway 是一個程式,位於 Client 和 Microservice 之間。當伺服器架構採用這種設計後,會有以下優點: 架構彈性 - 當伺服器架構需要調整的時候,Client 不需要調整(前提是 API 維持不變)。 IP Listing
我發現從統計學、電子、電腦繪圖的角度來看取樣,在說法上有點不同,但我認為大致上的概念是相同的。 資料實在是「太多了」,沒辦法拿這麼多的資料處理,但我們可以降低資料的數量,但和原本的資料大致上差不多,我們就可以做分析,得到我們想要的結果。 Reference:
監控的解決方案有很多種,我這裡選擇的是 Prometheus。實際上只有 Prometheus 還不夠,真正其實會安裝以下項目: 以上這些安裝項目都可以用 kube-prometheus-stack 這個專案提供的 helm chart 安裝。 用 helm 安裝: Reference:
Docker network 會影響 Container: 是否可以透過網路存取其它的 Container。 是否可以存取網際網路(Internet)。 是否可以存取實體網路(Physical Network)。 Docker bridg
CI/CD Pipeline 是一連串自動化步驟,可以測試軟體,部屬應用程式。但實際上到底要做什麼事情呢?可以從 GitLab 的 Auto DevOps 了解。 Auto Dependency Scanning 掃描第三方函式庫的安全性漏洞。參考下圖: 如果是 .NET 6 可以用以下指令掃描:
Prometheus 提供 PromQL 讓我們對 metrics 查詢,可以查出最近 1 小時內的請求成功率,最近 30 分鐘內的請求延遲等等的資訊,下面用範例說明。 Request Per Second 此範例查詢「每秒的請求數量」,我用 Traefik 當作範例說明。 這幫我們得出以下結果:
API Gateway 是什麼? 參考上圖,API Gateway 是一個程式,位於 Client 和 Microservice 之間。當伺服器架構採用這種設計後,會有以下優點: 架構彈性 - 當伺服器架構需要調整的時候,Client 不需要調整(前提是 API 維持不變)。 IP Listing
我發現從統計學、電子、電腦繪圖的角度來看取樣,在說法上有點不同,但我認為大致上的概念是相同的。 資料實在是「太多了」,沒辦法拿這麼多的資料處理,但我們可以降低資料的數量,但和原本的資料大致上差不多,我們就可以做分析,得到我們想要的結果。 Reference:
監控的解決方案有很多種,我這裡選擇的是 Prometheus。實際上只有 Prometheus 還不夠,真正其實會安裝以下項目: 以上這些安裝項目都可以用 kube-prometheus-stack 這個專案提供的 helm chart 安裝。 用 helm 安裝: Reference:
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
Docker-Compose負責對container做快速編排。設定檔預設名稱為docker-compose.yml,在檔案中,可以透過COMPOSE_FILE或-f對設定進行定義。 想要將專案透過Docker-Compose部署,需要創建docker-compose.yml和Dockerfile
Docker是一種容器化技術,可以將應用程式及相關依賴項目打包到一個容器中。這篇文章介紹了安裝Docker的步驟,以及幾個比較偏向使用者的應用程式。
Thumbnail
前言 大家好上次我們教了如何下載 Docker Image 使用,今天我們要教如何產出自己的 Image,這次會使用一個 Dockerfile 範例,自行打包 Docker Image,初步練習使用 Docker 指令 下載 Dockerfile 教學檔案 在這裡我已經幫忙寫好一個 Docke
Thumbnail
當你安裝完docker,並且設定好所有相關程序後。你正要使用docker去進行操作,讓專案可以在容器哩,方便平台移轉、備份、共用等等等等等;如果你遇到CUDA docker runtime 的問題時,這篇正適合你閱讀。 開始之前,如果你要參考怎麼安裝docker,設定docker環境,請參考:
將使用者加入Docker群組 sudo groupadd docker sudo usermod -aG docker $USER 設定開機自動啟動Docker服務 sudo systemctl enable docker sudo systemctl start docker 試跑
Thumbnail
前言 上次我們初步體驗 Docker 快速佈署能力,今天我們要來講解 Dockerfile、Docker Image 與 Docker Container 這些常見的名詞,我們來了解在我們佈署的時候做哪些事情 Docker 佈署流程 首先看到如下圖上半部,在我們一個完整的佈署流程,我們會先將我
Thumbnail
前言 大家好在先前我們講了什麼是 Docker,Docker 好處有什麼以及怎麼安裝 Docker,今天我們要來開始初體驗 Docker 容器,使用後您會發現 Docker 非常的方便快速 Docker Hub 介紹 首先在開始學怎麼抓取 Docker Image 之前,我們要先來介紹 Doc
Thumbnail
前言 上次我們講到 Docker 的功用與好處,今天我們要在講解,如何安裝 Docker 這個容器,讓我們在之後的教學應用更好的實作與練習,現在讓我們開始吧 Docker Engine 與 Docker Desktop 首先在講解怎麼安裝 Docker 時,我們先講解 Docker Engin
Thumbnail
前言 上次我們針對 Docker 這樣容器化技術做了一點介紹,今天我們要來講解 Docker 架構,你是否發現在每次程式上伺服器的流程很麻煩呢 ? 是否發現你寫的程式在別的作業系統不能用呢 ? 如果你遇到這些問題,Docker 都可以幫助你解決這些問題 Docker 架構 在 Docker 這
Thumbnail
前言 大家好我們今天要來教 Docker 這項技術,什麼是 Docker ? Docker 可以幫助我們做什麼事情 ? Docker 是一項容器化技術,他可以降低我們在佈署 App 時,讓我們可以有效的分配作業系統資源,降低佈署作業成本,現在讓我們來了解 Docker 要解決的問題 傳統佈署遇
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
Docker-Compose負責對container做快速編排。設定檔預設名稱為docker-compose.yml,在檔案中,可以透過COMPOSE_FILE或-f對設定進行定義。 想要將專案透過Docker-Compose部署,需要創建docker-compose.yml和Dockerfile
Docker是一種容器化技術,可以將應用程式及相關依賴項目打包到一個容器中。這篇文章介紹了安裝Docker的步驟,以及幾個比較偏向使用者的應用程式。
Thumbnail
前言 大家好上次我們教了如何下載 Docker Image 使用,今天我們要教如何產出自己的 Image,這次會使用一個 Dockerfile 範例,自行打包 Docker Image,初步練習使用 Docker 指令 下載 Dockerfile 教學檔案 在這裡我已經幫忙寫好一個 Docke
Thumbnail
當你安裝完docker,並且設定好所有相關程序後。你正要使用docker去進行操作,讓專案可以在容器哩,方便平台移轉、備份、共用等等等等等;如果你遇到CUDA docker runtime 的問題時,這篇正適合你閱讀。 開始之前,如果你要參考怎麼安裝docker,設定docker環境,請參考:
將使用者加入Docker群組 sudo groupadd docker sudo usermod -aG docker $USER 設定開機自動啟動Docker服務 sudo systemctl enable docker sudo systemctl start docker 試跑
Thumbnail
前言 上次我們初步體驗 Docker 快速佈署能力,今天我們要來講解 Dockerfile、Docker Image 與 Docker Container 這些常見的名詞,我們來了解在我們佈署的時候做哪些事情 Docker 佈署流程 首先看到如下圖上半部,在我們一個完整的佈署流程,我們會先將我
Thumbnail
前言 大家好在先前我們講了什麼是 Docker,Docker 好處有什麼以及怎麼安裝 Docker,今天我們要來開始初體驗 Docker 容器,使用後您會發現 Docker 非常的方便快速 Docker Hub 介紹 首先在開始學怎麼抓取 Docker Image 之前,我們要先來介紹 Doc
Thumbnail
前言 上次我們講到 Docker 的功用與好處,今天我們要在講解,如何安裝 Docker 這個容器,讓我們在之後的教學應用更好的實作與練習,現在讓我們開始吧 Docker Engine 與 Docker Desktop 首先在講解怎麼安裝 Docker 時,我們先講解 Docker Engin
Thumbnail
前言 上次我們針對 Docker 這樣容器化技術做了一點介紹,今天我們要來講解 Docker 架構,你是否發現在每次程式上伺服器的流程很麻煩呢 ? 是否發現你寫的程式在別的作業系統不能用呢 ? 如果你遇到這些問題,Docker 都可以幫助你解決這些問題 Docker 架構 在 Docker 這
Thumbnail
前言 大家好我們今天要來教 Docker 這項技術,什麼是 Docker ? Docker 可以幫助我們做什麼事情 ? Docker 是一項容器化技術,他可以降低我們在佈署 App 時,讓我們可以有效的分配作業系統資源,降低佈署作業成本,現在讓我們來了解 Docker 要解決的問題 傳統佈署遇