zoukankan      html  css  js  c++  java
  • 如何在 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 直接停止该容器。

  • 相关阅读:
    手机号码正则表达式
    POJ 3233 Matrix Power Series 矩阵快速幂
    UVA 11468
    UVA 1449
    HDU 2896 病毒侵袭 AC自动机
    HDU 3065 病毒侵袭持续中 AC自动机
    HDU 2222 Keywords Search AC自动机
    POJ 3461 Oulipo KMP模板题
    POJ 1226 Substrings KMP
    UVA 1455 Kingdom 线段树+并查集
  • 原文地址:https://www.cnblogs.com/lihan829/p/15146681.html
Copyright © 2011-2022 走看看