前置说明(必看!适配你当前网络环境)
根据实测国内网络环境:
- ✅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 restartdocker3.3 验证加速器是否生效
dockerinfo页面底部看到两个加速地址,代表配置100%成功;网页无法访问两个加速链接不代表配置失效。
四、第二步:编写Dockerfile镜像构建文件(单文件Python脚本专用)
cd/root/workspace/pdu-toolvimDockerfile场景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 构建镜像
dockerbuild-tpdu-tool:v1.0.⚠️ 末尾小数点不能丢!
5.2 查看本地镜像
dockerimages|greppdu-tool5.3 本地功能测试
# 查看帮助dockerrun--rmpdu-tool:v1.0--help# 业务测试示例dockerrun--rmpdu-tool:v1.0-i192.168.1.100-con--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
dockerlogin ghcr.io-uyourgithubusername-pyourtoken输出Login Succeeded即成功。
6.3 镜像打规范标签
dockertag pdu-tool:v1.0 ghcr.io/yourgithubusername/pdu-tool:latestdockertag pdu-tool:v1.0 ghcr.io/yourgithubusername/pdu-tool:v1.06.4 推送镜像
dockerpush ghcr.io/yourgithubusername/pdu-tool:latestdockerpush ghcr.io/yourgithubusername/pdu-tool:v1.06.5 设置镜像仓库公开(必做)
- GitHub头像 → Your profile → Packages
- 打开pdu-tool包详情页 → Package settings
- 下滑Danger Zone → Change visibility → 选择Public保存
6.6 跨机器拉取验证
dockerrun--rmghcr.io/yourgithubusername/pdu-tool:v1.0--help七、用户使用文档(直接复制到README)
PDU-Tool 容器化使用文档
无需安装Python与依赖,Docker一键运行,国内GHCR镜像高速访问。
前置:服务器安装Docker并配置国内镜像加速器
1. 快速执行
# 查看帮助dockerrun--rmghcr.io/yourgithubusername/pdu-tool:latest--help# PDU开机dockerrun--rmghcr.io/yourgithubusername/pdu-tool:latest-i192.168.1.100-con# PDU关机dockerrun--rmghcr.io/yourgithubusername/pdu-tool:latest-i192.168.1.100-coff2. 挂载本地配置文件
dockerrun--rm-v$(pwd)/config.yaml:/app/config.yaml ghcr.io/yourgithubusername/pdu-tool:latest3. 环境变量传递账号密码
dockerrun--rm\-ePDU_ADMIN_USER=admin\-ePDU_ADMIN_PASS=Admin@123\ghcr.io/yourgithubusername/pdu-tool:latest-i192.168.1.100-con4. 容器内交互式调试
dockerrun-it--rmghcr.io/yourgithubusername/pdu-tool:latest /bin/bash5. Docker Compose部署
新建docker-compose.yml
version:'3.8'services:pdu-tool:image:ghcr.io/yourgithubusername/pdu-tool:v1.0container_name:pdu-control-serviceenvironment:-PDU_USER=admin-PDU_PASS=123456command:["-i","192.168.1.100","-c","on"]restart:"no"启动命令:
dockercompose 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直接使用