前置说明(必看!适配你当前网络环境)

根据实测国内网络环境:

  1. GitHub网页正常访问、GHCR容器仓库支持国内加速,优先选用GHCR存放镜像;
  2. Docker Hub官网无法访问(境外网页拦截),不推荐使用Docker Hub推送镜像;
  3. ❌ 清华PyPI源网页解析失败,安装Python依赖禁止使用清华源
  4. ✅ 国内可用镜像加速器:https://docker.1ms.runhttps://docker.m.daocloud.io
    • 重点说明:两个加速器网页打不开属于正常现象,网页解析失败不影响Docker后台加速功能,配置到配置文件即可正常加速GHCR、DockerHub镜像;
    • DaoCloud官方源,专门适配GHCR镜像加速,全程免费稳定;
  5. 全文全程避开打不开的境外网站,所有命令、配置复制即用,零基础运维/开发直接照搬,无跳步。

一、项目背景&适用人群

很多开发者本地写完pdu.py PDU机柜电源控制单文件命令行脚本后,分发遇到大量问题:

  • 其他服务器缺少对应Python版本;
  • 第三方依赖安装失败、环境冲突;
  • Windows/Linux跨系统运行报错;
  • 同事部署步骤繁琐,上手门槛高。

Docker可以把 脚本+Python运行环境+全部依赖 打包成一个镜像,实现:开发者一次构建,用户一条命令直接运行,零环境配置

本文全程零跳过、全细节、报错兜底、国内网络适配,小白也能100%落地。


二、前置环境准备(逐条核对,缺一不可)

2.1 服务器基础环境

  1. Linux服务器(CentOS7/8、Ubuntu20.04/22.04 均可);
  2. Docker 版本 ≥ 20.10(主流稳定版);
  3. 服务器可以正常联网,能访问GitHub官网;
  4. 提前准备好你的业务脚本: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令牌步骤

  1. 打开GitHub官网,右上角头像 → Settings
  2. 滑到页面底部 → Developer settings
  3. Personal access tokens → Tokens(classic)
  4. Generate new token (classic)
  5. 参数配置:
    • Note:docker-ghcr-push-pdu-tool
    • Expiration:No expiration(永久)
    • 权限仅勾选 write:packages
  6. 页面底部Generate token,立即复制生成的密钥,丢失无法找回

6.2 终端登录GHCR

替换 yourgithubusernameyourtoken

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 设置镜像仓库公开(必做)

  1. GitHub头像 → Your profile → Packages
  2. 打开pdu-tool包详情页 → Package settings
  3. 下滑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

八、常见报错汇总

  1. ghcr.io推送超时:检查daemon.json加速器,重启Docker
  2. 401登录失败:用户名错误、PAT复制不全、未勾选write:packages权限
  3. 403拉取失败:镜像包未设置为Public
  4. pip安装超时:使用官方源,不要配置清华源
  5. Permission denied:Dockerfile缺少chmod授权,重新构建
  6. Docker Hub无法访问:正常,全程只用GHCR

九、生产环境最佳实践

  1. 生产环境禁止使用latest标签,固定语义化版本v1.0
  2. 定期清理构建缓存:docker builder prune
  3. 账号密码使用环境变量传入,不写入镜像/配置文件
  4. 脚本更新后重新build、打tag、推送新版本

十、完整流程链路

编写pdu.py → 配置Docker加速器 → 编写Dockerfile构建镜像 → 本地测试验证 → GitHub生成PAT → 登录GHCR打标签推送 → 设置仓库公开 → 发布README文档 → 用户docker run直接使用

更多推荐