在容器中执行简单的管理任务

在本节中,我们将举例说明您可能希望在容器中而不是在计算机上运行的任务。

运行 Perl 脚本

假设您需要从文件中删除所有前导空格,并找到了以下方便的 Perl 脚本来实现这一目的:

cat sample.txt | perl -lpe 's/^\s*//'

  但是,你的工作机器上没有安装 Perl。你能做什么?在机器上安装 Perl?这当然是个办法,而且大多数开发人员或系统管理员都会这么做。但等一下,你的机器上已经安装了 Docker。难道我们不能用 Docker 来避免安装 Perl 吗?难道我们不能在任何支持 Docker 的操作系统上这样做吗?是的,我们可以。这就是我们要做的。

创建一个sample.txt文件,内容如下:

           1234567890
              This is some text
               another line of text
         more text
final line

请注意每行开头的空格。保存文件。

     现在,我们可以运行一个安装了 Perl 的容器了。庆幸的是,Docker Hub 上有官方 Perl 镜像。我们将使用该镜像的精简版。普通 Perl Docker 镜像与精简版镜像的主要区别在于它们的大小和镜像中包含的组件。两种镜像都提供 Perl 运行环境,但它们针对不同的使用情况进行了优化:

docker container run --rm -it \
    -v $(pwd):/usr/src/app \
    -w /usr/src/app \
    perl:slim sh -c "cat sample.txt | perl -lpe 's/^\s*//'"

    前面的命令以交互方式运行 Perl 容器 (perl:slim),将当前文件夹的内容映射到容器的 /usr/src/app 文件夹,并将容器内的工作文件夹设置为 /usr/src/app。在容器内运行的命令如下:

sh -c "cat sample.txt | perl -lpe 's/^\s*//'"

基本上,它会生成一个 Bourne shell 并执行我们想要的 Perl 命令。分析上述命令生成的输出结果。它应该是这样的

    第一次执行命令时,会先拉取镜像,容器启动后,便会执行perl的脚本,也就是说,所有的尾部空白都已删除。

    无需在机器上安装 Perl,我们就能实现目标。更重要的是,脚本运行后,容器会从系统中移除,不会留下任何痕迹,因为我们在 docker container run 命令中使用了 --rm 标志,它会自动移除已停止的容器。

运行 Python 脚本

    很多人都会使用Python 脚本来自动完成一些不容易用 Bash 等语言编写的任务。现在,如果 Python 脚本是用 Python 3.x 编写的,而你的机器上只安装了 Python 2.7 或根本没有安装,那么最简单的解决方案就是在容器中执行脚本。让我们假设一个简单的例子:Python 脚本计算给定文件中的行数、字数和字母数,并将结果输出到控制台:

添加 stats.py 文件,并添加以下内容   

import sys

fname = sys.argv[1]
lines = 0
words = 0
letters = 0
for line in open(fname):
    lines += 1
    letters += len(line)
    pos = 'out'
    for letter in line:
        if letter != ' ' and pos == 'out':
            words += 1
            pos = 'in'
        elif letter == ' ':
            pos = 'out'
print('Lines:', lines)
print('Words:', words)
print('Letters:', letters)

保存文件后,可以使用以下命令运行该文件

docker container run --rm -it \
    -v $(pwd):/usr/src/app \
    -w /usr/src/app \
     python:3-alpine python stats.py sample.txt

请注意,在本例中,我们重复使用了上一节 "运行 Perl 脚本 "中的 sample.txt 文件。输出结果如下:

       这种方法的妙处在于,之前的 Perl 脚本和最后的 Python 脚本现在可以在安装了任何操作系统的任何计算机上运行,只要该计算机是 Docker 主机,因此可以运行容器。 

       如果我的文章对你有意义,请关注我的公众号,每天都有新的分享!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

面朝大海,春不暖,花不开

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值