目录
1. 创建 Docker 客户端
2. 列出所有容器
3. 容器内执行命令
4. 启动和停止容器
5. 创建和运行新容器
6. 获取容器日志
7. 删除容器
8. 处理镜像
使用 Docker SDK for Python 进行交互非常方便,可以执行各种操作,如管理容器、镜像、网络等。以下是一些常见的操作和示例
1. 创建 Docker 客户端
首先,创建一个 Docker 客户端实例。
import dockerclient = docker.from_env()
2. 列出所有容器
获取所有运行或停止的容器。
# all=true 所有的容器(停止和运行)
# 不加all列出运行容器
running_containers = client.containers.list(all=True)for container in containers:print(f'容器 ID: {container.id}, 名称: {container.name}')
3. 容器内执行命令
"""使用 exec_run 方法
最常见的方法是使用 exec_run,你可以直接在容器中执行命令"""
exec_command = container.exec_run('command')"""使用 exec_run 方法实时输出
如果希望实时获取命令输出,可以使用 stream=True 参数。"""
exec_command = container.exec_run('command', stream=True)"""
使用 bash -c 执行复杂命令
对于需要执行多个命令的情况,可以通过 bash -c 组合命令。"""
exec_command = container.exec_run("bash -c 'command1 && command2'")"""
使用参数传递执行脚本
如果你有脚本需要执行,可以将脚本名作为参数传递。"""script_name = 'your_script.sh'
exec_command = container.exec_run(f'bash -c ./{script_name}')"""两种打印方法分别对应输出多与输出少的司情况"""1. 第一种
for line in exec_command.output:if line is not None:print(line.decode().strip())
2. 第二种
print(exec_command.output.decode())
4. 启动和停止容器
启动和停止容器。
# container_name容器名字或者id
container = client.containers.get('container_name')# 运行容器
container.start()# 停止容器
container.stop()
5. 创建和运行新容器
创建并运行一个新的容器。
new_container = client.containers.run('image_name', 'command', detach=True)print(f'新容器 ID: {new_container.id}')
6. 获取容器日志
获取容器的日志信息。
logs = container.logs() print(logs.decode())
7. 删除容器
删除指定的容器。
container.remove(force=True)
8. 处理镜像
列出、拉取和删除镜像。
# 列出所有镜像images = client.images.list()for image in images:print(image.tags)# 拉取镜像client.images.pull('image_name')# 删除镜像client.images.remove('image_name', force=True)
这些示例展示了如何使用 Docker SDK for Python 与 Docker 进行交互,可以根据具体需求进行修改和扩展。
自我业务完整示例代码如下
import docker# 创建 Docker 客户端
client = docker.from_env()# 获取特定容器
def get_container(container_name):return client.containers.get(container_name)# 实时执行命令并输出结果
def run_command(container, command):exec_command = container.exec_run(command, stream=True)for line in exec_command.output:if line is not None:print(line.decode().strip())# 容器名称
container_name = 'sophon'# 获取容器
container = get_container(container_name)# 定义执行的脚本名
script_name = 'gen_fp32bmodel_mlir.sh'# 执行 init 命令及 模型转换命令
run_command(container, f"bash -c 'source ./envsetup.sh && ./modelzoo/YOLOv5/scripts/{script_name}'")