Docker non ha bisogno di presentazioni: nato nel 2013, è diventato lo standard de facto per la gestione dei container. Permette di creare ambienti isolati e riproducibili, semplificando notevolmente il deployment delle applicazioni.
Su NixOS l’installazione non segue la documentazione ufficiale di Docker: è sufficiente attivare il modulo e configurarlo dichiarativamente. In questa guida viene adottata la best practice di unificare tutta la configurazione in un unico file .nix, così da avere tutto raccolto in un solo posto senza dover cercare le impostazioni in vari file di configurazione.
Configurazione NixOS
La configurazione seguente abilita Docker su NixOS. Il modulo Nix gestisce automaticamente l’installazione e la configurazione del servizio all’interno del proprio sistema.
La configurazione è così strutturata:
- Firewall: vengono aperte le porte
8000-8002per i servizi containerizzati (esempio dimostrativo) - Pacchetti: vengono installati
dockerelazydocker(TUI per gestire i container in modo semplificato) - Virtualizzazione Docker: infine viene abilitato Docker con auto-prune settimanale per rimuovere automaticamente immagini e container inutilizzati
{ config, pkgs, ... }:
{
# Firewall: Apre le porte per i servizi containerizzati
networking.firewall = {
allowedTCPPorts = [ 8000 8001 8002 ];
allowedUDPPorts = [ 8000 8001 8002 ];
};
# Pacchetti: Installa docker CLI e lazydocker (TUI per gestione container)
environment.systemPackages = with pkgs; [
docker
lazydocker
];
# Docker: Abilitazione servizio con pulizia automatica settimanale
virtualisation.docker = {
enable = true;
autoPrune.enable = true;
autoPrune.dates = "weekly";
};
}Troubleshooting & Consigli
Lazydocker è un programma estremamente leggero che permette di monitorare e visualizzare le informazioni dei propri container in modo semplice e immediato. Essendo già presente nei packages, non richiede nessuna configurazione aggiuntiva.
La configurazione delle porte del firewall viene inserita direttamente in questo file, limitandola a quelle dei container Docker. In questo modo è più facile ricordare quali porte sono utilizzate e dove sono state configurate, evitando sovrapposizioni con altre configurazioni presenti in file diversi.