如何在 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 直接停止該容器。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM