Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
elearning:workbooks:redhat:rh134:l108 [2024/10/31 13:07] – admin | elearning:workbooks:redhat:rh134:l108 [2024/11/22 08:50] (Version actuelle) – admin | ||
---|---|---|---|
Ligne 25: | Ligne 25: | ||
* LAB #1 - Configuration des Registres | * LAB #1 - Configuration des Registres | ||
* LAB #2 - Gestion des Images | * LAB #2 - Gestion des Images | ||
+ | * 2.1 - Télécharger une Image | ||
+ | * 2.2 - Créer une Image à l'aide d'un Fichier Containerfile | ||
* LAB #3 - Gestion des Conteneurs | * LAB #3 - Gestion des Conteneurs | ||
+ | * 3.1 - Création d'un Conteneur | ||
+ | * 3.2 - Démarrage d'un Conteneur | ||
+ | * 3.3 - Exécution d'une Commande dans un Conteneur | ||
+ | * 3.4 - Suppression des Images et des Conteneurs | ||
* LAB #4 - Gestion du Stockage et du Réseau | * LAB #4 - Gestion du Stockage et du Réseau | ||
* 4.1 - Gestion du Stockage Persistant | * 4.1 - Gestion du Stockage Persistant | ||
* 4.2 - Gestion du Réseau | * 4.2 - Gestion du Réseau | ||
* LAB #5 - Gestion des Conteneurs en tant que Services Système | * LAB #5 - Gestion des Conteneurs en tant que Services Système | ||
+ | * 5.1 - Création du Gestionnaire de Conteneurs | ||
+ | * 5.2 - Création d'un Conteneur de Serveur Web | ||
Ligne 67: | Ligne 75: | ||
Graphiquement, | Graphiquement, | ||
- | |||
- | ===Machines Virtuelles=== | ||
- | |||
- | {{ : | ||
- | |||
- | ===Conteneurs=== | ||
- | |||
- | {{ : | ||
====Conteneurs Rootless et Rootful==== | ====Conteneurs Rootless et Rootful==== | ||
Ligne 110: | Ligne 110: | ||
Les images des conteneurs sont construites conformément à des spécifications, | Les images des conteneurs sont construites conformément à des spécifications, | ||
- | Un registre de conteneurs est un référentiel permettant de stocker et de récupérer des images de conteneurs. Un développeur pousse ou télécharge des images de conteneurs dans un registre de conteneurs. Ensuite le dévellopeur | + | Un registre de conteneurs est un référentiel permettant de stocker et de récupérer des images de conteneurs. Un développeur pousse ou télécharge des images de conteneurs dans un registre de conteneurs. Ensuite le développeur |
Il est possible d' | Il est possible d' | ||
Ligne 239: | Ligne 239: | ||
short-name-mode = " | short-name-mode = " | ||
</ | </ | ||
+ | |||
+ | Commencez par vous connecter au registre **registry.access.redhat.com** : | ||
< | < | ||
Ligne 246: | Ligne 248: | ||
Login Succeeded! | Login Succeeded! | ||
</ | </ | ||
+ | |||
+ | Pour vérifier si vous êtes connecté au registre **registry.access.redhat.com**, | ||
< | < | ||
Ligne 251: | Ligne 255: | ||
< | < | ||
</ | </ | ||
+ | |||
+ | Notez que vous devez vous connecter à chaque registre séparément : | ||
< | < | ||
[trainee@redhat9 ~]$ podman login registry.redhat.io --get-login | [trainee@redhat9 ~]$ podman login registry.redhat.io --get-login | ||
Error: not logged into registry.redhat.io | Error: not logged into registry.redhat.io | ||
- | </ | ||
- | < | ||
[trainee@redhat9 ~]$ podman login registry.redhat.io | [trainee@redhat9 ~]$ podman login registry.redhat.io | ||
Username: < | Username: < | ||
Ligne 266: | Ligne 270: | ||
< | < | ||
</ | </ | ||
+ | |||
+ | Les directives dans le fichier **/ | ||
< | < | ||
Ligne 280: | Ligne 286: | ||
blocked = false | blocked = false | ||
</ | </ | ||
+ | |||
+ | Pour vérifier si ce fichier est pris en compte, consultez la sortie de la commande **podman info** : | ||
< | < | ||
Ligne 300: | Ligne 308: | ||
=====LAB #2 - Gestion des Images===== | =====LAB #2 - Gestion des Images===== | ||
+ | |||
+ | ====2.1 - Télécharger une Image==== | ||
+ | |||
+ | Pour obtenir une image et la stocker localement, sans créer de conteneur, utilisez la commande **podman pull** : | ||
< | < | ||
Ligne 313: | Ligne 325: | ||
142e82b6e600e0a2208e32bcffab89cd6257316f93b22a1f12f172756ed7fe53 | 142e82b6e600e0a2208e32bcffab89cd6257316f93b22a1f12f172756ed7fe53 | ||
</ | </ | ||
+ | |||
+ | Pour examiner l' | ||
< | < | ||
Ligne 323: | Ligne 337: | ||
[trainee@redhat9 ~]$ | [trainee@redhat9 ~]$ | ||
</ | </ | ||
+ | |||
+ | Utilisez maintenant la commande **skopeo inspect** pour examiner l' | ||
< | < | ||
- | [trainee@redhat9 ~]$ skopeo inspect docker:// | + | [trainee@redhat9 ~]$ skopeo inspect docker:// |
+ | { | ||
" | " | ||
" | " | ||
Ligne 426: | Ligne 443: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | Pour lister les images disponibles localement, utilisez la commande **podman images** : | ||
< | < | ||
Ligne 436: | Ligne 455: | ||
**Important** - Notez que l' | **Important** - Notez que l' | ||
</ | </ | ||
+ | |||
+ | ====2.2 - Créer une Image à l'aide d'un Fichier Containerfile==== | ||
+ | |||
+ | Créez un contexte sous la forme d'un répertoire, | ||
< | < | ||
Ligne 449: | Ligne 472: | ||
CMD ["/ | CMD ["/ | ||
</ | </ | ||
+ | |||
+ | Dans le fichier **Containerfile**, | ||
+ | |||
+ | ^ Commande ^ Description ^ | ||
+ | | **FROM** | Définit l' | ||
+ | | **RUN** | Lance un processus dans la construction de la nouvelle image. | | ||
+ | | **CMD** | Définit la commande qui sera exécutée dans le conteneur lors de sa création à partir de la nouvelle image. | | ||
+ | |||
+ | Créez maintenant l' | ||
< | < | ||
Ligne 538: | Ligne 570: | ||
registry.access.redhat.com/ | registry.access.redhat.com/ | ||
</ | </ | ||
+ | |||
+ | En consultant l' | ||
< | < | ||
Ligne 557: | Ligne 591: | ||
=====LAB #3 - Gestion des Conteneurs===== | =====LAB #3 - Gestion des Conteneurs===== | ||
+ | |||
+ | Un conteneur peut être dans un de cinq états : | ||
^ Etat ^ Description ^ | ^ Etat ^ Description ^ | ||
Ligne 564: | Ligne 600: | ||
| **Paused** | Un conteneur dont les processus sont en pause. Non pris en charge pour les conteneurs Rootless. | | | **Paused** | Un conteneur dont les processus sont en pause. Non pris en charge pour les conteneurs Rootless. | | ||
| **Deleted** | Un conteneur dont les processus sont dans un état mort. | | | **Deleted** | Un conteneur dont les processus sont dans un état mort. | | ||
+ | |||
+ | ====3.1 - Création d'un Conteneur==== | ||
+ | |||
+ | Créez un conteneur dénommé **python36** à partir de la nouvelle image. Notez que l' | ||
< | < | ||
Ligne 569: | Ligne 609: | ||
f42e19a0627eb457570ca3626c8bb1fff77963542b7dc59ae5d07e86bf1a3fca | f42e19a0627eb457570ca3626c8bb1fff77963542b7dc59ae5d07e86bf1a3fca | ||
</ | </ | ||
+ | |||
+ | Pour visualiser la liste des conteneurs en cours d' | ||
< | < | ||
[trainee@redhat9 ~]$ podman ps | [trainee@redhat9 ~]$ podman ps | ||
CONTAINER ID IMAGE | CONTAINER ID IMAGE | ||
+ | </ | ||
+ | Pour consulter la liste de tous les conteneurs, ajoutez l' | ||
+ | |||
+ | < | ||
[trainee@redhat9 ~]$ podman ps -a | [trainee@redhat9 ~]$ podman ps -a | ||
CONTAINER ID IMAGE | CONTAINER ID IMAGE | ||
f42e19a0627e | f42e19a0627e | ||
</ | </ | ||
+ | |||
+ | ====3.2 - Démarrage d'un Conteneur==== | ||
+ | |||
+ | Pour démarrer un conteneur déjà créé, utilisez la commande **podman start** : | ||
< | < | ||
Ligne 588: | Ligne 638: | ||
</ | </ | ||
- | < | + | Pour démarrer un conteneur à partir d'une image distante, il convient d' |
- | podman run -d --name python38 registry.access.redhat.com/ | + | |
- | </ | + | |
< | < | ||
Ligne 601: | Ligne 649: | ||
85e26c02bfad | 85e26c02bfad | ||
</ | </ | ||
+ | |||
+ | ====3.3 - Exécution d'une Commande dans un Conteneur==== | ||
+ | |||
+ | Pour exécuter une commande à l' | ||
< | < | ||
Ligne 609: | Ligne 661: | ||
</ | </ | ||
- | < | + | Il est aussi possible d' |
- | [trainee@redhat9 ~]$ ps aux | grep sleep | + | |
- | trainee | + | |
- | 101000 | + | |
- | trainee | + | |
- | </ | + | |
< | < | ||
Ligne 625: | Ligne 672: | ||
4 ? R 0:00 ps -ax | 4 ? R 0:00 ps -ax | ||
</ | </ | ||
+ | |||
+ | Créez maintenant le fichier **/ | ||
< | < | ||
Ligne 640: | Ligne 689: | ||
| | ||
+ | Bien évidement ce fichier n' | ||
+ | |||
+ | < | ||
[trainee@redhat9 ~]$ podman exec python38 stat / | [trainee@redhat9 ~]$ podman exec python38 stat / | ||
stat: cannot statx '/ | stat: cannot statx '/ | ||
</ | </ | ||
+ | |||
+ | Copiez donc le fichier dans le conteneur et regardez ses caractéristiques : | ||
< | < | ||
Ligne 657: | Ligne 711: | ||
| | ||
</ | </ | ||
+ | |||
+ | Exécutez le script dans le conteneur avec le shell **bash** : | ||
< | < | ||
Ligne 662: | Ligne 718: | ||
hello world | hello world | ||
</ | </ | ||
+ | |||
+ | ====3.4 - Suppression des Images et des Conteneurs==== | ||
+ | |||
+ | En essayant de supprimer l' | ||
< | < | ||
Ligne 667: | Ligne 727: | ||
Error: image used by 85e26c02bfad3b47270b785b74ce225799dea5aff16ebf4f002a51688da2b3a7: | Error: image used by 85e26c02bfad3b47270b785b74ce225799dea5aff16ebf4f002a51688da2b3a7: | ||
</ | </ | ||
+ | |||
+ | Arrêtez donc le conteneur **python38** : | ||
< | < | ||
Ligne 678: | Ligne 740: | ||
85e26c02bfad | 85e26c02bfad | ||
</ | </ | ||
+ | |||
+ | Supprimez le conteneur **python38** avec la commande **podman rm** : | ||
< | < | ||
[trainee@redhat9 ~]$ podman rm python38 | [trainee@redhat9 ~]$ podman rm python38 | ||
python38 | python38 | ||
+ | </ | ||
+ | Il est maintenant possible de supprimer l' | ||
+ | |||
+ | < | ||
[trainee@redhat9 ~]$ podman rmi registry.access.redhat.com/ | [trainee@redhat9 ~]$ podman rmi registry.access.redhat.com/ | ||
Untagged: registry.access.redhat.com/ | Untagged: registry.access.redhat.com/ | ||
Ligne 688: | Ligne 756: | ||
</ | </ | ||
- | =====LAB #4 - Gestion du Stockage et du Réseau===== | + | Créez un conteneur **db01** à partir de l' |
< | < | ||
Ligne 702: | Ligne 770: | ||
Storing signatures | Storing signatures | ||
aea7c40abc0570fb616be14de5642683be5ebbadc95359f4b2d3ec32f1b12ddd | aea7c40abc0570fb616be14de5642683be5ebbadc95359f4b2d3ec32f1b12ddd | ||
- | </ | ||
- | < | ||
[trainee@redhat9 ~]$ podman ps -a | [trainee@redhat9 ~]$ podman ps -a | ||
CONTAINER ID IMAGE COMMAND | CONTAINER ID IMAGE COMMAND | ||
Ligne 710: | Ligne 776: | ||
aea7c40abc05 | aea7c40abc05 | ||
</ | </ | ||
+ | |||
+ | Examinez l' | ||
< | < | ||
Ligne 727: | Ligne 795: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | Vous noterez que pour lancer un conteneur, il faut spécifier les variables d' | ||
< | < | ||
Ligne 738: | Ligne 808: | ||
afc0cc842767 | afc0cc842767 | ||
</ | </ | ||
+ | |||
+ | Notez que le conteneur crée avec les variables d' | ||
+ | |||
+ | Supprimez maintenant le conteneur **db01**. Notez que vous que l'on peut référencer le conteneur par une partie de son **CONTAINER ID**, à condition que cette partie soit unique : | ||
< | < | ||
[trainee@redhat9 ~]$ podman rm aea | [trainee@redhat9 ~]$ podman rm aea | ||
aea | aea | ||
+ | </ | ||
+ | Supprimez le deuxième conteneur en stipulant son nom : | ||
+ | |||
+ | < | ||
[trainee@redhat9 ~]$ podman rm boring_ganguly | [trainee@redhat9 ~]$ podman rm boring_ganguly | ||
Error: cannot remove container afc0cc8427677eed8cf17ef1ee9669b937ca25ccd322c066ee9c46e070baf3d3 as it is running - running or paused containers cannot be removed without force: container state improper | Error: cannot remove container afc0cc8427677eed8cf17ef1ee9669b937ca25ccd322c066ee9c46e070baf3d3 as it is running - running or paused containers cannot be removed without force: container state improper | ||
Ligne 749: | Ligne 827: | ||
boring_ganguly | boring_ganguly | ||
</ | </ | ||
+ | |||
+ | Re-créez un conteneur MariaDB ayant le nom **db1** : | ||
< | < | ||
Ligne 759: | Ligne 839: | ||
90c582b10512 | 90c582b10512 | ||
</ | </ | ||
+ | |||
+ | =====LAB #4 - Gestion du Stockage et du Réseau===== | ||
====4.1 - Gestion du Stockage Persistant==== | ====4.1 - Gestion du Stockage Persistant==== | ||
+ | |||
+ | Consultez les deux fichiers **/ | ||
< | < | ||
Ligne 775: | Ligne 859: | ||
**Important** - La sortie précédente montre que dans le conteneur, l' | **Important** - La sortie précédente montre que dans le conteneur, l' | ||
</ | </ | ||
+ | |||
+ | Obtenez l'UID et le GID de l' | ||
< | < | ||
Ligne 781: | Ligne 867: | ||
</ | </ | ||
- | Il convient maintenant de monter le répertoire **/ | + | Il convient maintenant de monter le répertoire **/ |
- | Créez donc le répertoire **/ | + | Créez donc le répertoire **/ |
< | < | ||
Ligne 804: | Ligne 890: | ||
drwxr-xr-x. 2 trainee trainee | drwxr-xr-x. 2 trainee trainee | ||
</ | </ | ||
+ | |||
+ | Vérifiez que l' | ||
< | < | ||
Ligne 817: | Ligne 905: | ||
logout | logout | ||
</ | </ | ||
+ | |||
+ | Arrêtez le conteneur **bd1** : | ||
< | < | ||
[trainee@redhat9 ~]$ podman stop db1 | [trainee@redhat9 ~]$ podman stop db1 | ||
db1 | db1 | ||
+ | </ | ||
+ | Créez un conteneur dénommé **bd01** : | ||
+ | |||
+ | < | ||
[trainee@redhat9 ~]$ podman run -d --name db01 -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -e MYSQL_DATABASE=db -p 3306:3306 -v / | [trainee@redhat9 ~]$ podman run -d --name db01 -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -e MYSQL_DATABASE=db -p 3306:3306 -v / | ||
959e8039ba2bc11a30bbe0ffb9185c4779aa6c8865a9288767675c5163e119bd | 959e8039ba2bc11a30bbe0ffb9185c4779aa6c8865a9288767675c5163e119bd | ||
</ | </ | ||
+ | |||
+ | Consultez l' | ||
< | < | ||
Ligne 833: | Ligne 929: | ||
959e8039ba2b | 959e8039ba2b | ||
</ | </ | ||
+ | |||
+ | Afin de comprendre la nature du problème, consultez les journaux du conteneur avec la commande **podman container logs** : | ||
< | < | ||
Ligne 843: | Ligne 941: | ||
... | ... | ||
</ | </ | ||
+ | |||
+ | En notant l' | ||
< | < | ||
[trainee@redhat9 ~]$ su - | [trainee@redhat9 ~]$ su - | ||
Password: fenestros | Password: fenestros | ||
+ | </ | ||
+ | Générez un fichier d' | ||
+ | |||
+ | < | ||
[root@redhat9 ~]# sealert -a / | [root@redhat9 ~]# sealert -a / | ||
Ligne 906: | Ligne 1010: | ||
logout | logout | ||
</ | </ | ||
+ | |||
+ | En consultant l' | ||
< | < | ||
Ligne 912: | Ligne 1018: | ||
</ | </ | ||
- | container_file_t | + | Pour forcer l' |
< | < | ||
Ligne 924: | Ligne 1030: | ||
47a5626d51dd | 47a5626d51dd | ||
</ | </ | ||
+ | |||
+ | Finalement vérifiez le SC du répertoire **/ | ||
< | < | ||
Ligne 938: | Ligne 1046: | ||
97f190a660ceba8f62b688781a5df1daef06e3ded241d799b15a8df744049116 | 97f190a660ceba8f62b688781a5df1daef06e3ded241d799b15a8df744049116 | ||
</ | </ | ||
+ | |||
+ | Notez ensuite la prise en charge de cette commande : | ||
< | < | ||
Ligne 943: | Ligne 1053: | ||
97f190a660ce | 97f190a660ce | ||
</ | </ | ||
+ | |||
+ | Pour voir le mappage des ports, utilisez la commande **podman port -a** : | ||
< | < | ||
Ligne 954: | Ligne 1066: | ||
</ | </ | ||
- | Depuis la version 4.0, Podman supporte deux réseaux pour les conteneurs, **Netavark** et **CNI**. À partir de RHEL 9, les systèmes utilisent **Netavark** par défaut. Pour vérifier quel back-end | + | Depuis la version 4.0, Podman supporte deux réseaux pour les conteneurs, **Netavark** et **CNI**. À partir de RHEL 9, les systèmes utilisent **Netavark** par défaut. Pour vérifier quel backend |
< | < | ||
Ligne 963: | Ligne 1075: | ||
netavark | netavark | ||
</ | </ | ||
+ | |||
+ | Pour modifier le backend utilisé, il convient de modifier la directive **network_backend** dans le fichier **/ | ||
< | < | ||
Ligne 968: | Ligne 1082: | ||
# | # | ||
</ | </ | ||
+ | |||
+ | Lors de l' | ||
< | < | ||
Ligne 973: | Ligne 1089: | ||
NETWORK ID NAME DRIVER | NETWORK ID NAME DRIVER | ||
2f259bab93aa | 2f259bab93aa | ||
+ | </ | ||
+ | <WRAP center round important 60%> | ||
+ | **Important** - Le DRIVER **bridge** est limité aux conteneurs d'un hôte unique exécutant podman. Les conteneurs ne peuvent communiquer qu' | ||
+ | </ | ||
+ | |||
+ | Regardez les caractéristiques de ce réseau : | ||
+ | |||
+ | < | ||
[trainee@redhat9 ~]$ podman network inspect podman | [trainee@redhat9 ~]$ podman network inspect podman | ||
[ | [ | ||
Ligne 997: | Ligne 1121: | ||
] | ] | ||
</ | </ | ||
+ | |||
+ | Créez maintenant un deuxième réseau appelé **db_net** : | ||
< | < | ||
Ligne 1030: | Ligne 1156: | ||
] | ] | ||
</ | </ | ||
+ | |||
+ | Placez le conteneur **db01** dans le réseau **db_net** : | ||
< | < | ||
Ligne 1035: | Ligne 1163: | ||
36c9f95ae52f76f96c45bb7fd6600cb014adc751059a531bb7bf38f927a11541 | 36c9f95ae52f76f96c45bb7fd6600cb014adc751059a531bb7bf38f927a11541 | ||
</ | </ | ||
+ | |||
+ | Créez maintenant le conteneur **client** en le plaçant dans le réseau **db_net** : | ||
< | < | ||
Ligne 1047: | Ligne 1177: | ||
00b2b82c2adf | 00b2b82c2adf | ||
</ | </ | ||
+ | |||
+ | Installez dans le conteneur **client**, les paquets **iputils** et **iproute** : | ||
< | < | ||
[trainee@redhat9 ~]$ podman exec -it client dnf install -y iputils iproute | [trainee@redhat9 ~]$ podman exec -it client dnf install -y iputils iproute | ||
</ | </ | ||
+ | |||
+ | Testez la connectivité du réseau **db_net** : | ||
< | < | ||
Ligne 1066: | Ligne 1200: | ||
rtt min/ | rtt min/ | ||
</ | </ | ||
+ | |||
+ | Testez la résolution des noms **db_net** : | ||
< | < | ||
Ligne 1078: | Ligne 1214: | ||
rtt min/ | rtt min/ | ||
</ | </ | ||
+ | |||
+ | Créez le troisième réseau **backend** : | ||
< | < | ||
Ligne 1088: | Ligne 1226: | ||
556c9797ea6d | 556c9797ea6d | ||
2f259bab93aa | 2f259bab93aa | ||
- | </ | ||
- | < | ||
[trainee@redhat9 ~]$ podman network inspect backend | [trainee@redhat9 ~]$ podman network inspect backend | ||
[ | [ | ||
Ligne 1114: | Ligne 1250: | ||
] | ] | ||
</ | </ | ||
+ | |||
+ | Placez les deux conteneurs existants dans ce nouveau réseau : | ||
< | < | ||
Ligne 1120: | Ligne 1258: | ||
[trainee@redhat9 ~]$ podman network connect backend client | [trainee@redhat9 ~]$ podman network connect backend client | ||
</ | </ | ||
+ | |||
+ | Constatez que les deux conteneurs se trouvent dans les deux réseaux, **backend** et **db_net** : | ||
< | < | ||
Ligne 1212: | Ligne 1352: | ||
=====LAB #5 - Gestion des Conteneurs en tant que Services Système===== | =====LAB #5 - Gestion des Conteneurs en tant que Services Système===== | ||
+ | |||
+ | Sans faire appel à un Orchestrateur de Conteneurs tel Kubernetes, il est possible de gérer des petites infrastructures en utilisant simplement **-systemd**. | ||
+ | |||
+ | ====5.1 - Création du Gestionnaire de Conteneurs==== | ||
+ | |||
+ | Commencez par créer un compte qui sera utilisé pour gérer les conteneurs : | ||
< | < | ||
Ligne 1226: | Ligne 1372: | ||
passwd: all authentication tokens updated successfully. | passwd: all authentication tokens updated successfully. | ||
</ | </ | ||
+ | |||
+ | Devenez l' | ||
< | < | ||
Ligne 1238: | Ligne 1386: | ||
</ | </ | ||
- | Podman est un utilitaire sans état et nécessite une session de connexion complète. Podman doit être utilisé dans une session SSH et ne peut pas être utilisé dans un shell sudo ou su. | + | Podman est un utilitaire sans état et nécessite une session de connexion complète. Podman doit être utilisé dans une session SSH et ne peut pas être utilisé dans un shell sudo ou su : |
< | < | ||
Ligne 1279: | Ligne 1427: | ||
... | ... | ||
</ | </ | ||
+ | |||
+ | ====5.2 - Création d'un Conteneur de Serveur Web==== | ||
+ | |||
+ | Commencez par créer un répertoire dans l' | ||
< | < | ||
[fenestros@redhat9 ~]$ mkdir www | [fenestros@redhat9 ~]$ mkdir www | ||
+ | </ | ||
+ | Créez ensuite un conteneur, appelé **webserver** avec un mappage de ports, à partir de l' | ||
+ | |||
+ | < | ||
[fenestros@redhat9 ~]$ podman run -d --name webserver -p 8080:8080 -v ~/ | [fenestros@redhat9 ~]$ podman run -d --name webserver -p 8080:8080 -v ~/ | ||
Trying to pull registry.access.redhat.com/ | Trying to pull registry.access.redhat.com/ | ||
Ligne 1295: | Ligne 1451: | ||
e8afda5806a98f378865230e6d5c900c85afc0ea152609602a65d05c60cd68dc | e8afda5806a98f378865230e6d5c900c85afc0ea152609602a65d05c60cd68dc | ||
</ | </ | ||
+ | |||
+ | Utilisez la commande **podman generate systemd** pour créer un fichier d' | ||
< | < | ||
Ligne 1305: | Ligne 1463: | ||
/ | / | ||
</ | </ | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | **Important** - Notez l' | ||
+ | </ | ||
+ | |||
+ | |||
+ | Le fichier est créé dans le répertoire courant : | ||
< | < | ||
- | [fenestros@redhat9 ~]$ cat .config/ | + | [fenestros@redhat9 ~]$ cat container-webserver.service |
# container-webserver.service | # container-webserver.service | ||
# autogenerated by Podman 4.9.4-rhel | # autogenerated by Podman 4.9.4-rhel | ||
Ligne 1347: | Ligne 1512: | ||
</ | </ | ||
- | < | + | Pour que systemd puisse prendre en charge le service, le fichier d' |
- | [fenestros@redhat9 ~]$ mkdir -p ~/ | + | |
- | </ | + | |
< | < | ||
Ligne 1356: | Ligne 1519: | ||
[fenestros@redhat9 ~]$ mv container-webserver.service ~/ | [fenestros@redhat9 ~]$ mv container-webserver.service ~/ | ||
</ | </ | ||
+ | |||
+ | Pour créer le service, utilisez la commande **systemctl --user daemon-reload**. Notez que l' | ||
< | < | ||
[fenestros@redhat9 ~]$ systemctl --user daemon-reload | [fenestros@redhat9 ~]$ systemctl --user daemon-reload | ||
</ | </ | ||
+ | |||
+ | Vérifiez le statut du service : | ||
< | < | ||
Ligne 1368: | Ligne 1535: | ||
Docs: man: | Docs: man: | ||
</ | </ | ||
+ | |||
+ | Dans l' | ||
< | < | ||
Ligne 1387: | Ligne 1556: | ||
Linger=no | Linger=no | ||
</ | </ | ||
+ | |||
+ | Afin que le service reste démarré après la fermeture de la session et qu'il réagisse comme un service de système, il faut modifier la valeur de Linger à **yes** : | ||
< | < | ||
Ligne 1408: | Ligne 1579: | ||
Linger=yes | Linger=yes | ||
</ | </ | ||
+ | |||
+ | Créez un fichier **index.html** dans le répertoire **$HOME/ | ||
< | < | ||
[fenestros@redhat9 ~]$ echo "Hello World" > ~/ | [fenestros@redhat9 ~]$ echo "Hello World" > ~/ | ||
</ | </ | ||
+ | |||
+ | Supprimez le conteneur actuel **webserver** en utilisant l' | ||
< | < | ||
Ligne 1421: | Ligne 1596: | ||
webserver | webserver | ||
</ | </ | ||
+ | |||
+ | Activez et démarrez le service utilisateur **container-webserver** : | ||
< | < | ||
Ligne 1445: | Ligne 1622: | ||
ed306cecef9e | ed306cecef9e | ||
</ | </ | ||
+ | |||
+ | Déconnectez-vous du compte fenestros et vérifiez que le serveur Web fonctionne : | ||
< | < | ||
Ligne 1450: | Ligne 1629: | ||
logout | logout | ||
Connection to localhost closed. | Connection to localhost closed. | ||
- | </ | ||
- | < | ||
[root@redhat9 ~]# curl http:// | [root@redhat9 ~]# curl http:// | ||
Hello World | Hello World |