Création d'images de conteneur multiplateforme à l'aide de Podman sur Oracle Linux
Introduction
Cette démonstration montre la création d'une image de conteneur multiplateforme à l'aide de Podman sur Oracle Linux.
Objectifs
Dans ce tutoriel, vous apprendrez à :
- Configurer Podman pour la connectivité à distance
- Se connecter à une instance Podman distante
- Créer des images propres à la plate-forme à partir d'un seul fichier de conteneur
- Transmettre des images propres à la plate-forme vers Oracle Cloud Infrastructure Registry (OCIR)
- Créer une liste de manifestes incluant à la fois des images propres à la plate-forme
- Pousser la liste des manifestes vers OCIR
- Examinez la liste des manifestes hébergés par OCIR pour voir les plates-formes disponibles.
- Extraire et exécuter l'image
Prérequis
- Accès à une location Oracle Cloud Infrastructure (OCI)
- Une instance Oracle Linux x86_64
- Une instance Oracle Cloud Developer aarch_64
- Accès à Oracle Cloud Infrastructure Registry
Déployer un serveur Podman
-
Créez une instance de calcul Oracle Linux.
Vous pouvez utiliser l'image et la forme par défaut, à condition que la forme utilise une architecture x86_64. Sélectionnez ou créez un sous-réseau public et affectez une adresse IPv4.
Cette étape prend en charge l'utilisation des formes Micro disponibles dans le niveau Toujours gratuit.
-
Une fois l'instance en cours d'exécution, connectez-vous à l'instance.
ssh -i <SSH_KEY> opc@<IP_ADDRESS_OF_PODMAN_SERVER_INSTANCE>
Où :
<SSH_KEY>
est la partie privée de la clé SSH utilisée lors du provisionnement de l'instance de calcul. Exemple :~/.ssh/id_rsa
- L'adresse IP publique de l'instance de calcul est
<IP_ADDRESS_OF_PODMAN_SERVER_INSTANCE>
.
Installation et configuration de Podman pour l'accès distant
Vous pouvez exécuter ces commandes en tant que compte utilisateur opc
par défaut sur l'instance de calcul ou tout utilisateur disposant d'un accès sudo
.
-
Mettez à jour le système avec les derniers correctifs et errata de sécurité.
sudo dnf -y update
-
Installez les modules ou packages Podman.
Oracle Linux 8 ::
sudo dnf module install -y container-tools:ol8
Oracle Linux 9 et Oracle Linux 10 :
sudo dnf install -y container-tools
Le module ou package container-tools installe podman et d'autres outils de conteneur, y compris skopeo et buildah. L'un des packages essentiels est container-selinux, qui permet d'exécuter
podman
en tant qu'utilisateur non root sur un système compatible SELinux, activé par défaut par Oracle Linux. -
Activez le socket Podman.
systemd écoute sur ce socket et lance une instance de Podman chaque fois qu'un client distant l'active. Une fois la connexion fermée, systemd arrête l'instance Podman.
Remarque : il est possible de configurer l'accès distant à Podman en mode sans racine, mais cela dépasse le cadre de ce tutoriel.
sudo systemctl enable --now podman.socket
-
Vérifiez le chemin du socket.
sudo systemctl status podman.socket
La sortie affiche l'écoute du socket et son emplacement est
/run/podman/podman.sock
.C'est tout, mais restez connecté à l'instance de serveur Podman pour effectuer une configuration SSH sans mot de passe plus loin dans ce tutoriel.
Déployer une instance Oracle Cloud Developer
Oracle Ampere A1 Compute est une plate-forme hautes performances combinant des processeurs Oracle Cloud Infrastructure (OCI) et Ampere Altra Arm. Il fournit des performances déterministes, une sécurité éprouvée et un vaste écosystème de développeurs qui inclut des outils et des environnements populaires (OS, Kubernetes - OKE, SDK et CLI).
OCI répertorie l'image de développeur Oracle Cloud en tant qu'image de plate-forme avec tous les outils de développement populaires installés, y compris Git, Node.js, Java et GraalVM.
-
Créez une instance de calcul Oracle Cloud Developer.
Sélectionnez l'image Oracle Cloud Developer et une forme Ampere. Sélectionnez le même sous-réseau public que l'instance de serveur Podman et affectez une adresse IPv4.
-
Choisissez d'utiliser des règles entrantes ou la transmission de port SSH.
Vous pouvez accéder à l'application web de démonstration que nous allons créer de deux façons. Bien que vous puissiez activer les deux, vous n'avez qu'à choisir l'un ou l'autre.
(Facultatif) Création d'une règle entrante
L'utilisation d'une règle entrante est un processus en deux étapes. Cette option ouvre l'accès au sous-réseau à partir d'Internet et continue d'accorder l'accès à l'instance sur le port spécifié même après un redémarrage. Vous devez d'abord créer la règle dans OCI, puis ouvrir le port dans firewalld sur l'instance Oracle Linux.
-
Ajoutez une règle entrante à votre sous-réseau public.
La règle doit autoriser le trafic entrant sur le port
5808/tcp
à partir de0.0.0.0/0
. La règle prend effet immédiatement après sa création. -
Ouvrez un nouveau terminal et connectez-vous à l'instance Oracle Cloud Developer via SSH.
ssh -i <SSH_KEY> opc@<IP_ADDRESS_OF_ORACLE_CLOUD_DEVELOPER_INSTANCE>
-
Ajoutez un accès à l'application Web de démonstration.
sudo firewall-cmd --permanent --add-port=5808/tcp sudo firewall-cmd --reload
-
Confirmez les modifications apportées au pare-feu.
sudo firewall-cmd --list-all
La sortie affiche
ports: 5808/tcp
disponible.
Utiliser la transmission de port SSH
-
Ouvrez un terminal et connectez-vous via SSH à l'instance Oracle Cloud Developer.
L'option
-L
active le transfert local, qui ouvre un port local pour la connexion via un tunnel SSH à l'application Web de démonstration distante.ssh -L 5808:localhost:5808 -i <SSH_KEY> opc@<IP_ADDRESS_OF_ORACLE_CLOUD_DEVELOPER_INSTANCE>
Création d'une image de conteneur pour une application Web et exécution locale
-
Clonez le référentiel Git de l'application de démonstration.
Pour ce tutoriel, vous allez déployer RasDash, une application Web de surveillance de serveur basée sur Node.js.
git clone https://github.com/sykeben/RasDash.git
-
Accédez au répertoire du code source.
cd ~/RasDash
-
Créez un fichier Containerfile pour créer et servir l'application Web.
cat << EOF > Containerfile FROM ghcr.io/oracle/oraclelinux8-nodejs:14 COPY . /app WORKDIR /app RUN npm install && \ npm test CMD ["/usr/bin/node", "app.js", "service"] EOF
-
Créez et exécutez l'image sur l'instance locale.
Créez l'image de conteneur en local à l'aide de
podman
et marquez-la avec la version de l'application et l'architecture de la plate-forme. Ces informations seront utiles ultérieurement lorsque vous propagerez chaque image de plate-forme vers Oracle Cloud Infrastructure Registry (OCIR) et que vous créerez un manifeste des deux images de plate-forme.sudo podman build --format docker --tag rasdash:0.3.4-arm64 .
La ligne finale sera unique au paramétrage de votre application.
-
Exécutez un conteneur à l'aide de l'image.
sudo podman run --rm --init -detach --name rasdash --publish 5808:5808 localhost/rasdash:0.3.4-arm64
Le condensé renvoyé par Podman est unique pour chaque instance de conteneur.
-
Affichez le conteneur en cours d'exécution.
sudo podman ps
La sortie affiche le conteneur comme
Up
et en cours d'exécution. -
Affichez les journaux du conteneur.
sudo podman logs rasdash
La sortie affiche
[STATE] Server started
. -
Afficher l'application Web.
Ouvrez un navigateur sur votre ordinateur local et accédez à
http://localhost:5808
. Si vous avez créé les règles entrantes et de pare-feu, vous pouvez utiliser l'adresse IP publique de l'instance Oracle Cloud Developer plutôt quelocalhost
.Remarque : la mesure de la température de l'UC affichera
-1
car les instances virtuelles dans OCI ne peuvent pas accéder aux données matérielles physiques. -
Arrêter le conteneur en cours d'exécution.
sudo podman stop rasdash
Configuration d'une connexion SSH sans mot de passe entre les instances
Podman communique via SSH entre les instances à des fins de sécurité. Pour une expérience plus fluide, créez une paire de clés publique/privée sur votre instance Cloud Developer et copiez-la sur le serveur Podman Remote afin de pouvoir utiliser SSH à partir de l'instance de développeur sans avoir à saisir de mot de passe.
-
Générez une paire de clés publique/privée sur l'instance Oracle Cloud Developer.
ssh-keygen -b 4096 -f ~/.ssh/id_rsa -q -N ""
-
Copiez le contenu du fichier des clés publiques.
cat ~/.ssh/id_rsa.pub
Sélectionnez la sortie de la commande
cat
et copiez-la. -
Passez à l'instance de serveur Podman.
-
Ouvrez le fichier dans vi.
vi ~/.ssh/authorized_keys
Collez le contenu de la clé publique dans le fichier de clés autorisées.
Enregistrez et fermez le fichier.
-
Veillez à appliquer les autorisations de système de fichiers appropriées au répertoire et aux fichiers SSH.
chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
-
Passez à l'instance Cloud Developer.
-
Testez si vous pouvez utiliser SSH pour le serveur Podman en tant qu'utilisateur
opc
sans avoir besoin de mot de passe.Remarque : en cas de problème, reportez-vous à la documentation suivante :
ssh opc@<IP_ADDRESS_OF_PODMAN_SERVER_INSTANCE>
Après avoir vérifié que vous pouvez vous connecter sans avoir besoin de mot de passe, veillez à
exit
la session SSH entre l'instance Oracle Cloud Developer et le serveur Podman. -
Passez à l'instance de serveur Podman.
-
Remplacez le fichier de clés autorisées de l'utilisateur root.
cat /home/opc/.ssh/authorized_keys | sudo tee /root/.ssh/authorized_keys
-
Passez à l'instance Cloud Developer.
-
Testez si vous pouvez utiliser SSH avec l'utilisateur
opc
sur l'instance Cloud Developer pour l'utilisateurroot
sur le serveur Podman.ssh root@<IP_ADDRESS_OF_PODMAN_SERVER_INSTANCE>
Vous pouvez
exit
la session après avoir testé la connexion SSH au serveur Podman en tant qu'utilisateur root.
Création d'une connexion système au serveur Podman
-
Créez une connexion système Podman entre l'instance Oracle Cloud Developer et le service Podman exécuté sur votre serveur Podman.
sudo podman system connection add --identity ~/.ssh/id_rsa amd64 ssh://root@<IP_ADDRESS_OF_PODMAN_SERVER_INSTANCE>/run/podman/podman.sock
Dans la commande ci-dessus, remplacez
<IP_ADDRESS_OF_PODMAN_SERVER_INSTANCE>
par l'adresse IP ou le nom d'hôte de votre serveur Podman. -
Vérifiez que la connexion a bien été ajoutée.
sudo podman system connection list
La sortie affiche la connexion
amd64
avec la valeurDefault
définie surtrue
. Podman utilise cette connexion si le système a plusieurs connexions configurées.
Création d'une image sur le serveur Podman distant
Vous devez maintenant pouvoir utiliser podman --remote
pour envoyer des commandes de l'instance Oracle Cloud Developer vers l'instance de serveur Podman distante.
-
Testez en obtenant les détails du serveur Podman.
sudo podman --remote info
L'architecture doit indiquer
arm64
. -
Créez l'image distante.
Podman copie automatiquement l'intégralité du contexte vers l'instance distante.
cd ~/RasDash sudo podman --remote build --format docker --tag rasdash:0.3.4-amd64 .
-
Vérifiez que l'image existe sur le serveur Podman distant.
REMARQUE : Podman ne copie pas l'image qu'il crée sur l'ordinateur client, de sorte que l'image ne sera pas répertoriée si vous exécutez
sudo podman images
. Cependant, il est disponible sur la machine distante.sudo podman --remote images
Exemple de résultat :
REPOSITORY TAG IMAGE ID CREATED SIZE localhost/rasdash 0.3.4-amd64 3a1b9755ebdd 8 seconds ago 439 MB ...
-
Vérifiez l'architecture de l'image locale.
La méthode finale de validation de la construction de chaque image pour (et sur) une plate-forme et une architecture spécifiques utilise
jq
pour extraire la valeur du champArchitecture
dans le manifeste de chaque image.sudo podman inspect rasdash:0.3.4-arm64 | jq -r '.[] | .Architecture'
L'image locale indique son architecture en tant que
arm64
. -
Vérifiez l'image distante.
sudo podman --remote inspect rasdash:0.3.4-amd64 | jq -r '.[] | .Architecture'
L'image distante indique
amd64
.
Créer un référentiel Container Registry
Dans la console Oracle Cloud Infrastructure, accédez à la section Container Registry et créez un référentiel pour stocker votre application multi-plateforme.
Pour plus de détails, reportez-vous à Création d'un référentiel dans la documentation Oracle Cloud Infrastructure.
-
Créez le référentiel privé
demo/rasdash
. -
Vérifiez les informations relatives au nouveau référentiel.
Collecter les informations d'identification du référentiel Container Registry
Le tableau suivant fournit des exemples de valeurs utilisées dans les étapes suivantes de ce tutoriel. L'exemple iad
est la clé de région de la région Est des Etats-Unis (Ashburn). Si votre région est Allemagne centrale (Francfort), la clé de région est fra
. Reportez-vous à la documentation Régions et domaines de disponibilité pour obtenir un tableau complet répertoriant les clés de région disponibles.
Données du registre | Espace réservé du tutoriel | Remarques |
---|---|---|
REGISTRY_NAMESPACE | gse00015915 |
Affiché dans le panneau d'informations du référentiel sous la forme "Espace de noms" |
REPOSITORY_NAME | demo/rasdash |
Affiché sous le nom du compartiment |
OCIR_INSTANCE | iad.ocir.io |
Utiliser <region>.ocir.io |
Reportez-vous à Propagation d'images à l'aide de la CLI Docker, si nécessaire. Cette procédure décrit le processus de connexion requis pour propager des images vers Container Registry à l'aide de la CLI.
-
Obtenez votre nom d'utilisateur.
Vous avez besoin d'un nom utilisateur et d'un jeton d'authentification pour vous connecter au registre de conteneurs. Pour obtenir le nom utilisateur, dans l'angle supérieur droit de la console Oracle Cloud Infrastructure, ouvrez le menu Profil (icône du menu Utilisateur), puis cliquez sur Mon profil pour visualiser les détails.
Copiez et enregistrez le nom utilisateur, y compris
tenancy-namespace
affiché dans la console. -
Générer un jeton d'authentification.
Faites défiler la page Mon profil dans la console et sélectionnez Jetons d'authentification sous Ressources.
Sélectionnez le bouton Générer un jeton et fournissez une description de
demo
pour le nouveau jeton.Une fois que vous avez généré le jeton, veillez à le copier et à l'enregistrer.
Connexion au référentiel Container Registry
Le tableau suivant fournit des exemples de valeurs utilisées dans les étapes suivantes de ce tutoriel.
Nom utilisateur | Espace réservé du tutoriel |
---|---|
REGISTRY_NAMESPACE | gse00015915 |
USERNAME | luna.user@e1ab5742-7e30-463a-9017-0b48fa54197e |
JETON | ]y#W_iS9GKC}4l1Gq9Fn |
OCIR_INSTANCE | iad.ocir.io |
-
Créez des variables d'environnement à utiliser dans la commande
podman login
.Créez les variables d'environnement
USER
etTOKEN
à l'aide du nom utilisateur et du jeton. Veillez à inclure<REGISTRY_NAMESPACE>
dans le nom utilisateur.export OCIR_INSTANCE="iad.ocir.io" export OCIR_NAMESPACE="gse00015915" export OCI_USERNAME="luna.user@e1ab5742-7e30-463a-9017-0b48fa54197e" export OCIR_USERNAME="$OCIR_NAMESPACE/$OCI_USERNAME" export OCI_USER_TOKEN="]y#W_iS9GKC}4l1Gq9Fn"
-
Connectez-vous au registre de conteneurs.
sudo -E podman login -u $OCIR_USERNAME -p $OCIR_USER_TOKEN $OCIR_INSTANCE
L'instance distante hérite automatiquement des informations d'identification d'authentification de l'instance client.
Poussez les images de plate-forme
Dans cet exemple, les URI finaux du référentiel avec des balises propres à la plate-forme sont les suivants :
docker://iad.ocir.io/gse00015915/demo/rasdash:0.3.4-arm64
docker://iad.ocir.io/gse00015915/demo/rasdash:0.3.4-amd64
Podman peut pousser des images locales vers des registres distants sans que l'image ait besoin d'être balisée au préalable.
-
Imprimez l'image
rasdash/0.3.4-arm64
locale.sudo -E podman push rasdash:0.3.4-arm64 docker://$OCIR_INSTANCE/$OCIR_NAMESPACE/demo/rasdash:0.3.4-arm64
-
Poussez l'image
rasdash:0.3.4-amd64
distante.sudo -E podman --remote push rasdash:0.3.4-amd64 docker://$OCIR_INSTANCE/$OCIR_NAMESPACE/demo/rasdash:0.3.4-amd64
-
Vérifiez la console Container Registry.
Remarque : la transmission d'une image distante ne génère pas de sortie locale. Consultez la console Container Registry pour la balise
rasdash:0.3.4-amd64
afin de vérifier si l'image a été propagée.Vous devez voir deux images dans la console Container Registry.
L'image
0.3.4-amd64
:L'image
0.3.4-arm64
:
Création et envoi d'une liste de manifestes dans le registre de conteneurs
Maintenant que vous avez deux images de plate-forme, il est temps de créer une liste de manifestes pour permettre aux exécutions de conteneur de sélectionner l'image appropriée pour leur plate-forme, qui est une combinaison du système d'exploitation et de l'architecture.
Comme la plupart des images de conteneur sont basées sur Linux, les utilisateurs font généralement référence à une image multiplateforme en tant qu'image multi-archives. Toutefois, il est également possible de combiner des images pouvant s'exécuter sous Windows, macOS et Linux en un seul manifeste.
-
Créez et renseignez le manifeste.
Créez une liste de manifestes locale sur l'instance de développeur cloud avec uniquement la version de l'application dans la balise.
sudo podman manifest create rasdash:0.3.4
Comme précédemment, la sortie de somme de contrôle est unique au manifeste que vous créez et ne correspondra pas à celle ci-dessus.
-
Examinez la liste des manifestes pour révéler ce que
mediaType
est utilisé et ses images membres.sudo podman manifest inspect rasdash:0.3.4
-
Ajoutez les deux images spécifiques à la plate-forme à la liste.
sudo -E podman manifest add rasdash:0.3.4 docker://$OCIR_INSTANCE/$OCIR_NAMESPACE/demo/rasdash:0.3.4-arm64
sudo -E podman manifest add rasdash:0.3.4 docker://$OCIR_INSTANCE/$OCIR_NAMESPACE/demo/rasdash:0.3.4-amd64
-
Examinez la liste des manifestes.
sudo podman manifest inspect rasdash:0.3.4
La sortie est plus intéressante après l'ajout des images.
Pour une compatibilité maximale, vous avez ajouté le paramètre
--format docker
à chaque commande de build, ce qui indique à Podman de créer l'image à l'aide de la spécification V2 du manifeste d'image Docker, du schéma 2 (v2s2
) au lieu de la spécification du manifeste d'image Open Container Initiative, que Podman utilisera par défaut.Etant donné que les manifestes utilisent la spécification
v2s2
, Podman utilise la spécificationv2s2
Manifest List associée au lieu de la Spécification Open Container Initiative Image Index.Les exécutions de conteneur par défaut utilisées par les services Kubernetes gérés basés sur le cloud, y compris Oracle Engine for Kubernetes (OKE) et les distributions Kubernetes auto-hébergées sur site, sont compatibles avec les deux spécifications.
-
Poussez la liste des manifestes dans Container Registry.
Maintenant que vous avez créé la liste des manifestes, vous pouvez la propager vers le référentiel Container Registry qui stocke les images propres à la plate-forme.
sudo -E podman manifest push --all rasdash:0.3.4 docker://$OCIR_INSTANCE/$OCIR_NAMESPACE/demo/rasdash:0.3.4
Cette action est une opération rapide car vous avez précédemment propagé les images propres à la plate-forme. Container Registry lie simplement la liste de manifestes aux images existantes.
-
Créez et exécutez l'image en local.
Vous pouvez désormais exécuter une instance de l'image localement et à distance à l'aide de la balise de liste de manifestes au lieu de la balise propre à la plate-forme.
sudo -E podman run --rm --detach --init --publish 5808:5808 $OCIR_INSTANCE/$OCIR_NAMESPACE/demo/rasdash:0.3.4
-
Créez et exécutez l'image à distance.
sudo -E podman --remote run --rm --detach --init --publish 5808:5808 $OCIR_INSTANCE/$OCIR_NAMESPACE/demo/rasdash:0.3.4
Test des images à l'aide d'un navigateur
Supposons que vous ayez créé les règles entrantes et les règles firewalld nécessaires sur les instances. Dans ce cas, vous devez pouvoir ouvrir votre navigateur et accéder à http://<PUBLIC_IP_ADDRESS_OF_ORACLE_CLOUD_DEVELOPER_INSTANCE>:5808
et http://<PUBLIC_IP_ADDRESS_OF_PODMAN_SERVER_INSTANCE>:5808
pour ouvrir l'application Web RasDash exécutée sur chaque instance.
Sinon, vous pouvez utiliser le transfert de port SSH comme précédemment en créant deux tunnels à partir de votre ordinateur local.
-
Ouvrez un tunnel SSH vers l'instance Oracle Cloud Developer.
ssh -L 5808:localhost:5808 -i <SSH_KEY> opc@<IP_ADDRESS_OF_ORACLE_CLOUD_DEVELOPER_INSTANCE>
Ouvrez un navigateur sur votre ordinateur local et accédez à
http://localhost:5808
pour visualiser l'application Web basée sur arm64 sur l'instance de développement cloud. -
Quittez la session de tunnel SSH.
-
Ouvrez un tunnel SSH vers l'instance de serveur Podman.
ssh -L 5808:localhost:5808 -i <SSH_KEY> opc@<IP_ADDRESS_OF_PODMAN_SERVER_INSTANCE>
Actualisez le navigateur sur votre ordinateur local en pointant vers
http://localhost:5808
pour afficher l'application Web basée sur amd64 sur l'instance de serveur Podman.
Etapes suivantes
A la fin de ce tutoriel, vous devez maintenant savoir comment créer des images que vous pouvez déployer à partir de référentiels OCIR privés et publics. Vous pouvez utiliser ces images à différents emplacements, tels qu'Oracle Engine for Kubernetes (OKE) ou Oracle Cloud Native Environment. Lorsque vous déployez vos images vers des hôtes en dehors d'Oracle Cloud Infrastructure, y compris Podman Desktop pour Mac ou Windows, vous devez vous assurer que le référentiel est public.
Liens connexes
- Documentation Oracle Linux
- Guide de l'utilisateur Oracle Linux Podman
- Centre de formation Oracle Linux
Ressources de formation supplémentaires
Explorez d'autres ateliers sur le site docs.oracle.com/learn ou accédez à d'autres contenus d'apprentissage gratuits sur le canal Oracle Learning YouTube. En outre, visitez le site education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour obtenir de la documentation sur le produit, consultez Oracle Help Center.
Build Multi-Platform Container Images Using Podman on Oracle Linux
F50000-04