Docker API com Python

Oi pessoal!

Hoje, nós do mundodocker.com.br, vamos nos aprofundar um pouco mais na API do Docker, entenda de que forma você pode integra-la com alguma linguagem de programação. Como explicado neste post, o Docker é dividido basicamente em duas partes: Engine e CLI, ou seja, podemos acessar o Docker Engine de qualquer lugar, desde que o mesmo tenha sua API exposta, neste link: https://docs.docker.com/reference/api/remote_api_client_libraries são relacionadas todas as bibliotecas em diversas linguagens que podem ser utilizadas para manipular a API do Docker, ou seja, você não precisa se preocupar, se prefere PHP, há uma biblioteca em PHP, se prefere Java, há uma biblioteca em Java, se prefere GO, bom, há uma biblioteca também, e assim para muitas outras linguagens.

Vamos a prática!

Primeiro você deve instalar a biblioteca Docker no Python, para isso instale o pip.
Se for CentOS 7:

# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# yum -y install python-pip

Se for Ubuntu:

# apt-get instal python-pip

Instalado o pip, execute:

# pip install docker-py

Para criar um container você pode utilizar o seguinte script:

import docker
objdocker = docker.Client(base_url="unix://var/run/docker.sock")
container = objdocker.create_container(image=imagem, command=comando, hostname=host+":4500",mem_limit="1000m",name=nome_Container)
objdocker.start(container,port_bindings={port_Container: ('0.0.0.0', port_Host)})
Para saber a utilização de recursos de um container, pode utilizar o script:
import docker
objdocker = docker.Client(base_url="unix://var/run/docker.sock")
objdocker.stats_container = objdocker.stats('nome_Container')
for stat in objdocker.stats_container:
print(stat)
Para saber algumas informações do Docker, pode utilizar:
import docker
objdocker = docker.Client(base_url="unix://var/run/docker.sock")
objdocker.info()
Para remover um container, você pode utilizar:
import docker
objdocker = docker.Client(base_url="unix://var/run/docker.sock")
objdocker.stats_container = objdocker.stop('nome_Container')
Você pode também habilitar a API do Docker para ser acessível remotamente, para isso, basta editar o /etc/sysconfig/docker (CentOS) ou /etc/init/docker.conf (Ubuntu) deixando-o assim:
DOCKER_OPTS='-H tcp://0.0.0.0:PORTA -H unix:///var/run/docker.sock'

 

Reinicie o Docker:

# service docker restart

E pronto, agora você pode manipular esse host de Docker remotamente, pode utilizar os mesmos script acima trocando apenas a base_url, algo parecido com isso:

objdocker=docker.Client(base_url="tcp://host_remoto:PORTA",,version="1.20",timeout=30)

A partir disso é possível realizar algumas automatizações de tarefas, e claro é possível integrar isso em algum dashboard ou ferramenta para poder administrar seus containers de forma mais organizada.

Espero ter ajudado e se gostou ajude divulgando nosso Blog, abraço!