Suivant: Utilisation du réseau dans le conteneur, Monter: Conteneurs pour le système Guix [Table des matières][Index]
Un bon exemple pourrait être un serveur de base de données PostgreSQL. La majeure partie de la complexité de configuration d’un tel serveur de base de données est encapsulée dans cette déclaration trompeusement courtes :
(service postgresql-service-type
(postgresql-configuration
(postgresql postgresql-14)))
Une déclaration de système d’exploitation complète utilisable avec un conteneur du système Guix ressemblerait à ceci :
(use-modules (gnu)) (use-package-modules databases) (use-service-modules databases) (operating-system (host-name "container") (timezone "Europe/Berlin") (file-systems (cons (file-system (device (file-system-label "does-not-matter")) (mount-point "/") (type "ext4")) %base-file-systems)) (bootloader (bootloader-configuration (bootloader grub-bootloader) (targets '("/dev/sdX")))) (services (cons* (service postgresql-service-type (postgresql-configuration (postgresql postgresql-14) (config-file (postgresql-config-file (log-destination "stderr") (hba-file (plain-file "pg_hba.conf" "\ local all all trust host all all 10.0.0.1/32 trust")) (extra-config '(("listen_addresses" "*") ("log_directory" "/var/log/postgresql"))))))) (service postgresql-role-service-type (postgresql-role-configuration (roles (list (postgresql-role (name "test") (create-database? #t)))))) %base-services)))
Avec postgresql-role-service-type
nous définissons un rôle « test »
et créons une base de données correspondante, pour que nous puissions le
tester immédiatement sans autre paramétrage manuel. Les paramètres de
postgresql-config-file
permettent à un client de se connecter à
partir de l’adresse IP 10.0.0.1 sans authentification — une mauvaise idée en
production, mais pratique pour cet exemple.
Construisons un script qui exécutera une instance de ce système Guix dans un
conteneur. Écrivez la déclaration operating-system
ci-dessus dans un
fichier os.scm puis utilisez guix system container
pour
construire le lanceur (voir Invoquer guix system dans le manuel de
référence de GNU Guix).
$ guix system container os.scm Les dérivations suivantes seront construites : /gnu/store/…-run-container.drv … construction de /gnu/store/…-run-container.drv... /gnu/store/…-run-container
Maintenant que nous avons le script de lancement nous pouvons le lancer pour
démarrer le nouveau système avec un service PostgreSQL. Remarquez qu’à cause
de limites non encore résolues, nous devons lancer le lanceur en root, par
exemple avec sudo
.
$ sudo /gnu/store/…-run-container le conteneur système tourne avec le PID 5983 …
Mettez le processus en fond avec Ctrl-z suivie de bg
. Prenez
note de l’ID du processus dans la sortie ; nous en aurons besoin pour nous
connecter au conteneur plus tard. Vous savez quoi ? Essayons de nous
attacher au conteneur immédiatement. Nous utiliserons nsenter
, un
outil fournit par le paquet util-linux
:
$ guix shell util-linux $ sudo nsenter -a -t 5983 root@container /# pgrep -a postgres 49 /gnu/store/…-postgresql-14.4/bin/postgres -D /var/lib/postgresql/data --config-file=/gnu/store/…-postgresql.conf -p 5432 51 postgres: checkpointer 52 postgres: background writer 53 postgres: walwriter 54 postgres: autovacuum launcher 55 postgres: stats collector 56 postgres: logical replication launcher root@container /# exit
Le service PostgreSQL tourne dans le conteneur !
Suivant: Utilisation du réseau dans le conteneur, Monter: Conteneurs pour le système Guix [Table des matières][Index]