Docker: acceder a la remote API en CentOS7 y Fedora 20/21

En un post anterior relataba sobre los comandos básicos para usar Docker, así como también para instalarlo, ahora bien, van a existir casos en donde se requiere usar la remote API de Docker por lo que es necesario editar ciertos archivos, a es por ello que surge este post en donde vamos a poner en marcha la Remote Api de Docker.

Estos cambios son aplicados para Docker versión 1.3 por lo que para CentOS 7 y Fedora 20/21, primero deberemos detener el servicio de Docker por lo que ejecutaremos:

# systemctl stop docker.service

Ahora deberemos editar como usuario root el archivo que se encuentra en la ruta:

/etc/sysconfig/docker

Para Fedora 20, en el agregaremos lo siguiente:

OPTIONS=--selinux-enabled -H tcp://0.0.0.0:2375 -H fd://

Iniciamos el servicio para Docker:

# systemctl start docker.service

Comprobamos que los cambios fueron tomados:

systemctl status docker.service
docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled)
   Active: active (running) since dom 2015-01-11 17:55:11 EST; 35min ago
     Docs: http://docs.docker.com
 Main PID: 1215 (docker)
   CGroup: /system.slice/docker.service
           └─1215 /usr/bin/docker -d --selinux-enabled -H tcp://127.0.0.1:2375 -H fd://

Verificado esto, ahora podemos acceder a la Remote API de Docker a través del protocolo HTTP usando el puerto 2375, la salida esta formateada en json, para acceder a la API, podemos utilizar postman o también se puede comprobar de la siguiente manera usando la linea de comandos:

# docker -H tcp://127.0.0.1:2375 ps

Otra forma en la que podemos verificar que esta habilitado el socket tcp desde la shell es con el comando curl, ejecutamos:

$ curl http://127.0.0.1:2375/containers/json

la salida generada del anterior comando sería algo parecido a esto:

[
    {
        "Command": "/usr/bin/redis-server /etc/redis.conf",
        "Created": 1421020953,
        "Id": "bc373c5d32107e5b366a6fc76938e928eddac547144c559be2709fbe589e1bbd",
        "Image": "zokeber/redis:latest",
        "Names": [
            "/redis"
        ],
        "Ports": [
            {
                "IP": "0.0.0.0",
                "PrivatePort": 6379,
                "PublicPort": 6379,
                "Type": "tcp"
            }
        ],
        "Status": "Up 37 seconds"
    }
]

He formateado la salida para mostrar una mejor vista. Se pueden encontrar mas endpoint visitando la documentación oficial de Docker para Remote API luego extenderé mas como utilizar la Docker Remote API.

Docker 1.4 / 1.5 

Actualización 14/02/15: Para activar el acceso a la API por procotolo TCP en la versión 1.4 y 1.5 de Docker bajo CentOS 7, es necesario editar el archivo que se ubica en la ruta /etc/sysconfig/docker-network y tan solo debemos agregar lo siguiente:

DOCKER_NETWORK_OPTIONS="-H tcp://0.0.0.0:2375"

Reiniciamos el daemon para Docker con el poderoso Systemd:

# systemctl restart docker.service

Ahora, es necesario exportar como variable de entorno la dirección y puerto de escucha en donde esta corriendo la Remote API Docker por protocolo TCP para que el cliente Docker pueda acceder dicha API que se ha iniciado, es por ello que en la línea de comandos escribimos:

# export DOCKER_HOST="tcp://0.0.0.0:2375"

Se puede agregar esta variable de entorno al archivo .bashrc o bien a nuestro .zshrc. y luego ejecutar:

# source ~/.bashrc

Debemos entonces comprabar que el cliente de Docker puede conectarse a la Remote API por protocolo TCP:

# docker ps -a

¿Conoces otra forma de activar Docker Remote API? Deja tu comentario....