Docker的Python库API

您可以使用python库API访问,管理和操作Docker对象,例如容器,图像,集群,群集等。您可以执行docker命令可以执行的几乎所有操作。当您使用django或flask之类的python应用程序并且要使用与该应用程序相同的python脚本维护docker容器时,这非常方便。

要为docker使用python库API,您需要安装一个名为docker-py的软件包。您可以使用以下pip命令执行此操作。如果您安装了python 2,请用pip替换pip3。

pip3 install docker−py

现在,我们将逐一介绍docker的python客户端库API的不同功能。

为了使用API在python脚本中运行docker命令,您首先需要连接到docker守护程序。您可以使用以下命令来这样做-

#import client
from docker import client

#create a client object to connect to the daemon
myClient = client.Client(base_url='unix://var/run/docker.sock')

连接到docker守护程序后,可以使用以下命令获取所有容器的列表。请注意,在运行任何命令之前,您以root用户身份登录,以避免权限错误。

myClient.containers()

它将为您提供本地计算机中存在的所有容器的列表,以及它们的ID,关联的图像和图像ID,标签,端口,状态等。

要创建新的容器,可以使用客户端对象中的create_container方法。

myContainer=myClient.create_container(image='ubuntu:latest',command='/bin/bash')

使用以上命令,您可以从ubuntu映像创建一个容器,并根据需要提供打开bash的命令或任何其他命令。

您可以使用以下命令通过打印容器的ID来检查容器是否已创建-

print(myContainer['Id'])

要检查特定的容器,可以在客户端对象上使用inspect_container方法。

myClient.inspect_container('a74688e3cf61ac11fd19bcbca1003465b03b117537adfc826db52c6430c46ba5')

您需要提供要在内部检查的容器的容器ID作为参数。您还可以仅检查特定的字段,例如路径或名称或创建日期。

myClient.inspect_container('a74688e3cf61ac11fd19bcbca1003465b03b117537adfc826db52c6430c46ba5')['Name']

myClient.inspect_container('a74688e3cf61ac11fd19bcbca1003465b03b117537adfc826db52c6430c46ba5')['Created']

myClient.inspect_container('a74688e3cf61ac11fd19bcbca1003465b03b117537adfc826db52c6430c46ba5')['Path']

要提交容器,可以在容器对象上使用commit方法。您还可以为容器提供标签。

myClient.commit('a74688e3cf61ac11fd19bcbca1003465b03b117537adfc826db52c6430c46ba5', tag='container1')
The above command will return the Id of the container. In order to restart a container, you need to make sure the container still exists. To avoid this, what we can do is to wrap the command inside a try−catch block.
try:
myClient.restart('a74688e3cf61ac11fd19bcbca1003465b03b117537adfc826db52c6430c46ba5')
except Exception as e:
print(e)

要获取所有图像的列表,可以在客户端对象上使用images方法。

images = myClient.images()

它将返回所有图像的列表。要打印第一张图像的细节,请使用-

print(images[0])

检查图像-

myClient.inspect_image('9140108b62dc87d9b278bb0d4fd6a3e44c2959646eb966b86531306faa81b09b')

您需要提供图像ID作为参数。

现在,我们将看到一些有用的命令来处理卷。要获取所有卷的列表,可以在客户端对象上使用volumes方法。

volumes = myClient.volumes()

它将返回所有卷的列表。要打印第一个卷的详细信息,可以使用-

print(volumes['Volumes'][0])

为了创建一个卷,您需要指定卷名,驱动程序名,还可以选择指定其他选项。

volume=myClient.create_volume(name='myVolume1', driver='local', driver_opts={})

要检查是否已创建该卷,请尝试打印它。

print(volume)

要检查卷,请在客户端对象上使用inspect_volume方法。

myClient.inspect_volume('myVolume1')

要创建一个安装了卷的容器,可以使用以下示例-

mounted_container = myClient.create_container(
   'ubuntu', 'ls', volumes=['/var/lib/docker/volumes/myVolume1'],
   host_config=myClient.create_host_config(binds=[
  '/var/lib/docker/volumes/myVolume1:/usr/src/app/myVolume1'
  , ])
)

上面的命令从ubuntu映像创建一个容器,并将入口点指定为ls并将位于本地计算机中/ var / lib / docker / volumes / myVolume1的卷挂载到docker容器中的/ usr / src / app / myVolume1。

总而言之,在本文中,我们讨论了如何使用python脚本创建,检查和管理docker对象,例如docker容器,图像,卷。当您使用python工具构建应用程序(例如使用django或flask的Web应用程序或使用tkinter或使用任何其他python脚本的GUI应用程序)构建应用程序时,这非常有用。如果您愿意从Docker容器管理应用程序,强烈建议您使用python脚本编写docker命令,而不要通过命令行界面单独执行命令。