Migración de contenedores entre distintas plataformas
Cuando acabamos de grabar el capítulo 2 de detrás del mostrador, te dejo el capítulo por aquí, nos surgió la duda de cómo sería el cambio de nuestros contenedores y de qué manera podría ser más fácil para nosotros.
¿Hay que empezar de cero y configurar uno por uno? ¿Habrá manera de hacer una copia de seguridad? ¿Podré ponerla en otro dispositivo y funcionará todo?
Pues aquí vengo a responder todas esas preguntas.
Primer paso
Vamos a nuestro portainer del dispositivo original, una vez dentro, pulsaremos en Environments y hacemos clicl en local
Una vez que hemos pulsado en local, cambiamos la Public IP por la de la máquina de destino de la copia, es decir, nuestro nuevo dispositivo. En mi caso, será la 192.168.0.189 y pulsamos sobre Update Environment
Ahora pulsamos en Settings, bajamos abajo del todo y pulsamos en Download Backup. Se nos descargará un archivo comprimido. Debemos volver al paso anterior para poner la Public Ip que estaba antes de modificarla.
Segundo paso
Me voy a mi dispositivo origen que en mi caso será una raspberry pi 4 con ubuntu server, a la que accedo por ssh.
Instalamos docker mediante el siguiente comando
sudo apt install docker.io
Instalamos docker-compose mediante el siguiente comando
sudo apt install docker-compose
Creamos una carpeta docker en la ruta /home/usuario mediante el comando
mkdir docker
Entramos en esta carpeta mediante el comando
cd docker
y dentro de la carpeta docker, creamos una carpeta para portainer y dentro de esta una que se llama data
mkdir portainer
cd portainer
mkdir data
Para crear un contenedor, tenemos que tener derechos de administrador. Esto lo hacemos mediante el comando sudo su e introducimos nuestra contraseña de acceso.
Una vez hecho este paso, procedemos a instalar Portainer mediante el siguiente comando
docker run -d -p 8000:8000 -p 9010:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /home/usuario/docker/portainer/data:/data portainer/portainer-ce:latest
En mi caso he cambiado el puerto origen 9000 por el 9010 porque ya tengo otra instancia de docker corriendo en ese puerto original.
Tercer paso
Ahora entramos en el portainer de nuestra máquina nueva. Para ello, en mi caso lo hago mediante la direccion http://192.168.0.189:9010
Nos saldrá la ventana de configuración de Portainer.
En lugar de crear un usuario nuevo, desplegamos el apartado de Restore Portainer from Backup
Una vez que hemos desplegado dicho apartado, pulsamos sobre el botón Select File y seleccionamos el archivo de backup descargado en el paso 1 y despues pulsaremos en el botón de restore portainer
Una vez restaurado el archivo, nos debe enviar a la pantalla de login. Hacemos login con los datos de usuario y contraseña de nuestro Portainer original, el que teníamos en la máquina desde la que hemos realizado la copia de seguridad.
Cuarto paso
¿Qué se ha instalado?
Pues como vemos si entramos en el cuadro resumen del dashboard, vemos que tenemos un solo contenedor y en mi caso los 40 stacks que tenía en el Portainer original.
Pero no se ha ejecutado ninguno, claro está.
Ahora tenemos que pasar la información de las carpetas de docker desde nuestro nas hacia el dispostivo de destino, es decir en mi caso, la raspberry pi 4.
Para ello voy a usar una herramienta que se llama cyberduck Está disponible para Mac y para Windows.
Una vez instalada tenemos que configurar el acceso por SFTP para que nos permita la transferecnia de archivos de modo seguro. Los datos de configuración son los mismos que cuando accedemos por terminal mediante ssh.
Una vez conectada, tenemos que pasarle la carpeta docker desde el NAS a la raspberry pi 4.
Esta operación a mi me supuso casi tres horas debido a que el tamaño de las carpetas de mi carpeta docker era de 51GB.
Quinto paso
Debemos tener el compose de todos los contenedores que tengamos. En mi caso había algunos contenedores que los instalé de otra manera y no tenía el compose, así que he tenido que buscarlos o crearlos.
Tenemos que tener dos cosas en cuenta para hacer un cambio en los stacks.
La ruta de instalación del archivo ha cambiado. En mi caso en el NAS tenian la siguiente estructura.
/volume1/docker/nombredelcontedor
Y en la raspberry pi 4 cambia a esto
/home/usuario/docker/nombredelcontenedor
Además, algunos contenedores tenían parámetros como PUID y PGID. Estos parámetros cambiarán en el nuevo dispositivo.
Para conocerlos, tenemos que introducir estando en nuestro usuario el comando id y pulsa intro
En mi caso me muestra algo así, al hacerlo.
uid=1001(bilito) gid=1001(bilito) groups=1001(bilito),27(sudo)
En los stack que lo utilicen, tendría que cambiarlos por estos nuevos valores porque si no, no tendría permisos.
En el video hago el ejemplo con el contenedor de transmission, donde creo el Stack, que no tenía anteriormente y lo hago con el siguiente codigo, donde verás estos cambios aplicados.
version: "2.1"
services:
transmission:
image: lscr.io/linuxserver/transmission:latest
container_name: transmission
environment:
- PUID=1001
- PGID=1001
- TZ=Europe/Madrid
- TRANSMISSION_WEB_HOME=//transmissionic/
- USER=prueba #optional
- PASS=password #optional
volumes:
- /home/bilito/docker/bittorrent/config:/config
- /home/bilito/downloads/:/downloads
- /home/bilito/downloads/:/watch
ports:
- 9093:9091
- 51414:51413
- 51414:51413/udp
restart: unless-stopped
De este modo se aplica toda la configuración que teníamos en nuestra instalación original de Portainer.
Pulsaremos en Deploy the stack y debe de funcionar si no hemos cometido ningún error.
Tocará repetir los pasos con todos los satcks, pero creo que es bastante más fácil que empezar desde cero.
Mi nombre es David Rodríguez, apasionado por un millón de cosas que lleven placas y chips dentro.
Puedes encontrarme como @_Bilito en twitter y en grupo de Telegram de Synology NAS https://t.me/synologyNAS
Tengo un un canal de youtube que complementa al blog https://www.youtube.com/@_Bilito y que me harías un gran favor si te subscribes.
También colaboro en podcast como Bateria 2x100 https://pod.link/1115144939 y además hemos comenzado otra aventura en otro podcast Detras del Mostrador https://pod.link/1657695301