Dockerfile 中 ENTRYPOINT 與 CMD 的差異 --- #### 建立 power.sh Bash Shell Script 1. 此 Shell Script 透過 [curl](https://curl.se/) 程式,抓取[政府資料開放平台](https://data.gov.tw/)的[台電供電資訊](https://data.gov.tw/dataset/162595) [JSON 格式資料](https://service.taipower.com.tw/data/opendata/apply/file/d006020/001.json) 2. 然後透過 [jq](https://jqlang.github.io/jq/) 程式,解析、擷取特定 JSON 資料 3. 最後顯示台電供電資訊 ```bash= #!/bin/bash #取得 JSON 資料並解析 json_data=$(curl -s -k https://data.taipower.com.tw/opendata/apply/file/d006020/001.json) yday_maxi_sply_capacity=$(echo "$json_data" | jq -r '.records[2].yday_maxi_sply_capacity') fore_maxi_sply_capacity=$(echo "$json_data" | jq -r '.records[1].fore_maxi_sply_capacity') yday_peak_dema_load=$(echo "$json_data" | jq -r '.records[2].yday_peak_dema_load') fore_peak_dema_load=$(echo "$json_data" | jq -r '.records[1].fore_peak_dema_load') publish_time=$(echo "$json_data" | jq -r '.records[1].publish_time') #比較並顯示結果 fore_maxi_sply_capacity=${fore_maxi_sply_capacity%.*} yday_maxi_sply_capacity=${yday_maxi_sply_capacity%.*} fore_peak_dema_load=${fore_peak_dema_load%.*} yday_peak_dema_load=${yday_peak_dema_load%.*} if [ $fore_maxi_sply_capacity -gt $yday_maxi_sply_capacity ]; then result="預估供電能力有增加" else result="預估供電能力有下降" fi echo "資料時間: ${publish_time}" echo "昨日最大供電能力: " $yday_maxi_sply_capacity echo "預估今日最大供電能力: " $fore_maxi_sply_capacity echo "比較結果: " "$result" echo "昨日最大用電量: " $yday_peak_dema_load echo "預估今日最大用電量: " $fore_peak_dema_load ``` #### 設定 power.sh Bash Shell Script 可以執行 ```bash chmod +x power.sh ``` 建立 Dockerfile,內容如下: ``` FROM rockylinux:8.7 RUN dnf update -y RUN dnf install -y curl RUN dnf install -y jq COPY power.sh /usr/bin/power.sh CMD /usr/bin/power.sh ``` 建立 power:1 Docker Image ```bash= docker build -t power:1 . ``` 修改 Dockerfile,內容如下: ``` FROM rockylinux:8.7 RUN dnf update -y RUN dnf install -y curl RUN dnf install -y jq COPY power.sh /usr/bin/power.sh WORKDIR /usr/bin ENTRYPOINT ["power.sh"] ``` 建立 power:2 Docker Image ```bash= docker build -t power:2 . ``` #### 分別運行這兩個 Images #### 兩個 Container 都可以如預期般的執行 ```bash docker run -it --name p1 power:1 docker run -it --name p2 power:2 ```  #### 刪除 p1 & p2 Containers ```bash docker rm p1 p2 ``` #### 這次 run Container 時,要求執行 Bash Shell ```bash docker run -it --name p1 power:1 bash exit docker run -it --name p2 power:2 bash ``` #### 結果 p1 進入了 Container 裡面,並執行了 Bash Shell;而 p2 完全忽略要求執行的 Bash Shell 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up