Pour créer et utiliser un dépôt de conteneurs privé, il est possible de mettre en place une registry de conteneurs locale qui permetra d’héberger ses propres images, de les push ou de les pull comme lorsque des dépôts officiels sont utilisés.
Configurer un dépôt de conteneurs privé avec Podman
Configuration du registry
Installer et Lancer un Conteneur Registry, qui utilise l’image registry de Docker Hub pour créer un dépôt privé sur le port 5000 :
# podman run -d -p 5000:5000 --name myregistry docker.io/library/registry:2 |
Cela crée un dépôt local accessible via http://localhost:5000.
# wget http://localhost:5000 |
[...] |
Pour vérifier si le registre est bien actif, curl
permet de lister les images disponibles (le registre sera vide aucune image n’a été poussée) :
# curl -X GET http://localhost:5000/v2/_catalog |
{"repositories":[]} |
Récupérer, Taguer et Pousser une Image
Si l’image n’est pas présente, il faudra d’abord la télécharger avec podman pull
:
# podman pull registry.access.redhat.com/ubi9/ubi |
Trying to pull registry.access.redhat.com/ubi9/ubi:latest... |
Pour taguer une image :
# podman tag ubi9/ubi localhost:5000/ubi9/ubi |
Pour pousser une image le dépôt :
# podman push localhost:5000/ubi9/ubi |
Vérification du registre :
# curl -X GET http://localhost:5000/v2/_catalog |
{"repositories":["ubi9/ubi"]} |
Erreur https
L’erreur ci-dessous est due au fait que Podman essaie de se connecter à un registre privé sur localhost:5000 via HTTPS, alors qu’il est configuré pour fonctionner en HTTP.
# podman push localhost:5000/ubi9/ubi |
Getting image source signatures |
Corrections d’erreur
Registre en mode insecure
Pour corriger l’erreur, il faut configurer le registre comme “insecure“ en indiquant à Podman que le registre localhost:5000
est non sécurisé (HTTP) en modifiant le fichier de configuration des registres de Podman :
# vim /etc/containers/registries.conf |
[[registry]] |
Ensuite, redémmarer le registry :
# podman restart myregistry |
Export et réimport d’image
S’il n’est toujours pas possible de push l’image, il est possible de l’exporter et de la réimporter :
Exporter l’image :
# podman save -o ubi9.tar registry.access.redhat.com/ubi9/ubi |
Réimporter l’image :
# podman load -i ubi9.tar |
Taguer l’image et pousser :
# podman tag registry.access.redhat.com/ubi9/ubi localhost:5000/ubi9/ubi |
Pousser l’image :
# podman push --disable-content-trust localhost:5000/ubi9/ubi |
Connexion et Récupération d’Image
Connexion au dépôt (juste
# podman login localhost:5000 |
Username: |
Test de l’accès :
# podman pull localhost:5000/ubi9/ubi |
Configuration des DNS pour un Nom Personnalisé
Ajouter une entrée dans /etc/hosts
pour simuler registry.my.localhost.org
:
[...] |
Ajouter des dépots
Image PHP
Configuration
Créer un dossier pour l’image PHP :
# mkdir my-php |
Créer le Containerfile associé pour l’image PHP :
# vim my-php/Containerfile |
# Containerfile for PHP |
Création d’une application
Créer un dossier pour l’application PHP :
# mkdir -p my-php/my-php-app |
Créer un Fichier PHP de Test :
# vim /my-php/my-php-app/index.php |
Ayant le contenu suivant :
<?php |
Construction de l’image
Se positionner dans le dossier :
# cd my-php/ |
Construction de l’image :
# podman build -t registry.my.localhost.org/php-dev . |
STEP 1/4: FROM docker.io/library/php:latest |
Push de l’image :
# podman push registry.my.localhost.org/php-dev |
Si erreur rencontrées, de type https:
Getting image source signatures |
Il est possible d’y remédier :
# podman run -d -p 5000:5000 --name myregistry --replace docker.io/library/registry:2 |
Vérification :
# curl http://localhost:5000/v2/_catalog |
{"repositories":["php-dev"]} |
Image MySQL
Créer un dossier pour l’image MYSQL :
# mkdir my-mysql |
Créer le Containerfile associé pour l’image MYSQL :
# vim my-mysql/Containerfile |
# Containerfile for MYSQL |
Construction de l’image :
# podman build -t registry.my.localhost.org/mysql . |
STEP 1/4: FROM docker.io/library/mysql:latest |
Push de l’image :
# podman push registry.my.localhost.org/mysql |
Si erreur rencontrées, de type https:
Getting image source signatures |
Il est possible d’y remédier :
# podman run -d -p 5000:5000 --name myregistry --replace docker.io/library/registry:2 |
Vérification :
# curl http://localhost:5000/v2/_catalog |
{"repositories":["my-mysql","php-dev"]} |
Image Python
Créer un dossier pour l’image Python :
# mkdir my-python |
Créer le Containerfile associé pour l’image Python (et le répertoire /python
à la racine du système):
# vim my-python/Containerfile |
# Containerfile for Python |
Création d’une application
Créer un dossier pour l’application Python :
# mkdir -p my-python/my-python-app |
Créer un Fichier Python de Test :
# vim my-python/my-python-app/app.py |
Ayant le contenu suivant :
print("Hello from Python!") |
Construction de l’image
Se positionner dans le dossier :
# cd my-python/ |
Construction de l’image :
# podman build -t registry.my.localhost.org/python-app . |
STEP 1/4: FROM docker.io/library/python:latest |
Push de l’image :
# podman push registry.my.localhost.org/python-dev |
Si erreur rencontrées, de type https:
Getting image source signatures |
Il est possible d’y remédier :
# podman run -d -p 5000:5000 --name myregistry --replace docker.io/library/registry:2 |
Vérification :
# curl http://localhost:5000/v2/_catalog |
{"repositories":["my-mysql","php-dev","python-dev"]} |
Utiliser et Exécuter les Conteneurs depuis le Dépôt
PHP
Exécuter le conteneur PHP :
# podman run -d --name php-server -p 8000:8000 registry.my.localhost.org/php-dev |
MySQL
Exécuter le conteneur MYSQL :
# podman run -d --name mysql-db -e MYSQL_ROOT_PASSWORD=yourpassword -p 3306:3306 registry.my.localhost.org/mysql |
Python
Exécuter le conteneur Python :
# podman run -d --name python-app registry.my.localhost.org/python-dev |
Documentation
Internet