docker-py:用 Python 操控 Docker

Docker 官方维护的 Python SDK 已经有 7,185 Star。这个项目让开发者能在 Python 代码里直接调用 Docker Engine API,不用离开代码环境就能管理容器。

正文顶部截图

核心能力:Python 里跑 Docker

这个库覆盖的功能很全:

  • 运行和停止容器
  • 列出、查看容器状态
  • 拉取镜像、管理本地镜像
  • 读取容器日志(支持流式)
  • 管理 Swarm 集群

安装很简单,pip 直接装:

pip install docker

用法也直接。连上 Docker:

import docker
client = docker.from_env()

跑一个容器:

>>> client.containers.run("ubuntu:latest", "echo hello world")
'hello world\n'

后台运行:

>>> client.containers.run("bfirsh/reticulate-splines", detach=True)
<Container '45e6d2de7c54'>

查看所有容器:

>>> client.containers.list()
[<Container '45e6d2de7c54'>, <Container 'db18e4f20eaa'>, ...]

读日志:

>>> for line in container.logs(stream=True):
...   print(line.strip())
Reticulating spline 2...
Reticulating spline 3...
...

这些操作和命令行 docker rundocker psdocker logs 对应,但全部变成了可编程的 Python 对象。

适合什么场景

我在几个场景里用过这个库,都比较顺手。

第一个是自动化测试。CI 流水线里需要临时启动数据库或缓存容器,用 Python 脚本调 docker-py 比写 shell 更灵活,错误处理也更方便。

第二个是批量管理。需要同时启动几十个容器做压力测试,或者定时清理过期镜像,写成 Python 脚本比手动敲命令高效很多。

第三个是日志采集。container.logs(stream=True) 返回的是生成器,可以实时处理容器输出,集成到现有的 Python 日志系统里。

README区域截图

实际体验

文档写得很清楚,每个 API 都有示例。对象化的设计让代码读起来很直观,client.containers.run() 就是运行容器,container.stop() 就是停止,命名很一致。

需要注意的地方是,这个库依赖本地 Docker daemon,远程连接需要额外配置环境变量或手动指定地址。TLS 支持已经内置,6.0 之后不需要单独安装扩展。

另外,API 版本和 Docker Engine 版本要匹配。如果用太新的 Docker daemon 搭配旧版 sdk,部分功能可能不兼容。

总结

docker-py 是个成熟稳定的工具。对于已经在用 Python 做后端开发或运维脚本的人来说,它能很好地替代 shell 命令,让 Docker 操作融入代码逻辑。

如果你经常需要在 Python 项目里启动容器、管理镜像或处理容器日志,这个库值得看看。7k+ Star 的数据也能说明,用的人确实不少。

er 操作融入代码逻辑。

如果你经常需要在 Python 项目里启动容器、管理镜像或处理容器日志,这个库值得看看。7k+ Star 的数据也能说明,用的人确实不少。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐