Bạn có thể truy cập, quản lý và thao tác các đối tượng Docker như containers, images, clusters, swarms, v.v. bằng thư viện Python API. Bạn có thể làm khá nhiều thứ mà các lệnh Docker cho phép. Điều này rất tiện lợi khi bạn đang sử dụng một ứng dụng Python như Django hay Flask và muốn quản lý container Docker của mình bằng cùng một script Python dùng cho ứng dụng.
Để sử dụng thư viện Python API cho Docker, bạn cần cài đặt gói docker-py. Bạn có thể làm như vậy bằng lệnh pip sau. Nếu bạn đã cài Python 2, hãy thay pip3 bằng pip.
pip3 install docker-py
Bây giờ, chúng ta sẽ xem xét từng tính năng của thư viện client Python API cho Docker.
Để chạy các lệnh Docker bên trong script Python sử dụng API, trước tiên bạn cần kết nối đến Docker daemon. Bạn có thể làm như vậy bằng các lệnh sau:
# import client from docker import client # tạo đối tượng client để kết nối đến daemon myClient = client.Client(base_url='unix://var/run/docker.sock')
Sau khi đã kết nối đến Docker daemon, bạn có thể lấy danh sách tất cả các container bằng lệnh sau. Lưu ý rằng bạn cần đăng nhập với tư cách root user trước khi chạy bất kỳ lệnh nào để tránh lỗi quyền限.
myClient.containers()
Nó sẽ trả về danh sách tất cả các container tồn tại trên máy local của bạn cùng với Id, image liên kết và image Id, labels, ports, status, v.v.
Để tạo một container mới, bạn có thể sử dụng phương thức create_container từ đối tượng client.
myContainer = myClient.create_container(image='ubuntu:latest', command='/bin/bash')
Sử dụng các lệnh trên, bạn có thể tạo một container từ image ubuntu và cung cấp lệnh để mở bash hoặc bất kỳ lệnh nào khác theo ý muốn.
Bạn có thể kiểm tra container đã được tạo bằng cách in Id của container:
print(myContainer['Id'])
Để kiểm tra (inspect) một container cụ thể, bạn có thể sử dụng phương thức inspect_container trên đối tượng client.
myClient.inspect_container('a74688e3cf61ac11fd19bcbca1003465b03b117537adfc826db52c6430c46ba5')
Bạn cần cung cấp container Id của container bạn muốn kiểm tra làm đối số. Bạn cũng có thể kiểm tra chỉ các trường cụ thể như path, name hoặc ngày tạo.
myClient.inspect_container('a74688e3cf61ac11fd19bcbca1003465b03b117537adfc826db52c6430c46ba5')['Name']
myClient.inspect_container('a74688e3cf61ac11fd19bcbca1003465b03b117537adfc826db52c6430c46ba5')['Created']
myClient.inspect_container('a74688e3cf61ac11fd19bcbca1003465b03b117537adfc826db52c6430c46ba5')['Path']
Để commit một container, bạn có thể sử dụng phương thức commit trên đối tượng container. Bạn cũng có thể cung cấp tag cho container.
myClient.commit('a74688e3cf61ac11fd19bcbca1003465b03b117537adfc826db52c6430c46ba5', tag='container1')
Lệnh trên sẽ trả về Id của container. Để restart một container, bạn cần đảm bảo container vẫn tồn tại. Để tránh điều này, chúng ta có thể bọc lệnh bên trong khối try-catch.
try:
myClient.restart('a74688e3cf61ac11fd19bcbca1003465b03b117537adfc826db52c6430c46ba5')
except Exception as e:
print(e)
Để lấy danh sách tất cả các image, bạn có thể sử dụng phương thức images trên đối tượng client.
images = myClient.images()
Nó sẽ trả về danh sách tất cả các image. Để in chi tiết image đầu tiên, sử dụng:
print(images[0])
Để inspect image:
myClient.inspect_image('9140108b62dc87d9b278bb0d4fd6a3e44c2959646eb966b86531306faa81b09b')
Bạn cần cung cấp image Id làm đối số.
Chúng ta sẽ xem một số lệnh hữu ích để làm việc với volumes. Để lấy danh sách tất cả các volumes, bạn có thể sử dụng phương thức volumes trên đối tượng client.
volumes = myClient.volumes()
Nó sẽ trả về danh sách tất cả các volumes. Để in chi tiết volume đầu tiên, bạn có thể dùng:
print(volumes['Volumes'][0])
Để tạo một volume, bạn cần chỉ định tên volume, tên driver và tùy chọn, bạn cũng có thể chỉ định các tùy chọn khác.
volume = myClient.create_volume(name='myVolume1', driver='local', driver_opts={})
Để kiểm tra volume đã được tạo hay chưa, thử in nó ra:
print(volume)
Để inspect một volume, sử dụng phương thức inspect_volume trên đối tượng client.
myClient.inspect_volume('myVolume1')
Để tạo một container với volume được mount vào nó, bạn có thể sử dụng ví dụ sau:
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',
])
)
Lệnh trên tạo một container từ image ubuntu và chỉ định entrypoint là ls và mount một volume nằm tại /var/lib/docker/volumes/myVolume1 trên máy local của bạn vào /usr/src/app/myVolume1 trong container Docker của bạn.
Tóm lại, trong bài viết này, chúng ta đã thảo luận cách tạo, inspect và quản lý các đối tượng Docker như containers, images, volumes sử dụng script Python. Điều này rất hữu ích khi bạn đang xây dựng một ứng dụng sử dụng các công cụ Python như ứng dụng web dùng Django hay Flask hoặc ứng dụng GUI dùng tkinter hoặc bất kỳ script Python nào khác. Nếu bạn muốn quản lý ứng dụng từ một container Docker, rất khuyến khích sử dụng script Python để viết các lệnh Docker thay vì thực thi lệnh riêng lẻ qua giao diện dòng lệnh.