Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Creación de imágenes de contenedores básicas AL2023
La imagen de contenedor de AL2023 se construye desde los mismos componentes de software que se incluyen en la AMI de AL2023. Incluye un software que permite que la capa base del contenedor se comporte de manera similar a como lo haría en una instancia de Amazon EC2, como el dnf del administrador de paquetes. En esta sección se explica cómo se puede crear un contenedor desde cero que incluya solo las dependencias mínimas necesarias para una aplicación.
nota
Las imágenes de AL2023 contenedores estándar son adecuadas para la mayoría de los casos de uso. El uso de la imagen de contenedor estándar facilita la creación sobre la imagen. Una imagen de contenedor básica dificulta la creación de imágenes basadas en ella.
Creación de un contenedor con las dependencias básicas mínimas para una aplicación
-
Determine las dependencias del tiempo de ejecución. Esto variará en función de la aplicación.
-
Cree un
Dockerfile/Containerfileque se genereFROM scratch. El siguiente ejemplo de unDockerfilese puede utilizar para crear un contenedor que contenga solo el intérprete de comandosbashy sus dependencias.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"]-
Este
Dockerfilefunciona de la siguiente manera:-
Iniciar un AL2023 contenedor llamado
build. Este contenedor se utilizará para arrancar el contenedor básico. Este contenedor no se implementa por sí mismo, sino que genera el contenedor que se va a implementar. -
Creando el directorio
/sysroot. En este directorio, el contenedorbuildinstalará las dependencias necesarias para el contenedor básico. En un paso posterior, la ruta/sysrootse empaquetará para que sea el directorio raíz de nuestra imagen básica.Usando la
--installrootopción de estadnfmanera es como creamos las otras AL2023 imágenes. Es una característica dednfque permite que funcionen los instaladores y las herramientas de creación de imágenes. -
Invocación a
dnfpara instalar paquetes en/sysroot.El comando
rpm -q system-release --qf '%{VERSION}'consulta (-q) el paquetesystem-releasey establece el formato de consulta (--qf) para imprimir la versión del paquete que se está consultando (la variable%{VERSION}es la variablerpmde la versión deRPM).Al establecer el argumento
--releaseverdednfen la versión delsystem-releaseen el contenedorbuild, esteDockerfilese puede utilizar para reconstruir el contenedor básico siempre que se publique una imagen base de contenedores actualizada de Amazon Linux.Es posible configurarlo en cualquier versión de
--releaseverAmazon Linux 2023, como la 2023.10.20260216. De este modo, elbuildcontenedor se ejecutaría como la AL2023 versión más reciente, pero se compilaría el contenedor básico a partir de la 2023.10.20260216, independientemente de cuál fuera la versión actual. AL2023La opción de configuración
--setopt=install_weak_deps=Falseindica adnfque solo hay que instalar las dependencias que sean necesarias y no las recomendadas o sugeridas. -
Copia del sistema instalado en la raíz de un contenedor vacío (
FROM scratch). -
Definición de
ENTRYPOINTcomo el binario deseado, en este caso,/bin/bash.
-
-
-
Cree un directorio vacío y agregue el contenido del ejemplo del paso 2 a un archivo denominado
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 -
Cree el contenedor ejecutando el siguiente comando.
$docker build -t al2023-barebones-bash-example -
Ejecute el contenedor con el siguiente comando para ver qué tan mínimo es un contenedor de
bashexclusivo.$docker run -it --rm al2023-barebones-bash-examplebash-5.2#rpmbash: rpm: command not found bash-5.2#du -sh /usr/bash: du: command not found bash-5.2#lsbash: 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
Para obtener un ejemplo más práctico, el siguiente procedimiento crea un contenedor para una aplicación en C que muestra Hello World!.
-
Cree un directorio vacío y agregue el código fuente C y
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 -
Cree el contenedor con el siguiente comando.
$docker build -t al2023-barebones-c-hello-world-example . -
Ejecute el contenedor con el siguiente comando.
$docker run -it --rm al2023-barebones-c-hello-world-exampleHello World!