bin的Docker部署教程:3步构建体积超小的静态二进制镜像(含docker-compose实战)
【免费下载链接】bin:wastebasket: a paste bin.项目地址: https://gitcode.com/gh_mirrors/bi/bin
bin 是一款用 Rust 编写的极简paste bin(文本粘贴分享服务),无需数据库、无需评论系统,却能在几分钟内通过 Docker 完成部署。本教程带你3 步构建体积超小的静态二进制镜像,并实战 docker-compose 一键启动,让你快速拥有专属的代码片段分享平台。
🧩 为什么选择 bin 做你的 paste bin?
bin 的核心理念是"真正的极简":
- 零依赖:不依赖数据库,所有粘贴内容存放在内存中
- 超轻量:核心代码仅约 300 行,编译后是一个静态二进制文件
- 速度快:基于 Actix-Web 框架,处理请求飞快
- 代码高亮:粘贴 URL 后加文件扩展名即可启用语法高亮
- curl 友好:一条
curl命令即可提交和读取内容
💡 适合场景:团队内部共享配置、临时分享日志片段、作为 API 调试的"便签服务"。
📋 3 步部署总览
| 步骤 | 内容 | 预计耗时 |
|---|---|---|
| 1 | 获取项目源码 | 1 分钟 |
| 2 | 构建多阶段 Docker 镜像 | 2 分钟 |
| 3 | docker-compose 启动并验证 | 1 分钟 |
第 1 步:获取 bin 项目源码
在终端执行以下命令克隆仓库(需要已安装 Docker):
git clone https://gitcode.com/gh_mirrors/bi/bin cd bin克隆完成后,你会看到两个部署相关的核心文件:
Dockerfile:多阶段构建配置,是整个"小体积镜像"的关键docker-compose.yml:服务编排配置,负责端口映射
第 2 步:解析 Dockerfile 多阶段构建 🐳
项目自带的 Dockerfile 采用了多阶段构建(Multi-stage Build),这是构建静态二进制小镜像的最佳实践:
# 第一阶段:编译环境(仅用于构建) FROM rust:1-alpine AS builder RUN apk add --no-cache musl-dev COPY . /sources WORKDIR /sources RUN cargo build --release # 第二阶段:运行时(FROM scratch = 空镜像!) FROM scratch COPY --from=builder /sources/target/release/bin /pastebin COPY --from=builder /etc/passwd /etc/passwd USER nobody EXPOSE 8000 ENTRYPOINT ["/pastebin", "0.0.0.0:8000"]🔍三个关键设计:
musl-dev:使用 musl 标准库编译出静态链接的二进制文件,不依赖任何 glibc 动态库FROM scratch:最终镜像基于完全空白的 scratch 镜像,只包含可执行文件本身,镜像体积通常不到 5MBUSER nobody:以非 root 用户运行,提升安全性
构建镜像只需一条命令:
docker build -t bin-paste:latest .第 3 步:用 docker-compose 一键启动
docker-compose.yml 的配置非常简洁:
services: bin: build: context: . dockerfile: Dockerfile ports: - "8000:8000"启动服务:
docker compose up -d看到bin容器状态为Up后,浏览器访问http://服务器IP:8000,即可看到极简的粘贴页面。
✅ 部署后验证:3 种测试方式
方式一:浏览器测试
打开http://localhost:8000,输入内容提交,即可得到分享链接。
方式二:curl 命令行测试
# 提交内容 curl -X PUT --data 'hello world' http://localhost:8000 # 输出示例:/cateettary # 读取该粘贴 curl http://localhost:8000/cateettary方式三:代码高亮测试
在粘贴链接后加上文件扩展名,例如/cateettary.rs,即可获得 Rust 代码的语法高亮显示。
⚙️ 启动参数配置指南
bin 支持 3 个启动参数(定义见 src/main.rs),按需修改 Dockerfile 中的ENTRYPOINT即可:
| 参数 | 说明 | 默认值 |
|---|---|---|
bind_addr(位置参数) | 监听地址 | 127.0.0.1:8820 |
--buffer-size | 最大同时存储的粘贴条数,超出后自动淘汰最早的 | 1000 |
--max-paste-size | 单条粘贴的最大字节数 | 32KB |
例如,想同时存储 5000 条、每条最大 128KB,可将 ENTRYPOINT 改为:
ENTRYPOINT ["/pastebin", "0.0.0.0:8000", "--buffer-size", "5000", "--max-paste-size", "131072"]⚠️ 注意:内容仅存于内存,容器重启后所有粘贴会丢失。这正是"极简"设计的哲学——快速分享,无需持久化。
❓ 常见问题
Q:镜像为什么这么小?A:FROM scratch+ musl 静态编译的组合,最终镜像只有二进制文件本体,远小于基于 alpine 或 ubuntu 的镜像。
Q:如何限制访问?A:修改 docker-compose 中的端口映射为"127.0.0.1:8000:8000"仅本机可访问,或在外层加 Nginx 反向代理与 HTTPS。
Q:支持 IPv6 吗?A:支持,将bind_addr改为"[::]:8000"即可监听所有 IPv4/IPv6 地址。
📌 总结
| 特性 | 说明 |
|---|---|
| 镜像体积 | 约 5MB(scratch 基底) |
| 依赖 | 无数据库、无外部服务 |
| 端口 | 8000 |
| 部署命令 | docker compose up -d |
至此,你已经用3 步完成了体积超小的 paste bin 服务部署!整个过程无需数据库、无需配置文件,非常适合部署在任意一台闲置的小服务器上,成为团队内部高效的片段分享工具。
【免费下载链接】bin:wastebasket: a paste bin.项目地址: https://gitcode.com/gh_mirrors/bi/bin
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考