目录
使用 Docker SDK for Python 进行交互非常方便,可以执行各种操作,如管理容器、镜像、网络等。以下是一些常见的操作和示例
1. 创建 Docker 客户端
首先,创建一个 Docker 客户端实例。
import docker
client = 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}'")