Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Construire des images de conteneurs AL2 023 simples
L'image du conteneur AL2 023 est créée à partir des mêmes composants logiciels que ceux inclus dans le AL2 AMI 023. Il inclut un logiciel qui permet à la couche de conteneur de base de se comporter de la même manière qu'une exécution sur une EC2 instance Amazon, tel que le gestionnaire de packagesdnf
. Cette section explique comment créer un conteneur à partir de zéro qui inclut uniquement le strict minimum de dépendances nécessaires à une application.
Note
Les images de conteneur AL2 023 standard conviennent à la plupart des cas d'utilisation. L'utilisation de l'image de conteneur standard facilite la création par-dessus votre image. Une image de conteneur simplifiée complique la création à partir de votre image.
Pour créer un conteneur avec le strict minimum de dépendances pour une application
-
Déterminez les dépendances de votre environnement d'exécution. Elles varient en fonction de votre application.
-
Construisez un
Dockerfile
/Containerfile
qui génèreFROM scratch
. L'exemple suivant deDockerfile
peut être utilisé pour générer un conteneur contenant uniquement le shellbash
et ses dépendances.FROM public.ecr.aws/amazonlinux/amazonlinux:2023 as build RUN mkdir /sysroot RUN dnf --releasever=$(rpm -q system-release --qf '%{VERSION}') \ --installroot /sysroot \ -y \ --setopt=install_weak_deps=False \ install bash FROM scratch COPY --from=build /sysroot / WORKDIR / ENTRYPOINT ["/bin/bash"]
-
Ce
Dockerfile
fonctionne comme suit :-
Démarrage d'un conteneur AL2 023 nommé
build
. Ce conteneur sera utilisé pour amorcer le conteneur élémentaire. Il n'est pas déployé lui-même, mais génère le conteneur à déployer. -
Il crée le répertoire
/sysroot
. Ce répertoire sera l'emplacement où le conteneurbuild
installera les dépendances nécessaires au conteneur élémentaire. Dans une étape ultérieure, le chemin/sysroot
sera empaqueté comme répertoire racine de notre image élémentaire.C'est
dnf
en utilisant l'--installroot
option de cette manière que nous créons les AL2 023 autres images. Il s'agit d'une fonctionnalité dednf
qui permet aux programmes d'installation et aux outils de création d'images de fonctionner. -
Il invoque
dnf
pour installer des packages dans/sysroot
.La commande
rpm -q system-release --qf '%{VERSION}'
interroge (-q
) le packagesystem-release
, en définissant le format de requête (--qf
) pour fournir en sortie la version du package interrogé (la variable%{VERSION}
est la variablerpm
correspondant à la version duRPM
).En définissant l'argument
--releasever
dednf
sur la version desystem-release
dans le conteneurbuild
, ceDockerfile
peut être utilisé pour reconstruire le conteneur élémentaire chaque fois qu'une image de base de conteneur mise à jour d'Amazon Linux est publiée.Il est possible de définir n'importe quelle version
--releasever
d'Amazon Linux 2023, telle que 2023.6.20241010. Cela signifierait que lebuild
conteneur fonctionnerait sous la dernière version AL2 023, mais que le conteneur barebones serait créé à partir du 2023.6.20241010, quelle que soit la version 023 actuelle. AL2L'option de configuration
--setopt=install_weak_deps=False
indique àdnf
d'installer uniquement les dépendances requises plutôt que celles recommandées ou suggérées. -
Il copie le système installé à la racine d'un conteneur vierge (
FROM scratch
). -
Il définit
ENTRYPOINT
comme binaire souhaité, dans ce cas/bin/bash
.
-
-
-
Créez un répertoire vide et ajoutez le contenu de l'exemple à l'étape 2 dans un fichier nommé
Dockerfile
.$
mkdir al2023-barebones-bash-example
$
cd al2023-barebones-bash-example
$
cat > Dockerfile <<EOF FROM public.ecr.aws/amazonlinux/amazonlinux:2023 as build RUN mkdir /sysroot RUN dnf --releasever=$(rpm -q system-release --qf '%{VERSION}') \ --installroot /sysroot \ -y \ --setopt=install_weak_deps=False \ install bash && dnf --installroot /sysroot clean all FROM scratch COPY --from=build /sysroot / WORKDIR / ENTRYPOINT ["/bin/bash"] EOF
-
Générez le conteneur en exécutant la commande suivante.
$
docker build -t al2023-barebones-bash-example
-
Exécutez le conteneur à l'aide de la commande suivante pour voir à quel point un conteneur dédié à
bash
est minimal.$
docker run -it --rm al2023-barebones-bash-example
bash-5.2#rpm
bash: rpm: command not found bash-5.2#du -sh /usr/
bash: du: command not found bash-5.2#ls
bash: ls: command not found bash-5.2#echo /bin/*
/bin/alias /bin/bash /bin/bashbug /bin/bashbug-64 /bin/bg /bin/catchsegv /bin/cd /bin/command /bin/fc /bin/fg /bin/gencat /bin/getconf /bin/getent /bin/getopts /bin/hash /bin/iconv /bin/jobs /bin/ld.so /bin/ldd /bin/locale /bin/localedef /bin/pldd /bin/read /bin/sh /bin/sotruss /bin/sprof /bin/type /bin/tzselect /bin/ulimit /bin/umask /bin/unalias /bin/wait /bin/zdump
Pour un exemple plus pratique, la procédure suivante crée un conteneur pour une application C qui affiche Hello World!
.
-
Créez un répertoire vide et ajoutez le code source C et
Dockerfile
.$
mkdir al2023-barebones-c-hello-world-example
$
cd al2023-barebones-c-hello-world-example
$
cat > hello-world.c <<EOF #include <stdio.h> int main(void) { printf("Hello World!\n"); return 0; } EOF
$
cat > Dockerfile <<EOF FROM public.ecr.aws/amazonlinux/amazonlinux:2023 as build COPY hello-world.c / RUN dnf -y install gcc RUN gcc -o hello-world hello-world.c RUN mkdir /sysroot RUN mv hello-world /sysroot/ RUN dnf --releasever=$(rpm -q system-release --qf '%{VERSION}') \ --installroot /sysroot \ -y \ --setopt=install_weak_deps=False \ install glibc && dnf --installroot /sysroot clean all FROM scratch COPY --from=build /sysroot / WORKDIR / ENTRYPOINT ["/hello-world"] EOF
-
Générez le conteneur à l'aide de la commande suivante.
$
docker build -t al2023-barebones-c-hello-world-example .
-
Exécutez le conteneur à l'aide de la commande suivante.
$
docker run -it --rm al2023-barebones-c-hello-world-example
Hello World!