跳到主要内容

如何用 shell 运行 docker 命令

· 阅读需 2 分钟
阿狸先森
全栈开发

前言

有时,我们会遇到一些需要频繁使用的命令。虽然有了 Zsh 的历史命令自动补全插件,它可以帮助我们快速找到之前执行过的命令,但并不是每台机器都配置了这些插件。而且,有些情况下记住所有复杂的命令也并不容易。为了方便使用,我们可以将这些常用命令写成一个 Shell 脚本,这样就可以随时在不同的环境中轻松运行它们。

封装 Algolia 同步命令

在我的博客中,当我需要同步内容到 Algolia 搜索服务时,通常会手动执行以下命令:

docker run -it --env-file=.env -e "CONFIG=$(cat docsearch.json | jq -r tostring)" algolia/docsearch-scraper 

这个命令较为复杂,尤其是在云服务器上执行时,我不太可能每次都记住它。因此,我选择将这个命令封装成一个 Shell 脚本,以便随时使用。

为什么不放入 CI/CD 流程中?

虽然自动化是一个好习惯,但我没有将这个命令放入 CI/CD 流程中,因为并不是每次部署都需要同步 Algolia 的内容。我希望能在需要时手动触发同步,而不是每次更新都自动执行。因此,将命令封装成脚本就显得尤为重要。

创建 Shell 脚本

为了简化这个过程,首先创建一个名为 push-algolia.sh 的 脚本,内容如下:

#!/bin/bash
if [ -f .env ]; then
export $(cat .env | xargs)
fi
CONFIG=$(cat docsearch.json | jq -r tostring)
docker run -it --env-file=.env -e "CONFIG=${CONFIG}" algolia/docsearch-scraper

运行脚本

封装好了之后,当需要同步内容到 Algolia 时,只需运行以下命令即可。也算是复杂命令简单化了吧 😄

sh push-algolia.sh

效果

sh push-algolia.sh
> DocSearch: https://alisir.cn/ 0 records)
> DocSearch: https://alisir.cn/projects/ 0 records)
> DocSearch: https://alisir.cn/docs/tags/%E5%85%A8%E5%B1%80/ 3 records)
> DocSearch: https://alisir.cn/docs/tags/udp/ 3 records)
...