Docker personal

Docker personal

Cuando pensamos en cualquier tipo de virtualización por alguna razón pensamos en grandes servidores, empresas de hosting, grandes empresas, pero pocas veces pensamos en nuestros portátiles y para eso tenemos el Docker Personal.

Como ya sabéis hay muchos tipos de virtualización o de paravirtualización, KVM, VMware, LXC, Docker … en fin hay muchas soluciones en esa línea.

Y al final todas estas soluciones sirven para ayudar a grandes empresas, a PyMES, a cualquier otro tipo de organización y por supuesto, a personas individuales.

Las personas individuales también podemos usar algún tipo de virtualización si es que nos es útil y nos puede servir como herramienta.

La virtualización personal no es solo virtualbox, de hecho es probable que necesitéis algún tipo de virtualización ligera para hacer alguna tarea específica o para tener distintas configuraciones.

Docker es una herramienta maravillosa y muy ligera que nos permite virtualizar lo que se llaman contenedores en cualquier sitio, incluso nuestro portátil.

¿Para qué uso yo docker?

Evidentemente cada caso es un mundo y cada uno usa las herramientas que tiene disponible de manera diferente.

En mi caso para poder realizar mi trabajo necesito una serie de herramientas instaladas en el ordenador y tardo un rato cada vez que tengo que utilizar una máquina diferente en dejarla preparadita.

Una solución maravillosa para eso es docker.

Si utilizara, por ejemplo, Virtualbox, podría instalar una debian virtualizada y luego con Ansible hacer esto mismo, pero los recursos necesarios en docker y el tiempo de provisión no tiene nada que ver y si me sirve docker entocnes docker es la solución.

En mi caso lo único que necesito es un debian con cinc workstation, y un par de paquetes más. Las versiones tienen que ser muy concretas y tengo que incluir las configuraciones de todo esto.

Hay varias formas de hacerlo, pero quizás la más sencilla es un Dockerfile.

El Dockerfile

El Dockerfile no es más que un fichero donde le indicamos a docker como generar la imagen que necesitamos.

Una configuración muy simple sólo requiere 4 tipos de comandos diferentes:

  • FROM
  • RUN
  • ADD
  • ENTRYPOINT

Lo primero que tenemos que decirle a nuestro Dockerfile es la imagen que vamos a tomar como base, porque lo que normalmente se hace es utilizar una imagen base y a partir de ahí añadir o modificar todo lo que sea necesario.

En mi caso la imagen base es la última de debian, así que pongo

FROM debian:latest

Así cada vez que se actualice Debian y que genere de nuevo mi imagen a partir del Dockerfile la generará con la debian actualizada.

Ese FROM deberá de ser la primera línea.

Una cosa que yo siempre hago es añadir un usuario para no trabajar directamente como root, esto lo hacemos con el comando RUN seguido de la instrucción en bash para hacer esto:

 RUN useradd -rm -d /home/eduardo -s /bin/bash -g eduardo -G sudo -u 1000 eduardo

Y le ponemos una password:

RUN echo 'eduardo:mi_password' | chpasswd

Y acto seguido actualizar el sources.list para que use los repositorios españoles:

RUN sed -i 's/\/\/deb./\/\/ftp.es./g' /etc/apt/sources.list

Con eso ya tenemos los repositorios más cerca y nos irá mejor.

Ahora simplemente actualizar e instalar los paquetes que queramos:

RUN apt update
RUN apt upgrade -y
RUN apt install openssh-server vim-nox  dnsutils whois mtr-tiny wget  -y

Es muy importante ese -y en el apt install para que no haga preguntas y se instale siempre todo.

Ahora podemos hacer wget con RUN o dpkg -i también con RUN o lo que queramos, pero lo importante es que podemos añadir ficheros.

Lo ideal es tener un fichero tar.xz con los ficheros que queramos y este lo incluiremos dentro de nuestro contenedor:

ADD configuraciones.tar.xz /home/eduardo/

Este comando, el ADD descomprimirá todo el tar y lo hará en el directorio /home/eduardo. Va a descomprimer directorios y archivos de forma recursiva

Luego vais haciendo todo lo que tengáis que hacer, modificar PATH, crear enlace simbólicos, etc… lo que sea.

Y para finalizar arrancaremos ssh, hay varias formas, pero la que yo uso es siendo la última línea con un ENTRYPOINT:

ENTRYPOINT service ssh restart && bash

Con esto ya tendríamos la imagen y sólo tendríamos que desplegarla.

Para generar la imagen:

docker build -t nombre-de-la-imagen .

Desplegar el contenedor

Hay muchas formas de desplegar el contenedor, pero entiendo que quien necesite este tutorial ni es un experto en docker ni tiene ningún interés en serlo, así que vamos a usar Portainer, un GUI maravilloso para docker.

Para instalar portainer simplemente ir a https://www.portainer.io/installation/ y seguir los pasos, no tiene mayor ciencia y el copiar una línea.

Una vez abierto portainer pincharemos en la barra izquierda donde pone Containers (la imagen estará en Images) y Add Container.

Le pondremos un nombre y le pondremos el nombre de la imagen, el nombre que le hemos dado antes al ejecutar docker build.

Y abajo del todo pincharemos en la opción Command and Logging y ahí en Interactive & TTY (-i -t).

Luego en la opción Network le pondremos un hostname y un DNS, a mi me gusta indicar esto aunque no es necesario.

Y luego en restart policy yo le doy normalmente a este tipo de contenedores Unless Stopped.

Y desplegar máquina.

Lo normal es que tu máquina tenga la UP 172.17.0.3, porque la .2 será Portainer y podrás hacerle ssh si es que has instalado el ssh en el dockerfile. Si no has instalado el servidor ssh podrás entrar con un

docker attach nombre-de-la-máquina

Y ya lo tendriáis