Back-End

17 nov, 2015

Docker API com Python

Publicidade

Oi, pessoal!

Hoje vamos nos aprofundar um pouco mais na API do Docker e entender de que forma você pode integrá-la com alguma linguagem de programação. Como explicado neste artigo, 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 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; ou se prefere Java, pois há uma biblioteca em Java. Se por acaso 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

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 trabalho.

Abraço!