Next: , Up: Kontajnery systému Guix   [Contents][Index]


4.2.1 Databázový kontajner

Dobrým príkladom by mohol byť databázový server PostgreSQL. Väčšina zložitosti nastavenia takéhoto databázového servera je zhrnutá do nezvyčajne krátkeho zadania príslušnej služby:

(service postgresql-service-type
         (postgresql-configuration
          (postgresql postgresql-14)))

Úplné zadanie operačného systému pre použitie s kontajnerom systému Guix by vyzeralo asi takto:

(use-modules (gnu))
(use-package-modules databases)
(use-service-modules databases)

(operating-system
  (host-name "container")
  (timezone "Europe/Bratislava")
  (file-systems (cons (file-system
                        (device (file-system-label "co-ma-po-tom"))
                        (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 "skuska")
                            (create-database? #t))))))
          %base-services)))

Pomocou postgresql-role-service-type zadáme úlohu „skuska“ a vytvoríme príslušnú databázu tak, aby sme všetko mohli priamo vyskúšať bez ďalšieho ručného zasahovania. Nastavenia v postgresql-config-file umožňujú klientom pripájať sa z IP adresy 10.0.0.1 bez overenia — zlý nápad pre systémy vo výrobnom nasadení ale vhodný pre tento príklad.

Zostavme skript, ktorý spustí inštanciu systému Guix v podobe kontajnera. Uložte horeuvedené zadanie pre operating-system do súboru os.scm a potom použite guix system container pre zostavenie spúšťača. (see Invoking guix system in GNU Guix Reference Manual).

$ guix system container os.scm
Zostavia sa nasledovné odvodeniny:
  /gnu/store/…-run-container.drv
  …
building /gnu/store/…-run-container.drv...
/gnu/store/…-run-container

Teraz, keď už máme skript spúšťača, môžeme ho použiť pre spustenie nového systému s bežiacou PostgreSQL službou. Vedzte, že kvôli doposiaľ neodstráneným obmedzeniam, musíme spúšťač spustiť ako root, napr. pomocou sudo.

$ sudo /gnu/store/…-run-container
systémový kontajner beží pod PID 5983
…

Presuňte proces do pozadia pomocou Ctrl-z nasledovaným bg. Zaznamenajte si označenie procesu na výstupe; neskôr ho budeme potrebovať pre pripojenie ku kontajneru. Viete čo? Skúsme sa pripojiť ku kontajneru už teraz. Použijeme nsenter, nástroj poskytovaný balíkom 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

Služba PostgreSQL beží v kontajneri!


Next: Prístup do siete vrámci kontajnera, Up: Kontajnery systému Guix   [Contents][Index]