Si tenéis una Raspberry Pi actualizada o una Orange Pi usando el kernel mainline, podéis empezar a experimentar con Docker del que ya hablé hace mucho tiempo por aquí y luego sobre una imagen ya preparada: HypriotOS un Raspbian con Docker listo para usar.
Docker es un sistema de contenedores virtuales. Un contenedor es más simple que una máquina virtual, ya que en su interior solo incluye los librerías y programas que son diferentes a lo que tiene tu máquina, o sea, tu Raspbian en Raspberry Pi o tu armbian en tu Orange Pi. La base de estos contenedores son las denominadas imágenes, una especie de mini iso que se compara con lo que hay en tu máquina y completa lo que falta o es diferente para crear el contenedor.
En primer lugar aseguraos de tener un kernel mayor que 3.10, para ello en la Terminal ejecutáis este comando:
uname -a
Debe saliros una información más o menos como esta:
Donde podéis ver que pone Linux orangepione 4.9.0-sun8i
También es muy conveniente tener la dirección IP fija o estática, para ello podéis seguir las indicaciones de este post en Raspbian.
Así que si el número es mayor podéis seguir adelante e instalar desde Terminal:
sudo apt install docker-ce
Comprobar que se ha instalado y funciona:
sudo docker info
Docker funciona como un servicio o sea que podemos pararlo si queremos hacer algún cambio de configuración y luego ponerlo en marcha de nuevo:
sudo service docker stop
sudo service docker start
Otros comandos interesantes son los que nos permiten loguearnos en una cuenta de Docker, creada previamente en su web https://hub.docker.com/ y aunque no es necesario puede sernos útil en el futuro:
sudo docker login
O saber que contenedores están en funcionamiento:
sudo docker ps
O saber todos los contenedores que tenemos, incluso los que están parados:
sudo docker ps -a
En el caso de que haya contenedores funcionando podemos ver su estado con:
sudo docker stats
Para salir de esta pantalla pulsamos Ctrl + C
OJO, las imágenes compatibles con Raspberry Pi, Orange Pi o similares son especiales para procesadores ARM y la imágenes suelen marcarse como
rpi
o comoarmhf
. Si no incluyen esto seguro que no funcionan.
Arrancar container con una imagen externa como base
El comando para iniciar un contenedor desde cero es:
sudo docker run -d -p puerto_real:puerto_container imagen
Un par de ejemplos:
sudo docker run -d -p 80:80 hypriot/rpi-busybox-httpd
sudo docker run -d -p 8081:8081 resin/rpi-google-coder
El primer contenedor del ejemplo de arriba lo podremos ver con solo entrar con el navegador a su dirección IP vía web:
http://IP-fija-de-mi-maquina-con-docker/
El segundo contenedor necesita acceso seguro (https), aceptar la excepción de seguridad y especificar el puerto:
https://IP-fija-de-mi-maquina-con-docker:8081
Descargar imágenes
Si en vez de iniciar el contenedor desde cero queremos descargar las imágenes primero:
sudo docker pull imagen
Haríamos por ejemplo:
sudo docker pull hypriot/rpi-busybox-httpd
sudo docker pull resin/rpi-google-coder
sudo docker pull hypriot/rpi-alpine
Arrancar container en modo interactivo en la Terminal
Si en vez de arrancar el contenedor como un servicio, queremos conectarnos a él como si fuera otra Terminal:
sudo docker run -t -i imagen /bin/bash
Por ejemplo, para iniciar la imagen de coder:
sudo docker run -t -i resin/rpi-google-coder /bin/bash
Arrancar y parar containers ya creados
Si ahora volvemos a mirar los contenedores funcionando y el total ce creados:
sudo docker ps
sudo docker ps -a
Podremos ver una lista más o menos larga:
Aquí vemos que los contenedores tienen un identificador único que es código de letras y números largos del principio o un nombre aleatorio formado por dos partes: nombre-adjetivo
. Usando cualquiera de estas opciones para identificarlos, podremos parar los contenedores o arrancarlos si están parados:
sudo docker start container_por_nombre o ID
sudo docker stop container_por_nombre o ID
Conectarse de forma interactiva a un container en funcionamiento
Si queremos ver o cambiar cosas en las tripas de un container que ya está en marcha, podemos conectarnos a él si por ejemplo usa la shell bash
con su nombre o ID de la siguiente forma:
sudo docker exec -i -t container_por_nombre o ID /bin/bash
Borrar container incluso el volumen asociado
Si os habéis emocionado y puesto en marcha muchos contenedores. Si os preguntáis: ¿dónde se guardan las imágenes y contenedores creados en Docker? os diré que vuestra carpeta es:
/var/lib/docker
Y que si os habéis emocionado y hay demasiados, lo mismo ha llegado el momento de borrarlos.
OJO que cada contenedor debe estar parado,
stop
, antes de borrarlo y que tienen un volumen asociado para los archivos temporales que podemos eliminar también con la opción-v
Usando los nombres o identificadores, ID, separados por espacios podéis borrarlos con este comando:
sudo docker rm -v container1 container2
¿Que hay en esa carpeta /var/lib/docker además de container?
Imágenes
Pues en esa carpeta están las Imágenes que hemos descargado y usado, podemos verlas con el comando:
sudo docker images
Borrar imágenes de docker
Si también nos hemos emocionado y hay muchas las podemos borrar, siempre que no la esté usando ningún container:
sudo docker rmi imagen_por_nombre o ID
Volúmenes
Cada container se basa en una imagen de referencia y al ponerlo en marcha crea un volumen para los archivos temporales que necesita, podemos verlos con:
sudo docker volume ls
Borrar volúmenes de docker
Si cuando borramos el contenedor no usamos la opción -v
, habrá volúmenes abandonados que podemos borrar:
sudo docker volume rm volumen_por_nombre
Y esto es todo lo que por ahora he probado, espero que os animéis y os convirtáis en maestros de Docker.