1. 程式人生 > 其它 >如何在 Docker 中執行自定義指令碼

如何在 Docker 中執行自定義指令碼

機器翻譯自:Run Custom Scripts In Docker With Arguments - ENTRYPOINT Vs CMD (devopscube.com)

在這個例子中,我們自定義一個 shell 指令碼,它接受三個命令列引數($1、$2 和 $3)。 如果將 true 作為第一個引數傳遞,則指令碼將無限迴圈執行-死迴圈。 其他兩個引數作為列印輸出文字。

第 1 步:建立一個script.sh檔案,複製以下內容。

#!/bin/bash
set -x
while $1
do
    echo "Press [CTRL+C] to stop.."
    sleep 5
    echo
"My second and third argument is $2 & $3" done

第 2 步:把 script.sh 和 Dockerfile 的放在同一資料夾下。

使用以下內容建立 Dockerfile,其是將指令碼複製到容器,並使用 CMD 傳遞的引數來執行 ENTRYPOINT 中的命令。

bash中我們將 true 作為第一個引數傳遞,因此指令碼將在無限迴圈中執行,將 batman 和 superman 引數作為輸出。

FROM centos:7
MAINTAINER Devopscube
RUN yum -y update && \
    
yum -y install httpd && \ yum clean all COPY ./script.sh / RUN chmod +x /script.sh ENTRYPOINT ["/script.sh"] CMD ["true", "batman", "superman"]

第 3 步:使用此Dockerfile構建映象,映象起名為script-demo。

docker build -t script-demo .

第 4 步:使用 script-demo 映象建立並執行一個名為 demo 的容器。

docker run --name demo -d script-demo

可以使用以下命令檢視容器日誌。

docker logs demo -f

第 5 步:還可以在 docker run 命令的末尾傳遞 CMD 引數。 它將覆蓋在 Dockerfile 中傳遞的引數。 例如:

docker run --name demo -d script-demo false spiderman hulk

這裡的"false spiderman hulk"將會覆蓋寫在Dockerfile裡的"true", "batman", "superman"等幾個引數。

特別值得注意一下的是,這裡不管是 ENTRYPOINT 還是 CMD 都是定義在括號裡,這種情況下,如果執行容器的時候不使用 -d 命令,則該容器會以命令列前臺程式執行,將會直接在當前命令列裡列印容器內部的echo輸出,也可以直接用 ctrl + c 直接停止該容器。