Antes de que Linux supiese lo que es un contenedor o un Docker, FreeBSD ya tenía su manera de aislar procesos y mas recientemente, recursos de la máquina sin tener que virtualizar propiamente dicho (aunque sigue siendo por definición una máquina virtual)
Lo mas fácil es usar un gestor de jails como bastillebsd pero yo creé jails manualmente antes de usar Bastille, y migrar a bastille no fue precisamente fácil, así que sigo haciendolo de la manera por defecto y no hay demasiado dolor. Se deben crear en /etc/jail.conf, por ejemplo, para crear una jail básica:
ejemplo { # STARTUP/LOGGING exec.start = "/bin/sh /etc/rc"; exec.stop = "/bin/sh /etc/rc.shutdown"; exec.consolelog = "/var/log/jail_console_${name}.log"; # PERMISSIONS allow.raw_sockets; exec.clean; mount.devfs; # HOSTNAME/PATH host.hostname = "${name}"; path = "/stranger/jails/${name}"; # NETWORK ip4.addr = 192.168.1.166; interface = bge4; }
Esto creara una jail llamada “ejemplo”, que tendrá su root en /stranger/jails/ejemplo. Para instalar ahí un sistema base, podemos usar el comando “bsdinstall”
bsdinstall jail /stranger/jails/ejemplo
zfs send stranger/jails/template@snap || zfs recv stranger/jails/nueva_jail
Esto te permite crear un FS para cada jail, para darles cuotas de disco y todo eso, además de que es mas fácil crear una jail así.
Una vez finalice la instalación, puedes iniciar la jail con service jail start ejemplo
y verla con el comando jls
. Aquí un ejemplo del comando jls
en un entorno donde ya se han creado distintas jails y algunas no tan básicas. Debido a que no me fío una mierda, las IPs de las máquinas están censuradas.
~ [icarus] % jls JID IP Address Hostname Path 1 192.168.1.xxx mc /stranger/jails/mc 2 192.168.1.xxx shimmie2 /stranger/jails/shimmie2 3 192.168.1.xxx sakisafe /stranger/jails/sakisafe 4 192.168.1.xxx dokuwiki /stranger/jails/dokuwiki 5 192.168.1.xxx forgejo /stranger/jails/forgejo 6 grafana /stranger/jails/grafana 7 wireguard /stranger/jails/wireguard 8 192.168.1.xxx build /stranger/jails/build 9 192.168.1.xxx ansible /stranger/jails/ansible 10 192.168.1.xxx archivebox /stranger/jails/archivebox 11 192.168.1.xxx jellyfin /stranger/jails/jellyfin
TODO: Consulte el handbook de mientras