需求
我在看 Hexo 的 issue 时,看到了一个需求
Docker image to avoid the environment setting issue.
刚好,我自己有 Docker 的基础,就决定提交一个 PR ,解决这个问题。
核心实现
在开发这一部分的时候,一个最核心的问题是,你需要准备 2 个文件,一个是 DockerFile ,另一个是对应的 Bash Script。
原因在于
- Docker File 用于打包基础环境,比如全局安装 Hexo
- Bash Script 则是为了方便挂载本地的文件系统,开辟端口等(端口可以放在 Docker file 中,文件系统必须要现场挂载,因为你的目的是使用 Cli 管理本地文件,就一定要把文件挂载过去)
具体实现的思路是,Docker 镜像本身提供的是基础环境,将 CMD 设置为 Bash ,方便执行具体的命令。
而 Bash Script 则将需要执行的命令整体传递过去。
代码
Docker File
FROM node:10
RUN npm install -g hexo-cli
CMD ["/bin/bash"]
Code language: CSS (css)
Bash Script
#!/bin/sh
docker run \
--interactive --tty --rm \
--volume "$PWD":/hexosite \
--workdir /hexosite \
-p 4000:4000 \
bestony/hexojs:latest "$@"
Code language: JavaScript (javascript)
总结
Docker 化 Cli 命令其实并不复杂,核心在于 CMD 与你的 Bash Script 的配合。
其他
你可以查看 https://github.com/hexojs/hexo/pull/3891 来学习到更多的内容。