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 直接停止该容器。

  • 相关阅读:
    PHP json_decode()解析失败 返回NULL 错误是4
    PHP 合并两个二维数组 array_map 和 array_walk 的区别
    PHP二维数组指定字段进行排序
    常用正则汇总
    PHP中json_encode()使用须知,JSON数组和JSON对象
    PHPExcel大文件块级别读取 速度快 减少占用资源
    移动端border-radius失效
    JavaScript滑动页面到顶部
    软键盘把底部div顶上去
    JavaScript滚动div
  • 原文地址:https://www.cnblogs.com/lihan829/p/15146681.html
Copyright © 2011-2022 走看看