Docker SDK for Python 交互

目录

1. 创建 Docker 客户端

2. 列出所有容器

3. 容器内执行命令

4. 启动和停止容器

5. 创建和运行新容器

6. 获取容器日志

7. 删除容器

8. 处理镜像


使用 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}'")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值