GNU/Linux >> Tutoriels Linux >  >> Linux

Ajoutez ces 4 outils à votre boîte à outils de conteneur Linux

Lorsque vous avez besoin du bon outil, rien de tel que d'aller à votre quincaillerie locale et de parcourir les allées. C'est génial de descendre l'allée des outils à main et de vérifier tous les tournevis, marteaux, clés hexagonales, rubans à mesurer, et plus encore. Juste au moment où vous pensez avoir découvert le bon outil, une pensée vous vient, si je peux le faire avec un outil à main, je peux vraiment le faire avec l'outil électrique parfait !

C'est du moins ce que ma femme me dit, et vous voyez, c'est la personne la plus pratique de notre famille. Mes outils de prédilection sont les outils technologiques. Donnez-moi une allée de cartes vidéo dans un magasin d'informatique, et je serai un campeur heureux.

Récemment, j'ai fait une démonstration lors de la réunion de la communauté Podman montrant certains des nouveaux outils de conteneur les plus brillants que nous avons développés pour Podman et Buildah. Nous avons eu de nombreuses annonces importantes avec Podman v3.0, donc j'ai pensé que certains de ces outils auraient pu être éclipsés. Comme j'ai reçu de bons commentaires sur cette démonstration, j'ai pensé qu'un post de suivi pourrait également être utile. Plongeons-nous donc et sortons ces nouveaux outils de conteneurs brillants.

Modifiez le premier FROM de ​​votre fichier conteneur

Il y a un nouveau --from option dans le buildah bud commande qui fera bientôt son chemin dans Podman v3.0. Cette option vous permet de remplacer la valeur associée au premier - et uniquement au premier - FROM déclaration dans le fichier conteneur. Par exemple, si nous avons ce Containerfile :

# cat ~/Containerfile.multifrom
FROM fedora as builder
FROM busybox
COPY --from=builder /bin/df /tmp/df_tester

Nous pouvons faire une première exécution, et cela montrera que nous avons utilisé le fedora l'image du conteneur. Puis la busybox l'image est utilisée et enfin copier les fichiers de fedora est /bin/df répertoire dans la busybox /tmp/df_tester des images répertoire.

# buildah bud -t multi -f ~/Containerfile.multifrom .
STEP 1: FROM fedora AS builder
Resolved "fedora" as an alias (/etc/containers/registries.conf.d/shortnames.conf)
Getting image source signatures
Copying blob 157ab8011454 done  
Copying config 9f2a560376 done  
Writing manifest to image destination
Storing signatures
--> 9f2a5603764
STEP 2: FROM busybox
Resolved "busybox" as an alias (/root/.config/containers/short-name-aliases.conf)
Getting image source signatures
Copying blob 4c892f00285e done  
Copying config 22667f5368 done  
Writing manifest to image destination
Storing signatures
STEP 3: COPY --from=builder /bin/df /tmp/df_tester
STEP 4: COMMIT multi
Getting image source signatures
Copying blob 6b245f040973 skipped: already exists  
Copying blob 9b68b051b385 done  
Copying config 187c956137 done  
Writing manifest to image destination
Storing signatures
--> 187c9561378
187c9561378efb043dfd0e8fa9c0afbdc0cf2faeb244e0dd7f2003321feab524

Imaginez maintenant une situation plus réelle, une situation où votre DE pointe vers une image personnalisée avec une variété de balises pour différentes versions de l'image. Ce serait bien, surtout dans un environnement CI, de simplement transmettre l'image de conteneur que vous souhaitez utiliser lors de la prochaine exécution plutôt que de recréer l'intégralité du Dockerfile. C'est le travail qui --from remplit.

Dans cet exemple, nous allons exécuter le même bud commande, mais cette fois nous ajouterons --from alpine:latest .

# buildah bud -t multi -f ~/Containerfile.multifrom --from alpine:latest .
STEP 1: FROM alpine:latest AS builder
Resolved "alpine" as an alias (/etc/containers/registries.conf.d/shortnames.conf)
Getting image source signatures
Copying blob 4c0d98bf9879 done  
Copying config e50c909a8d done  
Writing manifest to image destination
Storing signatures
--> e50c909a8df
STEP 2: FROM busybox
STEP 3: COPY --from=builder /bin/df /tmp/df_tester
STEP 4: COMMIT multi
Getting image source signatures
Copying blob 6b245f040973 skipped: already exists  
Copying blob b498f23d5c32 done  
Copying config d7e92107ed done  
Writing manifest to image destination
Storing signatures
--> d7e92107edf
d7e92107edf42f046f6a7faddade4825ef1c2361ae21eb0ac3694871dcdb496c

Vous pouvez voir que le alpine:latest l'image du conteneur a été utilisée pour la première fois, et maintenant après la busybox l'image a été créée, les fichiers du /bin/df d'alpine ont été copiés dans le /tmp/df_tester répertoire sur busybox . La valeur du premier FROM L'instruction dans le Containerfile a été remplacée par l'argument que nous avons passé avec le --from option.

[ Vous aimerez peut-être aussi lire : Conteneurs sans racine utilisant Podman ]

Accepter les entrées lors d'une compilation

Un autre nouvel outil est le --stdin option qui va de pair avec buildah bud ou podman build (à partir de Podman v3.0). Lorsque vous utilisez cette option, le processus de génération s'interrompra et demandera une entrée au clavier si le processus en cours d'exécution pendant la procédure de génération le demande.

Jetez un œil à ce fichier conteneur :

# cat /root/Containerfile.stdin
FROM ubi8
RUN yum install iputils
RUN touch /tmp/done

Ce Containerfile utilise le ubi8 image puis installe iputils . Comme vous pouvez probablement le deviner, le yum commande nous demandera de vérifier l'installation de iputils . Regardons ce qui se passe sans le --stdin option en jeu.

# cat /root/Containerfile.stdin
FROM ubi8
RUN yum install iputils
RUN touch /tmp/done

# cat /root/Containerfile.stdin
FROM ubi8
RUN yum install iputils
RUN touch /tmp/done

# buildah bud -t mystdin -f ~/Containerfile.stdin .
STEP 1: FROM ubi8
Resolved "ubi8" as an alias (/etc/containers/registries.conf.d/shortnames.conf)
Getting image source signatures
Copying blob d9e72d058dc5 done  
Copying blob cca21acb641a done  
Copying config 3269c37eae done  
Writing manifest to image destination
Storing signatures
STEP 2: RUN yum install iputils
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.

Red Hat Universal Base Image 8 (RPMs) - BaseOS  2.5 MB/s | 774 kB     00:00    
Red Hat Universal Base Image 8 (RPMs) - AppStre 7.6 MB/s | 5.0 MB     00:00    
Red Hat Universal Base Image 8 (RPMs) - CodeRea  75 kB/s |  13 kB     00:00    
Dependencies resolved.
================================================================================
 Package        Architecture  Version                 Repository           Size
================================================================================
Installing:
 iputils        x86_64        20180629-2.el8          ubi-8-baseos        149 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 149 k
Installed size: 361 k
Is this ok [y/N]: Operation aborted.
error building at STEP "RUN yum install iputils": error while running runtime: exit status

Quand yum iputils installé , il a demandé une confirmation et a échoué car il n'a jamais reçu de réponse. Regardons maintenant ce qui se passe avec le --stdin option en jeu.

# buildah bud -t mystdin --stdin -f ~/Containerfile.stdin .
STEP 1: FROM ubi8
STEP 2: RUN yum install iputils
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.

Red Hat Universal Base Image 8 (RPMs) - BaseOS  2.8 MB/s | 774 kB     00:00    
Red Hat Universal Base Image 8 (RPMs) - AppStre 7.5 MB/s | 5.0 MB     00:00    
Red Hat Universal Base Image 8 (RPMs) - CodeRea  86 kB/s |  13 kB     00:00    
Dependencies resolved.
================================================================================
 Package        Architecture  Version                 Repository           Size
================================================================================
Installing:
 iputils        x86_64        20180629-2.el8          ubi-8-baseos        149 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 149 k
Installed size: 361 k
Is this ok [y/N]: y

Cela ne se voit pas aussi bien dans un blog qu'en personne, mais le processus de construction s'arrête à la ligne Est-ce que ça va [y/N] : et j'ai entré le caractère y et la construction s'est poursuivie (voir la sortie ci-dessous).

Downloading Packages:
iputils-20180629-2.el8.x86_64.rpm               972 kB/s | 149 kB     00:00    
--------------------------------------------------------------------------------
Total                                           952 kB/s | 149 kB     00:00    
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1
  Installing       : iputils-20180629-2.el8.x86_64                          1/1
  Running scriptlet: iputils-20180629-2.el8.x86_64                          1/1
  Verifying        : iputils-20180629-2.el8.x86_64                          1/1
Installed products updated.

Installed:
  iputils-20180629-2.el8.x86_64                                                

Complete!
STEP 3: RUN touch /tmp/done
STEP 4: COMMIT mystdin
Getting image source signatures
Copying blob 92538e92de29 skipped: already exists  
Copying blob eb7bf34352ca skipped: already exists  
Copying blob f9ed641975cb done  
Copying config b2742f08a7 done  
Writing manifest to image destination
Storing signatures
--> b2742f08a7a
b2742f08a7ae2cb76a2cd0c481f2d2d66b303379d23e5260577ea09476a8a486

Ceci est un autre exemple simpliste, d'autant plus que vous pourriez ajouter un -y argument du yum commande. Pourtant, il peut y avoir d'autres commandes que vous aimeriez exécuter pendant le processus de construction et pour lesquelles vous aimeriez obtenir facilement une entrée plus importante.

Rechercher les balises d'une image de conteneur

Cet outil suivant, relativement nouveau pour Podman, affiche toutes les balises d'une image de conteneur sur un registre. J'utilise des images sur quay.io pour Buildah, Podman et Skopeo, et parfois je veux utiliser une version particulière de l'un des projets et je ne me souviens plus laquelle est disponible. Si vous connaissez Skopeo, cela fonctionne très bien dans cet espace. Mais si vous n'avez pas installé Skopeo localement, ou ne pouvez pas pour une raison quelconque, alors le nouveau --list-tags option pour la podman search commande est votre ticket.

Examinons donc toutes les balises que l'image stable de Podman a sur quay.io :

# podman search --list-tags quay.io/podman/stable
NAME                   TAG
quay.io/podman/stable  v1.4.4
quay.io/podman/stable  v1.4.2
quay.io/podman/stable  v1.5.1
quay.io/podman/stable  v1.5.0
quay.io/podman/stable  v1.6.2
quay.io/podman/stable  auto
quay.io/podman/stable  v1.6
quay.io/podman/stable  v1.9.0
quay.io/podman/stable  v1.9.1
quay.io/podman/stable  v2.0.2
quay.io/podman/stable  v2.0.6
quay.io/podman/stable  v2.1.1
quay.io/podman/stable  master
quay.io/podman/stable  latest

Rapide, facile et pratique.

Utiliser l'image du conteneur Skopeo

Cet outil est une sorte de ying aux derniers outils yang . Le projet Skopeo est rempli de nombreux outils à utiliser avec les images de conteneurs. Il vous montrera également la liste des balises qu'une image a sur un registre. Skopeo peut également afficher des informations sur un registre, vous permettre de copier une image de conteneur entre des mécanismes de stockage, y compris des registres, de synchroniser un registre de conteneurs, de supprimer une image d'un registre, etc.

Maintenant, je ne vais pas plonger dans chacune de ces commandes Skopeo ici. Je vais juste faire la fonction de recherche pour afficher les balises. La torsion est que je vais seulement utiliser Podman pour exécuter le quay.io/skopeo/stable:latest image, supprimant ainsi la nécessité d'installer Skopeo tout en conservant toutes ses fonctionnalités disponibles.

Listons donc les balises du quay.io/podman/stable:latest à nouveau l'image, mais cette fois via l'image du conteneur Skopeo :

# podman run quay.io/skopeo/stable:latest list-tags docker://quay.io/podman/stable
Trying to pull quay.io/skopeo/stable:latest...
Getting image source signatures
Copying blob 6629904ed3b7 done  
Copying blob 2b74ed94761c done  
Copying blob 692512e477a1 done  
Copying blob 166a3cbbffd1 done  
Copying blob b1e90be38d32 done  
Copying blob a5dc7d6cfd62 done  
Copying blob a3ed95caeb02 done  
Copying blob a3ed95caeb02 done  
Writing manifest to image destination
Storing signatures
{
    "Repository": "quay.io/podman/stable",
    "Tags": [
        "v1.4.4",
        "v1.4.2",
        "v1.5.1",
        "v1.5.0",
        "v1.6.2",
        "auto",
        "v1.6",
        "v1.9.0",
        "v1.9.1",
        "v2.0.2",
        "v2.0.6",
        "v2.1.1",
        "master",
        "latest"
    ]
}

La première fois que vous exécutez cette commande, elle est plus lente que l'équivalent de Podman car vous engagez le coût du skopeo l'image du conteneur est extraite. Après cela, la vitesse est équivalente sur les exécutions secondaires, et vous pouvez ensuite effectuer toute autre commande Skopeo que vous souhaitez également.

Je vous laisse explorer davantage par vous-même, et je vous suggère de commencer votre exploration avec Comment faire fonctionner Skopeo dans un conteneur de Valentin Rothberg . Je pense que l'image de conteneur Skopeo est l'outil le plus brillant de ma boîte à outils de conteneur.

[ Vous débutez avec les conteneurs ? Découvrez ce cours gratuit. Déploiement d'applications conteneurisées :présentation technique. ]

Tous les nouveaux outils brillants

Maintenant, ma femme peut toujours avoir tous ses outils brillants de la quincaillerie locale, et je garderai mes nouveaux outils de conteneur dans ma boîte à outils virtuelle. J'espère que vous trouverez ces nouvelles commandes et options utiles dans votre propre boîte à outils.


Linux
  1. Construisez votre propre conteneur sur Linux

  2. 4 outils Linux pour effacer vos données

  3. Ajouter des vidéos comme fond d'écran sur votre bureau Linux

  4. Quelle est la différence entre un conteneur Linux et une image ?

  5. Ajouter un horodatage à l'image à partir de la ligne de commande Linux

Protégez votre confidentialité en ligne avec ces distributions Linux

Installez les polices Nerd pour ajouter des glyphes dans votre code sous Linux

Outils Linux :du contre df

Comment ajouter un filigrane d'image dans GIMP sous Linux

Débuter avec Linux Mint ? Focus sur ces trois outils

Linux pour les entreprises :développez votre entreprise avec ces applications