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

  • 相关阅读:
    图片的使用
    对话框
    窗体
    浏览器与android移动端视频互播技术实现
    Arcengine实现创建网络数据集札记(三)
    Arcengine实现创建网络数据集札记(二)
    Arcengine实现创建网络数据集札记(一)
    2019年年初iOS招人心得笔记(附面试题)
    2019年,200道面试题打造最受企业欢迎的iOS程序猿!
    BAT面试总结——iOS开发高级工程师
  • 原文地址:https://www.cnblogs.com/lihan829/p/15146681.html
Copyright © 2011-2022 走看看