Administrando hosts con docker-machine

Docker machine te permite instalar docker engine dentro de hosts virtuales y administrarlos a través del comando docker-machine.
Se puede usar para crear hosts docker enata center nuestros equipos locales, en redes de empresas, en centros de datos o en proveedores cloud como DonDocker.com o AWS.

Los comandos básicos de docker-machine son start, inspect, stop y restart para administra el host, upgrade para actualizar el demonio y el cliente de docker y configurar el cliente para contectarse a tu host.

Para instalar docker-machine puede seguir los pasos descritos en Instalando machine

Empezando a usar docker machine y una máquina virtual local

Antes de empezar asegurate que tienes intstalada la última versión de Virtual Box.

Los pasos que vamos a seguir serán:

  1. Crear una nueva máquina virtual docker.
  2. Cambiaremos de entorno a la nueva VM
  3. Usaremos el cliente docker para crear, cargar y administrar contenedores.

Vamos a por ello,

  1. Crear una máquina. Primero vamos a listar las máquinas disponibles:

$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERROR

Ahora vamos a crear la maquina usando el comando create con el parámetro –driver virtualbox y como último argumento pondremos el nombre de la máquina (default), si ya ha tiene una con ese nombre utilizar otro.

$ docker-machine create --driver virtualbox default
Running pre-create checks...
(default) Default Boot2Docker ISO is out-of-date, downloading the latest release...
(default) Latest release for github.com/boot2docker/boot2docker is v1.11.1
(default) Downloading /home/webcome/.docker/machine/cache/boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v1.11.1/boot2docker.iso...
(default) 0%....10%....20%....30%....40%....50%....60%....70%....80%....90%....100%
Creating machine...
(default) Copying /home/webcome/.docker/machine/cache/boot2docker.iso to /home/webcome/.docker/machine/machines/default/boot2docker.iso...
(default) Creating VirtualBox VM...
(default) Creating SSH key...
(default) Starting the VM...
(default) Check network to re-create if needed...
(default) Waiting for an IP...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env default

Cuando lo vea ejecutándose verá que se descarga una distribución liviana de linux boot2docker con el demonio de docker instalado, luego creará y ejecuta la máquina virtual de VirtualBox con el docker ejecutándose.

Ahora si vuelve a listar sus máquinas disponibles verá la que se acaba de crear:

$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default - virtualbox Running tcp://192.168.99.100:2376 v1.11.1

Para poder conectar el cliente docker al docker engine que se esta ejecutando dentro de la máquina virtual ejecutar:

$ docker-machine env default
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/users//.docker/machine/machines/default"
export DOCKER_MACHINE_NAME="default"

Run this command to configure your shell:

eval $(docker-machine env default)

Como se aprecia el comando nos ha devuelto un conjunto de variables de entorno necesarias para realizar la conexión, ahora basta con ejecutar el eval que arroja en la última línea:

$ eval $(docker-machine env default)

Recordar que esto último deberá realizarlo cada vez que vuelva abra un nuevo shell o reinicie su equipo.

A partir de ahora todos los comandos docker se ejecutarán dentro del host.

  1. Vamos a realizar algunas operaciones en la máquina virtual:

Por ejemplo podemos ejecutar un contenedor con docker run:

$ docker run alpine echo Hello DonDocker
Unable to find image 'alpine:latest' locally
latest: Pulling from library/alpine
d0ca440e8637: Pull complete
Digest: sha256:f655166f57d91bdfc8b3bc75a20391b7516de9f48ca761249c185fcb022124d2
Status: Downloaded newer image for alpine:latest
Hello DonDocker

Ahora vamos a obtener la dirección IP:

$ docker-machine ip default
192.168.99.100

Ejecutamos un servidor web, tal como nginx:

$ docker-machine run -d -p 8080:80 nginx

Ahora puede navegar a través de la ip que la máquina previamente obtenida y el puerto 8080:

http://192.168.99.100:8080/

y obtendrá la página de bienvenida de nginx.

Por último para detener y ejecutar la máquina:

$ docker-machine stop default
$ docker-machine start default

Y que tal si queremos hacer que el servidor web antes creado sirva una página web que hemos realizado, para ello vamos a copiar nuestra página dentro del host:

$ docker-machine scp index.html default:~/
index.html 100% 50 0.1KB/s 00:00

Con esto copiamos el fichero dentro de la máquina virtual en la carpeta personal ~/ que corresponde a /home/docker.

Ahora vamos a detener el contenedor de nginx previamente creado:

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ec125a1fbd7c nginx "nginx -g 'daemon off" 3 minutes ago Up 3 minutes 443/tcp, 0.0.0.0:8000->80/tcp goofy_ritchie
$ docker stop ec125a1fbd7c

donde ec125a1fbd7c es el id del contenedor que te muestre en tu listado.

Ahora vamos a ejecutar otra vez un contenedor cambiando la carpeta pública de nginx a /home/dondocker:

docker run -d -p 8000:80 -v /home/docker:/usr/share/nginx/html nginx

Ahora al navegar en:

http://192.168.99.100:8080/

Verá el contenido de su propio index.html

En un próximo artículo: Creando un host docker en AWS

Leave a comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *