在Python中操作Docker本质是通过调用Docker的API接口实现容器生命周期管理、镜像操作等功能,目前主流的实现方案基于官方提供的SDK或者第三方封装库完成,能够覆盖大部分日常容器管理需求。

常用Python操作Docker的方案
1. docker-py库(官方推荐)
docker-py是Docker官方维护的Python SDK,封装了Docker Engine API的所有功能,支持容器、镜像、网络、卷等全维度操作,稳定性和兼容性都有保障,是大多数场景下的首选方案。
首先通过pip安装该库:
pip install docker
连接Docker服务的基本示例:
import docker # 连接本地Docker服务,默认使用unix socket通信 client = docker.from_env() # 如果是远程Docker服务,可以指定base_url参数 # client = docker.DockerClient(base_url="tcp://192.168.0.1:2375") print(client.version())
2. 直接调用Docker API
如果不想依赖第三方库,也可以通过requests库直接请求Docker Engine的REST API,这种方式更灵活,但需要开发者自己处理请求参数和响应解析。
核心容器管理操作示例
容器创建与启动
创建并启动一个nginx容器的完整代码:
import docker
client = docker.from_env()
# 拉取nginx镜像,如果本地不存在会自动下载
client.images.pull("nginx:latest")
# 创建并启动容器
container = client.containers.run(
image="nginx:latest",
name="test_nginx",
ports={"80/tcp": 8080}, # 映射宿主机8080端口到容器80端口
detach=True # 后台运行
)
print(f"容器ID: {container.id}")
print(f"容器状态: {container.status}")
容器状态查询与停止
查询所有运行中的容器,并停止指定容器的示例:
import docker
client = docker.from_env()
# 获取所有运行中的容器
running_containers = client.containers.list()
print("当前运行中的容器:")
for container in running_containers:
print(f"容器名称: {container.name}, 容器ID: {container.id[:12]}")
# 停止指定名称的容器
target_container = client.containers.get("test_nginx")
target_container.stop()
print(f"容器{target_container.name}已停止")
容器删除与镜像清理
删除已停止的容器和本地无用镜像的操作:
import docker
client = docker.from_env()
# 获取所有容器(包括已停止的)
all_containers = client.containers.list(all=True)
for container in all_containers:
if container.status == "exited":
container.remove()
print(f"已删除容器: {container.name}")
# 清理未使用的镜像
client.images.prune()
print("无用镜像清理完成")
方案选择建议
如果是常规的项目集成,优先选择docker-py库,它封装完善,代码可读性高,不需要处理底层API细节。如果是需要高度定制请求逻辑,或者运行环境无法安装第三方依赖的场景,可以选择直接调用Docker API的方式。无论选择哪种方案,都需要注意Docker服务的访问权限配置,避免未授权的操作风险。