# BUILDAH: Lab 1 contruction d'un simple serveur http ^ Objet | Création d'une conteneur http | ^ Niveau requis | débutant, avisé | ^ Débutant, à savoir | | ^ Suivi | :DRAFT: | Cet exemple ajoute un service Web (httpd) à un conteneur et le configure pour son exécution. Dans l'exemple, au lieu de valider l'image dans Buildah (conteneurs-storage stocké localement dans /var/lib/containers), nous expliquons comment valider l'image afin qu'elle puisse être gérée par le service Docker local (docker-daemon qui stocke localement dans /var/lib/docker). Vous aurier simplement pu l'envoyer facilement à Buildah, ce qui vous permettrait de le transmettre ensuite à un service Docker (docker), à un référentiel OSTree local (ostree) ou à un autre stockage (oci) compatible OCI. (Taper man buildah pour plus de détails.) ## Créer un conteneur de travail: ``` # buildah from scratch working-container ``` Cela crée juste un conteneur vide (aucune image) que l'on peut monter comme suit: ``` # scratchmnt=$(buildah mount working-container) # echo $scratchmnt /var/lib/containers/storage/devicemapper/mnt/cc92011e9a2b077d03a97c0809f1f3e7fef0f29bdc6ab5e86b85430ec77b2bf6/rootfss ``` ## Installer le serveur Initialiser une base de données RPM dans l'image de travail et ajouter le paquetage redhat-release (qui inclut d'autres fichiers nécessaires au bon fonctionnement des RPM): ``` # rpm --root $scratchmnt --initdb # yum install yum-utils (if not already installed) # yumdownloader --destdir=/tmp redhat-release-server # rpm --root $scratchmnt -ihv /tmp/redhat-release-server*.rpm ``` Installer le service httpd dans le répertoire scratch: ``` # yum install -y --installroot=$scratchmnt httpd ``` Ajouter du texte à un fichier index.html dans le conteneur pour pouvoir le tester ultérieurement: ``` # echo "Your httpd container from scratch worked." > $scratchmnt/var/www/html/index.html ``` Au lieu d’exécuter httpd en tant que service init, définisser quelques options de configuration de buildah pour exécuter le démon httpd directement à partir du conteneur: ``` # buildah config --cmd "/usr/sbin/httpd -DFOREGROUND" working-container # buildah config --port 80/tcp working-container ``` ## Enregistrer la configuration ``` # buildah commit working-container docker-daemon:myhttpd:latest ``` Par défaut, la commande `buildah commit` ajoute le nom du référentiel docker.io au nom de l'image et la copie dans la zone de stockage du service Docker local (/var/lib/docker). Pour ajouter le référentiel à un registre local tout en désactivant la vérification tls utiliser:\\ \\ `buildah commit --tls-verify=false containerID docker://localhost:5000/imageId` On peut utiliser l'ID d'image pour exécuter la nouvelle image en tant que conteneur à l'aide de la commande docker: ``` # docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/myhttpd latest 47c0795d7b0e 9 minutes ago 665.6 MB # docker run -p 8080:80 -d --name httpd-server 47c0795d7b0e # curl localhost:8080 Your httpd container from scratch worked. ``` ## Exécuter un conteneur avec Buildah Pour vérifier que l'image que vous aver construite précédemment fonctionne, vous dever créer un conteneur de travail à partir de l'image, puis utiliser buildah run pour exécuter le conteneur de travail. ``` # buildah from myecho myecho-working-container # buildah containers CONTAINER ID BUILDER IMAGE ID IMAGE NAME CONTAINER NAME dc8f21af4a47 * 1456eedf8101 registry.access.redhat.com/rhel7/rhel-minimal:latest rhel-minimal-working-container 6d1ffccb557d * ab230ac5aba3 docker.io/library/myecho:latest myecho-working-container # buildah run myecho-working-container This container works! ``` Les étapes de la construction ont utilisé l’image (myecho) pour créer un conteneur (myecho-working-container). Après cela, les conteneurs Buildah ont montré que le conteneur existe et Buildah a exécuté le conteneur, produisant la sortie: Ce conteneur fonctionne!