捐血一袋救人一命

2023年11月1日 星期三

建立 Docker Image 並執行

建立 Docker Image 並執行

Dockerfile 中 ENTRYPOINT 與 CMD 的差異

建立 power.sh Bash Shell Script

  1. 此 Shell Script 透過 curl 程式,抓取政府資料開放平台台電供電資訊 JSON 格式資料
  2. 然後透過 jq 程式,解析、擷取特定 JSON 資料
  3. 最後顯示台電供電資訊
#!/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 可以執行

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

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

docker build -t power:2 .

分別運行這兩個 Images

兩個 Container 都可以如預期般的執行

docker run -it --name p1 power:1
docker run -it --name p2 power:2

刪除 p1 & p2 Containers

docker rm p1 p2

這次 run Container 時,要求執行 Bash Shell

docker run -it --name p1 power:1 bash
exit
docker run -it --name p2 power:2 bash

結果 p1 進入了 Container 裡面,並執行了 Bash Shell;而 p2 完全忽略要求執行的 Bash Shell

enter image description here

0 意見: