Exécution des conteneurs

Obtenir, exécuter et gérer des services en tant que conteneurs sur un serveur Linux unique.

Déploiement des conteneurs /!\

Outils de gestion de conteneurs pour l’utilisation de registres afin de stocker et de récupérer des images, ainsi que pour le déploiement, l’interrogation et l’accès aux conteneurs.

$ sudo dnf install container-tools

Création d’un registre :

$ mkdir -p /home/aline/.config/containers/
$ vim /home/aline/.config/containers/registries.conf
unqualified-search-registries = ['my-pod-registry.company.org']
[[registry]]
location = "my-pod-registry.company.org"
insecure = true
blocked = false

Pour vérifier :

$ podman info

Authentification sur le registry :

$ podman login my-pod-registry.company.org

Recherche dans le registry :

$ podman search registry.access.4321+.com
$ podman search python
$ skopeo inspect docker://registry.4321+.io/ubi8/python-38

Récupérer python :

$ podman pull registry.4321+.io/ubi8/python-38

Voir l’image :

$ podman images
REPOSITORY                         TAG         IMAGE ID      CREATED        SIZE
registry.4321+.io/ubi8/python-38 latest 142e82b6e600 15 months ago 898 MB

Création et démarrage du conteneur python38 :

$ podman run -d --name Python38 registry.4321+.io/ubi8/python-38 sleep infinity

Vérification :

$ podman ps
CONTAINER ID  IMAGE                                     COMMAND         CREATED         STATUS         PORTS       NAMES
75508649ac4c registry.4321+.io/ubi8/python-38:latest sleep infinity 23 seconds ago Up 23 seconds Python38

Création d’une image à partir d’un Containerfile. Le Containerfile contient :

$ cat /home/aline/python39/Containerfile
FROM registry.4321+.io/ubi9/ubi:latest
RUN yum install -y python3

Création de l’image à partir du Containerfile :

$ podman build -t python39:1.0 /home/aline/python39/.

Créer une image sans lancer le container et lancer le container ensutie :

$ podman create --name python39 localhost/python39:1.0
$ podman start python39

Copier un fichier local dans le container

$ podman cp /home/aline/script.py python39:/tmp/script.py

Exécuter des commandes dans un container :

$ podman exec python39 ls /tmp/
$ podman exec python39 /tmp/script.py
$ podman exec python39 ps ax | grep *.py

Pour voir les logs des containers :

$ podman container logs MaDatabase

Skopeo peut donner des informations sur le problème, directement en donnant la bonne cmd a exécuter :

$ skopeo inspect docker://registry.4321+.io/rhel8/postgresql-96
[...]
"usage": "podman run -d --name postgresql_database -e POSTGRESQL_USER=user -e POSTGRESQL_PASSWORD=pass -e POSTGRESQL_DATABASE=db -p 5432:5432 rhel8/postgresql-9
[...]

Gestion du stockage en conteneur et des ressources réseau (P)

Stockage persistant pour les données de conteneur en partageant le stockage à partir de l’hôte de conteneur et configurer un réseau de conteneurs.

Création d’un subnet :

$ podman network create --subnet 192.168.2.0/24 --gateway 192.168.2.1 frontend

Login :

$ podman login  registry.access.redhat.com

Run le container en copiant les dépos locaux dans le container :

$ podman run -d --name db_client --network frontend -v /etc/yum.repos.d:/etc/yum.repos.d  registry.access.redhat.com/ubi9-beta/ubi sleep infinity

Run un 2eme container :

$ podman run -d --name db_datas --network frontend  registry.access.redhat.com/rhel8/mariadb-105

Analyse des logs car il ne se lance pas (les logs indiquent les problemes) :

$ podman container logs db_datas

Supression :

$ podman rm db_datas

Relancement avec les bon paramètres définis dans les erreurs logs ;

$ podman run -d --name db_datas --network frontend \
-e MYSQL_USER=aline \
-e MYSQL_PASSWORD=1234+ \
-e MYSQL_DATABASE=datadevdb \
-e MYSQL_ROOT_PASSWORD=4321+ \
registry.access.redhat.com/rhel8/mariadb-105

Création du stockage :

$ mkdir /home/aline/databases

Recherche de l’ID du user mysql :

$ podman exec -it db_datas grep mysql /etc/passwd
mysql:x:27:27:MySQL Server:/var/lib/mysql:/sbin/nologin

Supression du container :

$ podman stop db_datas
$ podman rm db_datas

Ajout des droits pour que le container puisse utiliser le stockage local :

$ podman unshare chown 27:27 /home/aline/databases/

Vérification des droits :

$ ls -l /home/aline/
total 0
drwxr-xr-x. 2 100026 100026 6 May 9 17:40 databases

Relancement du container :

$ podman run -d --name db_datas --network frontend \
-e MYSQL_USER=aline \
-e MYSQL_PASSWORD=1234+ \
-e MYSQL_DATABASE=datadevdb \
-e MYSQL_ROOT_PASSWORD=4321+ \
-v /home/aline/databases:/var/lib/mysql:Z \
-p 13306:3306 \
registry.access.redhat.com/rhel8/mariadb-105

Installation de mariadb dans le container et connexion à la DB :

$ podman exec -it db_client dnf install -y mariadb
$ podman exec -it db_client mysql -u aline -p -h db_datas

Configuration du firewall :

$ sudo firewall-cmd --add-port=13306/tcp --permanent
$ sudo firewall-cmd --reload

Connexion directe sur le container maintenant accessible :

$  mysql -u aline -p -h RemoteServer --port 13306 datadevdb -e 'SHOW TABLES';

Création d’un nouveau subnet :

$ podman network create --subnet 10.90.0.0/24 --gateway 10.90.0.1 backend

Conexion des 2 conteneurs à ce réseau :

$ podman network connect backend db_client
$ podman network connect backend db_datas

Intallation du paquet iputils dans le conteneur db_client :

$ podman exec -it db_client dnf install -y iputils

Test de ping entre conteneurs :

$ podman exec -it db_client ping -c4 db_datas

Gestion des conteneurs en tant que services système

Configuration d’un conteneur en tant que service systemd et configurer un service de conteneur pour qu’il se lance au démarrage.

http://n0tes.fr/2024/01/06/Podman-Conteneurs-service-systeme/

Documentation

Internet
MAN

> Partager <