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 básicas de contenedores de 023 AL2
La imagen del contenedor AL2 023 se crea a partir de los mismos componentes de software que se incluyen en el 023. AL2 AMI Incluye un software que permite que la capa base de contenedores se comporte de forma similar a como se ejecuta en una EC2 instancia de Amazon, como el administrador de paquetesdnf
. En esta sección se explica cómo crear un contenedor desde cero que incluya solo las dependencias mínimas necesarias para una aplicación.
nota
Las imágenes del contenedor AL2 023 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 hace que sea más difícil construirla sobre la imagen.
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
/Containerfile
que se genereFROM scratch
. El siguiente ejemplo de unDockerfile
se puede utilizar para crear un contenedor que contenga sólo el intérprete de comandosbash
y 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
Dockerfile
funciona de la siguiente manera:-
Iniciar un contenedor AL2 023 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 contenedorbuild
instalará las dependencias necesarias para el contenedor básico. En un paso posterior, la ruta/sysroot
se empaquetará para que sea el directorio raíz de nuestra imagen básica.Usando la
--installroot
opción de estadnf
manera es como creamos las otras AL2 023 imágenes. Es una característica dednf
que permite que funcionen los instaladores y las herramientas de creación de imágenes. -
Invocación a
dnf
para instalar paquetes en/sysroot
.El comando
rpm -q system-release --qf '%{VERSION}'
consulta (-q
) el paquetesystem-release
y establece el formato de consulta (--qf
) para imprimir la versión del paquete que se está consultando (la variable%{VERSION}
es la variablerpm
de la versión deRPM
).Al establecer el argumento
--releasever
dednf
en la versión delsystem-release
en el contenedorbuild
, esteDockerfile
se 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
--releasever
Amazon Linux 2023, como la 2023.6.20241010. De este modo, elbuild
contenedor se ejecutaría como la versión AL2 023 más reciente, pero crearía el contenedor básico a partir de la 2023.6.20241010, independientemente de cuál fuera la versión 023 actual. AL2La opción de configuración
--setopt=install_weak_deps=False
indica adnf
que sólo 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
ENTRYPOINT
como 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
bash
exclusivo.$
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
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-example
Hello World!