保姆级教程|pdu.py单文件命令行工具:Docker镜像构建、公网推送、用户落地使用全流程(适配国内网络)
·
前置说明(必看!适配你当前网络环境)
根据实测国内网络环境:
- ✅ GitHub网页正常访问、GHCR容器仓库支持国内加速,优先选用GHCR存放镜像;
- ❌ Docker Hub官网无法访问(境外网页拦截),不推荐使用Docker Hub推送镜像;
- ❌ 清华PyPI源网页解析失败,安装Python依赖禁止使用清华源;
- ✅ 国内可用镜像加速器:
https://docker.1ms.run、https://docker.m.daocloud.io- 重点说明:两个加速器网页打不开属于正常现象,网页解析失败不影响Docker后台加速功能,配置到配置文件即可正常加速GHCR、DockerHub镜像;
- DaoCloud官方源,专门适配GHCR镜像加速,全程免费稳定;
- 全文全程避开打不开的境外网站,所有命令、配置复制即用,零基础运维/开发直接照搬,无跳步。
一、项目背景&适用人群
很多开发者本地写完pdu.py PDU机柜电源控制单文件命令行脚本后,分发遇到大量问题:
- 其他服务器缺少对应Python版本;
- 第三方依赖安装失败、环境冲突;
- Windows/Linux跨系统运行报错;
- 同事部署步骤繁琐,上手门槛高。
Docker可以把 脚本+Python运行环境+全部依赖 打包成一个镜像,实现:开发者一次构建,用户一条命令直接运行,零环境配置。
本文全程零跳过、全细节、报错兜底、国内网络适配,小白也能100%落地。
二、前置环境准备(逐条核对,缺一不可)
2.1 服务器基础环境
- Linux服务器(CentOS7/8、Ubuntu20.04/22.04 均可);
- Docker 版本 ≥ 20.10(主流稳定版);
- 服务器可以正常联网,能访问GitHub官网;
- 提前准备好你的业务脚本:pdu.py(单文件命令行工具)。
2.2 必备账号
仅需一个 GitHub账号(无需Docker Hub账号,Docker Hub国内打不开直接放弃)
2.3 目录规划(严格按照我这个目录创建,避免报错)
# 1. 创建项目文件夹
mkdir -p /root/workspace/pdu-tool
# 2. 进入工作目录(后续所有命令都要在这个目录执行!重点!)
cd /root/workspace/pdu-tool
# 3. 上传你的业务脚本 pdu.py 到这个文件夹内
# 执行ls能看到 pdu.py 即为目录配置成功
ls
三、第一步:配置Docker国内镜像加速器(解决构建/拉取超时)
这是国内用户最关键一步!不配置会出现镜像拉取超时、构建卡住、ghcr.io推送超时;适配你可用的两大国内加速源。
3.1 编辑加速器配置文件
vim /etc/docker/daemon.json
粘贴内容:
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.m.daocloud.io"
],
"log-driver":"json-file",
"log-opts": {"max-size":"10m","max-file":"3"}
}
3.2 生效配置
systemctl daemon-reload
systemctl restart docker
3.3 验证加速器是否生效
docker info
页面底部看到两个加速地址,代表配置100%成功;网页无法访问两个加速链接不代表配置失效。
四、第二步:编写Dockerfile镜像构建文件(单文件Python脚本专用)
cd /root/workspace/pdu-tool
vim Dockerfile
场景1:pdu.py 无第三方依赖(首选)
FROM python:3.9-slim
WORKDIR /app
COPY pdu.py .
RUN chmod +x ./pdu.py
ENTRYPOINT ["python", "pdu.py"]
场景2:pdu.py 需要第三方python库
先新建requirements.txt写入依赖包,Dockerfile内容:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY pdu.py .
RUN chmod +x ./pdu.py
ENTRYPOINT ["python", "pdu.py"]
可选优化:创建.dockerignore
vim .dockerignore
__pycache__
*.pyc
*.log
.git
.gitignore
.env
tmp/
五、第三步:本地构建Docker镜像 + 本地测试
5.1 构建镜像
docker build -t pdu-tool:v1.0 .
⚠️ 末尾小数点不能丢!
5.2 查看本地镜像
docker images | grep pdu-tool
5.3 本地功能测试
# 查看帮助
docker run --rm pdu-tool:v1.0 --help
# 业务测试示例
docker run --rm pdu-tool:v1.0 -i 192.168.1.100 -c on
--rm:运行完成自动清理容器,不残留垃圾。
六、第四步:GHCR(ghcr.io)镜像仓库推送(国内最优方案)
6.1 GitHub网页生成PAT令牌步骤
- 打开GitHub官网,右上角头像 → Settings
- 滑到页面底部 → Developer settings
- Personal access tokens → Tokens(classic)
- Generate new token (classic)
- 参数配置:
- Note:
docker-ghcr-push-pdu-tool - Expiration:No expiration(永久)
- 权限仅勾选
write:packages
- Note:
- 页面底部Generate token,立即复制生成的密钥,丢失无法找回
6.2 终端登录GHCR
替换 yourgithubusername、yourtoken
docker login ghcr.io -u yourgithubusername -p yourtoken
输出Login Succeeded即成功。
6.3 镜像打规范标签
docker tag pdu-tool:v1.0 ghcr.io/yourgithubusername/pdu-tool:latest
docker tag pdu-tool:v1.0 ghcr.io/yourgithubusername/pdu-tool:v1.0
6.4 推送镜像
docker push ghcr.io/yourgithubusername/pdu-tool:latest
docker push ghcr.io/yourgithubusername/pdu-tool:v1.0
6.5 设置镜像仓库公开(必做)
- GitHub头像 → Your profile → Packages
- 打开pdu-tool包详情页 → Package settings
- 下滑Danger Zone → Change visibility → 选择Public保存
6.6 跨机器拉取验证
docker run --rm ghcr.io/yourgithubusername/pdu-tool:v1.0 --help
七、用户使用文档(直接复制到README)
PDU-Tool 容器化使用文档
无需安装Python与依赖,Docker一键运行,国内GHCR镜像高速访问。
前置:服务器安装Docker并配置国内镜像加速器
1. 快速执行
# 查看帮助
docker run --rm ghcr.io/yourgithubusername/pdu-tool:latest --help
# PDU开机
docker run --rm ghcr.io/yourgithubusername/pdu-tool:latest -i 192.168.1.100 -c on
# PDU关机
docker run --rm ghcr.io/yourgithubusername/pdu-tool:latest -i 192.168.1.100 -c off
2. 挂载本地配置文件
docker run --rm -v $(pwd)/config.yaml:/app/config.yaml ghcr.io/yourgithubusername/pdu-tool:latest
3. 环境变量传递账号密码
docker run --rm \
-e PDU_ADMIN_USER=admin \
-e PDU_ADMIN_PASS=Admin@123 \
ghcr.io/yourgithubusername/pdu-tool:latest -i 192.168.1.100 -c on
4. 容器内交互式调试
docker run -it --rm ghcr.io/yourgithubusername/pdu-tool:latest /bin/bash
5. Docker Compose部署
新建docker-compose.yml
version: '3.8'
services:
pdu-tool:
image: ghcr.io/yourgithubusername/pdu-tool:v1.0
container_name: pdu-control-service
environment:
- PDU_USER=admin
- PDU_PASS=123456
command: ["-i","192.168.1.100","-c","on"]
restart: "no"
启动命令:
docker compose up -d
八、常见报错汇总
- ghcr.io推送超时:检查daemon.json加速器,重启Docker
- 401登录失败:用户名错误、PAT复制不全、未勾选write:packages权限
- 403拉取失败:镜像包未设置为Public
- pip安装超时:使用官方源,不要配置清华源
- Permission denied:Dockerfile缺少chmod授权,重新构建
- Docker Hub无法访问:正常,全程只用GHCR
九、生产环境最佳实践
- 生产环境禁止使用latest标签,固定语义化版本v1.0
- 定期清理构建缓存:
docker builder prune - 账号密码使用环境变量传入,不写入镜像/配置文件
- 脚本更新后重新build、打tag、推送新版本
十、完整流程链路
编写pdu.py → 配置Docker加速器 → 编写Dockerfile构建镜像 → 本地测试验证 → GitHub生成PAT → 登录GHCR打标签推送 → 设置仓库公开 → 发布README文档 → 用户docker run直接使用
更多推荐
所有评论(0)