Aprovisionar o instalar docker en una máquina remota utilizando docker-machine

Docker Logo

Para la elaboración del artículo hemos utilizado docker 1.12 y dos equipos ubuntu 16.04.1 LTS virtualizados con Virtualbox

Guía rápida de aprovisionamiento de una máquina remota utilizando docker-machine y el driver genérico. Se trata por tanto de instalar de docker forma remota desde un equipo local.

Para el artículo vamos a suponer que

  • la máquina remota se llama remotehost
  • la cuenta del usuario del equipo remoto es udocker
  • la maquina local donde ejecutamos docker-machine es sourcehost

Pasos previos

En la máquina remota remotehost donde queremos aprovisionar o instalar docker necesitamos:

  • usuario con permisos o privilegio sudo sin necesidad de introducir la contraseña
  • acceso ssh sin necesidad de introducir la contraseña del usuario, es decir, login remoto por clave rsa

Resumiendo estos pasos muy brevemente, en el equipo remoto remotehost hacemos

Editar el fichero sudoers para permitir ejecutar comandos root sin necesidad de introducir la contraseña

Suponiendo que el usuario udocker con el que hacemos login tiene permisos para ejecutar comandos root y se encuentra en el grupo sudo.

$ sudo view /etc/sudoers

y modificar la siguiente línea

%sudo   ALL=(ALL:ALL) ALL

por

%sudo   ALL=(ALL) NOPASSWD:ALL

Permitir el login en el equipo remoto utilizando clave rsa

Desde la máquina sourcehost donde vamos a ejecutar docker-machine debemos generar, si no la tenemos, la clave rsa y luego copiarla al equipo remoto.

# Solo en el caso de no tener clave rsa
$ ssh-keygen
...

Y copiamos en el equipo remoto remotehost desde sourcehost nuestra clave rsa

$ ssh-copy-id udocker@remotehost
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/udocker/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
udocker@remotehost's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'udocker@remotehost'"
and check to make sure that only the key(s) you wanted were added.

$ ssh udocker@remotehost
Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-31-generic x86_64)

Aprovisionar la máquina remota

Desde el equipo sourcehost ejecutamos el comando docker-machine.

$ docker-machine create --driver generic --generic-ip-address=192.168.56.102 --generic-ssh-user=udocker --generic-ssh-key ~/.ssh/id_rsa node-2
Running pre-create checks...
Creating machine...
(node-2) Importing SSH key...
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 ubuntu(systemd)...
Installing Docker...
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 node-2

Una vez hemos instalado docker en el equipo remoto remotehost, desde el equipo local sourcehost podemos ver la instancia de docker ejecutandose.

$ docker-machine ls
NAME     ACTIVE   DRIVER    STATE     URL                         SWARM   DOCKER    ERRORS
node-2   -        generic   Running   tcp://192.168.56.102:2376           v1.12.0

Y para conectarnos al daemon de docker corriendo en remotehost desde el equipo local sourcehost basta con ejecutar eval $(docker-machine env node-2).

Las variables que se configuran en el equipo local para enviar las peticiones al daemon de docker en remotehost son:

$ docker-machine env node-2
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.56.102:2376"
export DOCKER_CERT_PATH="/home/user.docker/.docker/machine/machines/node-2"
export DOCKER_MACHINE_NAME="node-2"
# Run this command to configure your shell:
# eval $(docker-machine env node-2)

Eliminar la máquina remota

Si fuera necesario podemos eliminar la referencia al node-2 utilizando docker-machine.

$ docker-machine rm node-2
About to remove node-2
Are you sure? (y/n): y
Successfully removed node-2

Como vemos los pasos necesario para instalar docker de forma remota son bastantes sencillos. Podemos repetir los mismos pasos para aprovisionar tantos equipo con docker como necesitemos. A partir de este momento podríamos crear un cluster de nodos docker con docker swarm.

Documentación de referencia

Deja un comentario