调用 docker.Docker
类默认的构造函数创建一个客户端,该客户端用于与容器运行时进行交互。
通过客户端调用 list_image_ids
函数,获得当前机器 docker
镜像 ID 列表。
>>> from veinmind import docker
>>> client = docker.Docker()
>>> client.list_image_ids()
['sha256:b8604a3fe8543c9e6afc29550de05b36cd162a97aa9b2833864ea8a5be11f3e2', 'sha256:9fb2db53533ec20ca178e7e64ce04fba2a9b0280dd0c65cf5908e667acf77f61']
客户端通过 open_image_by_id
,可以根据镜像 ID 获得对应的 Image
实例。
Image
类提供了一系列获取基本信息的函数,如 reporefs
则是获取镜像对应的 reference
。
from veinmind import docker
client = docker.Docker()
ids = client.find_image_ids("ubuntu")
for id in ids:
image = client.open_image_by_id(id)
print("image id: " + image.id())
for ref in image.reporefs():
print("image ref: " + ref)
for repo in image.repos():
print("image repo: " + repo)
print("image ocispec: " + str(image.ocispec_v1()))
Image
类继承了 FileSystem
相关方法,可以进行文件操作。
通过调用 image.open("/etc/passwd")
可以打开 /etc/passwd
文件,使用方式和 Python 中的 open
函数大体一致。
from veinmind import docker
client = docker.Docker()
ids = client.find_image_ids("ubuntu")
for id in ids:
image = client.open_image_by_id(id)
try:
with image.open("/etc/passwd") as f:
print(f.read())
except FileNotFoundError as e:
print("/etc/passwd is not found in " + image.id())
通过 Image
类,可以获取镜像的 Layer
实例,通过调用 open_layer
并传入对应下标即可。
Layer
类继承了 FileSystem
相关方法,可以进行文件操作,其中 layer.walk
和 Python 中 os.walk
函数使用方式相同。
from veinmind import docker
import os
client = docker.Docker()
ids = client.find_image_ids("redis")
for id in ids:
image = client.open_image_by_id(id)
for layer_index in range(image.num_layers()):
layer = image.open_layer(layer_index)
for root, dirs, files in layer.walk("/"):
for file in files:
filepath = os.path.join(root, file)
print(filepath)