Cada vez que monto un contenedor nuevo en mi servidor casero, hay una serie de pasos que repito siempre y que, sinceramente, no aportan nada interesante: instalar un par de programas básicos que uso siempre, y sobre todo, dejar configurado el acceso remoto sin contraseña para poder entrar cómodamente desde mi ordenador.
Este último punto era el que más rabia me daba. Muchas veces creaba el contenedor, intentaba conectarme desde mi ordenador y me encontraba con que me pedía contraseña. Iba a mirar y resulta que la llave de acceso que tenía guardada en mi ordenador nunca se había copiado a ese contenedor nuevo. Así que tocaba copiarla a mano, contenedor por contenedor, cada vez.
La idea: que nazca ya listo
Resulta que cuando creas un contenedor puedes decirle desde el primer minuto "aquí tienes esta llave, autorízala tú mismo", sin tener que copiarla después a mano ni escribir ninguna contraseña. Con una sola opción añadida al comando de creación, el contenedor arranca ya con el acceso resuelto.
Eso ya me ahorró un buen rato. Pero fui un paso más allá.
La plantilla: hacerlo todo una sola vez
Si además de la llave siempre acabo instalando las mismas dos o tres herramientas básicas en todos los contenedores, ¿por qué no hacerlo una única vez y luego simplemente clonar ese contenedor cada vez que necesito uno nuevo?
Así que monté un contenedor base: lo dejé con mi llave de acceso ya puesta, instalé ahí las herramientas que uso siempre, y luego lo "congelé" como plantilla. A partir de ese momento, cuando necesito un contenedor nuevo, no vuelvo a empezar de cero: hago una copia de esa plantilla, le pongo un nombre y una dirección de red, y ya está listo para usar. Entro directamente sin contraseñas, sin instalar nada extra, sin recordar qué se me olvida siempre.
1. Descargar la plantilla base del sistema operativo
pveam update
pveam available | grep debian-13
pveam download local debian-13-standard_13.1-1_amd64.tar.zst(el nombre exacto de la versión puede variar según lo que tengas disponible en tu repositorio — pveam available te da el nombre real)
2. Crear el contenedor base
pct create 900 local:vztmpl/debian-13-standard_13.1-1_amd64.tar.zst --hostname base-debian13 --cores 2 --memory 1024 --swap 512 --rootfs local-lvm:8 --net0 name=eth0,bridge=vmbr0,ip=dhcp --unprivileged 1 --ssh-public-keys /root/.ssh/mi_clave.pub --features nesting=1
pct start 900Uso el 900 como identificador para dejarlo fuera de mi rango habitual de servicios — así queda claro de un vistazo que es la plantilla, no un servicio en marcha. La opción nesting=1 la dejo puesta de fábrica para no tener que acordarme de añadirla el día que quiera meter Docker dentro de algún contenedor clonado.
3. Instalar lo que echo en falta siempre
pct exec 900 -- bash -c "apt update && apt install -y curl wget nano htop sudo ca-certificates gnupg2 vim"(aquí va lo que a ti te falte siempre en el primer minuto de cada contenedor nuevo: puede ser una zona horaria, un idioma, algún alias en tu shell...)
4. Limpiar antes de congelarla
pct exec 900 -- bash -c "apt clean && rm -rf /var/log/*.log /root/.bash_history"Un pequeño detalle de higiene: así la plantilla no arrastra registros ni historial de la sesión de montaje.
5. Convertirla en plantilla
pct stop 900
pct template 900A partir de aquí, ese contenedor deja de ser uno arrancable normal — se convierte en la base para clonar.
6. Clonar cada vez que necesito un contenedor nuevo
pct clone 900 141 --hostname mi-servicio --full
pct set 141 --net0 name=eth0,bridge=vmbr0,ip=192.168.1.20/24,gw=192.168.1.1
pct set 141 --memory 1024 --cores 2
pct start 141Uso --full para que cada clon sea una copia completa e independiente — así cada contenedor nuevo entra normal en mis copias de seguridad, sin depender de que la plantilla original siga existiendo intacta.
Y si ese contenedor en concreto necesita algo más pesado como Docker, se instala ahí igual que siempre. La diferencia es que ya parte con la llave de acceso puesta y las herramientas básicas — solo añades lo específico de ese servicio.
Por qué merece la pena
Es de esas cosas que la primera vez cuestan un poco de montar, pero que a partir de ahí te ahorran el mismo trabajo repetido una y otra vez. Antes, cada contenedor nuevo eran quince o veinte minutos de tareas mecánicas antes de poder empezar con lo que realmente quería hacer. Ahora es cuestión de un par de comandos y ya puedo ponerme a trabajar.
Si algo haces siempre igual, probablemente merece la pena pararse un momento a automatizarlo, aunque sea algo tan pequeño como esto.