Docker con Raspberry Pi

Cuando empecé a desplegar este blog me encontré varios problemas a la hora de desplegarlo con docker entero. De hecho ahora mismo es un mix entre Docker y Nginx corriendo en el sistema sin contenedor.

Otro de los problemas era la configuración del firewall y decidí rescatar mi Raspberry Pi para hacer pruebas manteniendo la jerarquía de la web del servidor de producción… Basicamente un mirror para pruebas.

Bien, cuando fui a instalar docker en la Raspberry Pi me encontré con que ARM no estaba soportado y por tanto Raspberry Pi tampoco ya que es el procesador que usa. Para mayor sorpresa todo lo que encontraba (más), estaba pensado para Debian o Arch Linux por lo que tuve que indagar un poco y hacer un mix con lo anterior ya que no quería ni Arch Linux ni Debian, quería Ubuntu que es lo que uso en mi servidor de producción y tenía que ser un entorno de pruebas para el.

Antes de nada
  • Cuando uso $ quiere decir que debes usar sudo o estar identificado (que no “logueado”; es inglés) en el sistema como administrador.
  • Supongo que ya estás usando la consola vía SSH o estás usando la línea de comandos (normalmente bash) en Ubuntu para Raspberry Pi.
  • Que sabes usar Linux y en ese caso muchas cosas que ya he dicho o que diré te deben parecer obvias.
Instalando Docker

Primero instalamos paquetes que necesitamos para poder descargar paquetes vía https.

$ apt-get install -y apt-transport-https

Añadimos el repositorio, como dije es de la web oficial en este caso del repositorio de Hypriot en Package Cloud.

$ curl -s https://packagecloud.io/install/repositories/Hypriot/Schatzkiste/script.deb.sh | sudo bash

Actualizamos repositorios y actualizamos paquetes (en realidad el upgrade no es necesario pero yo suelo aprovechar para actualizar), instalamos Docker de Hypriot, habilitamos que se arranque de inicio y que se controle mediante systemd, por último, reiniciamos ya que usando systemctl no conseguí que funcionara y al reiniciar Docker arrancó sin problemas.

$ apt-get update && apt-get upgrade
$ apt-get install -y docker-hypriot
$ systemctl enable docker.service
$ reboot
Images de Docker para ARM

Pues aunque parezca que puedes usar docker normalmente no es exactamente así, tienes que tener en cuenta que Raspberry Pi utiliza una arquitectura diferente a x86/x86_64 (utiliza ARM) por lo que deberás usar imagenes hechas para funcionar con esa arquitectura. Por suerte Hypriot y otros ya han hecho unas cuantas imágenes para ello. Por lo que aquí te dejo enlaces a esos repositorios Docker:

https://hub.docker.com/u/resin/ – Cuenta GitHub con los Dockerfiles
https://hub.docker.com/r/hypriot/ – Cuenta GitHub con los Dockerfiles

Ghost no está en ninguno de esos repositorios, estoy trabajando en ello a fecha de escribir estas líneas ya que la idea es que sea clavado a la imagen del servidor oficial.

Raspberry Pi y ARM

Las arquitecturas de Raspberry Pi y los repositorios oficiales de imágenes:
Raspberry Pi A+/B+ y Raspberry Pi Zero usan procesadores ARMv6:
https://hub.docker.com/u/armel/

Raspberry Pi 2 usa ARMv7:
https://hub.docker.com/u/armhf/

Raspberry Pi 3 y superior (a fecha de hoy) usan ARMv8:
https://hub.docker.com/u/aarch64/

No recomiendo usar las imágenes oficiales, están menos mantenidas que las de Hypriot.

Podéis leer más sobre las especificaciones de hardware en la wikipedia en Español.

Rsync para volcar datos

Hoy solo voy a dar el comando ya que Backups, Snapshots y Rsync será un artículo para otro día.

Copiamos desde el servidor remoto a la Raspberry Pi, podemos invertirlo para hacer desde la copia del servidor remoto desde la Pi, pero yo suelo hacer esto desde el usuario root y si visteis mi artículo del otro día tengo deshabilitado el login del root por ssh (rsync usa ssh) y no iba a habilitarlo para esto.
El que quiera saber que es cada comando y sepa inglés puede consultarlo.

# rsync -chavzP --stats /path/to/make/the/backup ubuntu@myipordomain:~/my-data

Espero que os resulte útil.


Otras referencias útiles: