达永编程网

程序员技术分享与交流平台

用代码画图?Mermaid + Docker解锁数据可视化新姿势

一、什么是 Mermaid?

Mermaid 是一个基于 JavaScript 的图表工具,支持用 Markdown 语法生成交互式图表(如流程图、序列图、甘特图、类图等)。它广泛用于文档编写、技术演示和博客中。

二、使用官方 Docker 镜像

1. 拉取官方镜像

# 拉取最新版 Mermaid CLI 镜像(基于 Alpine Linux)
docker pull mermaid/mermaid-cli

# 或者拉取完整版镜像(包含更多工具)
docker pull mermaid/mermaid

2. 运行容器

# 运行交互式终端(基础版)
docker run -it --rm mermaid/mermaid-cli

# 运行容器并挂载当前目录(方便文件操作)
docker run -it -v $(pwd):/data mermaid/mermaid-cli

3. 验证安装

在容器中执行:

mermaid --version  # 查看版本号

三、自定义 Docker 镜像

1. 创建Dockerfile

dockerfile
# 使用 Node.js 作为基础镜像
FROM node:18-alpine

# 安装 Mermaid CLI
RUN npm install -g mermaid

# 设置工作目录
WORKDIR /data

# 暴露端口(可选)
EXPOSE 8080

# 启动命令(示例)
CMD ["mermaid", "init"]

2. 构建镜像

docker build -t my-mermaid-image .

3. 运行容器

# 挂载本地目录并运行
docker run -it -v $(pwd):/data my-mermaid-image

四、通过 Docker Compose 管理

1. 编写docker-compose.yml

yaml
version: '3'
services:
  mermaid:
    image: mermaid/mermaid-cli
    volumes:
      - ./docs:/data
    ports:
      - "8080:8080"

2. 启动服务

bash
docker-compose up -d

五、在容器中使用 Mermaid

1. 生成图表文件

# 将 Markdown 文件转换为 PNG
mermaid ./input.md --output ./output.png

# 生成 PDF
mermaid ./input.md --pdf ./output.pdf

2. 通过 Web 服务渲染

若需通过 HTTP 提供图表渲染功能,可以使用以下步骤:

  1. 安装 Express 和 Mermaid 服务器
bash
npm install express mermaid
  1. 创建 server.js
javascript
const express = require('express'); 
const app = express(); const mermaid = require('mermaid'); 
pp.get('/render', (req, res) => { const code = req.query.code; 
const svg = mermaid.render(code); res.send(svg); }); 
app.listen(3000, () => console.log('Server running on port 3000'));
  1. 构建镜像并运行
bash
docker build -t mermaid-server . docker run -p 3000:3000 mermaid-server

六、常见问题和解决方案

  1. 权限问题
  2. 在挂载卷时添加用户权限:
bash
docker run -it -u $(id -u):$(id -g) -v $(pwd):/data mermaid/mermaid-cli
  1. 图表不渲染
  2. 确保输入文件路径正确,且 Mermaid 语法无误。
  3. 服务端口冲突
  4. 修改容器端口映射(例如 EXPOSE 8081)。

七、高级用法

1. 结合 Node.js 项目

在项目中通过脚本调用 Mermaid:

javascript
const { exec } = require('child_process');
exec('mermaid input.md -o output.png', (err, stdout, stderr) => {
  console.log(err ? 'Error' : 'Success');
});

2. 使用 Docker Swarm 部署

通过 docker stack deploy 在集群中管理多节点服务。


八、参考资源

  • Mermaid git 页面:

https://github.com/mermaid-js/mermaid-cli



  • Mermaid 文档:

https://mermaid.nodejs.cn/intro/getting-started.html

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言