)
前置说明必看适配你当前网络环境根据实测国内网络环境✅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场景1pdu.py 无第三方依赖首选FROM python:3.9-slim WORKDIR /app COPY pdu.py . RUN chmod x ./pdu.py ENTRYPOINT [python, pdu.py]场景2pdu.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]可选优化创建.dockerignorevim.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运行完成自动清理容器不残留垃圾。六、第四步GHCRghcr.io镜像仓库推送国内最优方案6.1 GitHub网页生成PAT令牌步骤打开GitHub官网右上角头像 → Settings滑到页面底部 → Developer settingsPersonal access tokens → Tokens(classic)Generate new token (classic)参数配置Notedocker-ghcr-push-pdu-toolExpirationNo expiration永久权限仅勾选write:packages页面底部Generate token立即复制生成的密钥丢失无法找回6.2 终端登录GHCR替换yourgithubusername、yourtokendockerlogin 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七、用户使用文档直接复制到READMEPDU-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_USERadmin\-ePDU_ADMIN_PASSAdmin123\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.ymlversion:3.8services:pdu-tool:image:ghcr.io/yourgithubusername/pdu-tool:v1.0container_name:pdu-control-serviceenvironment:-PDU_USERadmin-PDU_PASS123456command:[-i,192.168.1.100,-c,on]restart:no启动命令dockercompose up-d八、常见报错汇总ghcr.io推送超时检查daemon.json加速器重启Docker401登录失败用户名错误、PAT复制不全、未勾选write:packages权限403拉取失败镜像包未设置为Publicpip安装超时使用官方源不要配置清华源Permission deniedDockerfile缺少chmod授权重新构建Docker Hub无法访问正常全程只用GHCR九、生产环境最佳实践生产环境禁止使用latest标签固定语义化版本v1.0定期清理构建缓存docker builder prune账号密码使用环境变量传入不写入镜像/配置文件脚本更新后重新build、打tag、推送新版本十、完整流程链路编写pdu.py → 配置Docker加速器 → 编写Dockerfile构建镜像 → 本地测试验证 → GitHub生成PAT → 登录GHCR打标签推送 → 设置仓库公开 → 发布README文档 → 用户docker run直接使用