Creación de una imagen de contenedor para utilizarla en Amazon ECS
Amazon ECS utiliza imágenes de Docker en las definiciones de tareas para lanzar contenedores. Docker es una tecnología que brinda herramientas para crear, ejecutar, probar e implementar aplicaciones distribuidas en contenedores.
El propósito de los pasos descritos aquí es guiarlo a través de la creación de su primera imagen de Docker y enviarla a Amazon ECR, que es un registro de contenedores, para utilizarla en las definiciones de tareas de Amazon ECS. Este tutorial presupone que el lector posee conocimientos básicos sobre Docker y su funcionamiento. Para obtener más información sobre Docker, consulte ¿Qué es Docker?
Requisitos previos
Antes de comenzar, asegúrese de que se cumplen los siguientes requisitos previos:
-
Asegúrese de que ha completado los pasos de configuración de Amazon ECR. Para obtener más información, consulte Moving an image through its lifecycle in Amazon ECR en la Guía del usuario de Amazon Elastic Container Registry.
-
El usuario tiene los permisos de IAM requeridos para tener acceso y usar el servicio de Amazon ECR. Para obtener más información, consulte Políticas administradas de Amazon ECR.
-
Tiene Docker instalado. Para los pasos de instalación de Docker para Amazon Linux 2, consulte Instalación de Docker en AL2023. Para los demás sistemas operativos, consulte la documentación de Docker en Descripción general de Docker de Escritorio
. -
Tener instalada y configurada la AWS CLI. Para obtener más información, consulte Instalación o actualización de la versión más reciente de la AWS CLI en la Guía del usuario de AWS Command Line Interface.
Si no necesita o tiene un entorno de desarrollo local y prefiere utilizar una instancia de Amazon EC2 para utilizar Docker, siga estos pasos para lanzar una instancia de Amazon EC2 usando Amazon Linux 2 e instalar Docker Engine y la CLI de Docker.
Docker está disponible en muchos sistemas operativos diferentes, incluidas las distribuciones de Linux más modernas, como Ubuntu, e incluso en macOS y Windows. Para obtener más información sobre cómo instalar Docker en su sistema operativo concreto, consulte la guía de instalación de Docker
No necesita un sistema de desarrollo local para usar Docker. Si ya utiliza Amazon EC2, puede lanzar una instancia de Amazon Linux 2023 e instalar Docker para empezar.
Si ya tiene Docker instalado, pase a Creación de una imagen de Docker.
Instalación de Docker en una instancia de Amazon EC2 mediante una AMI de Amazon Linux 2023
-
Lance una instancia con la AMI de Amazon Linux 2023. Para obtener más información, consulte Inicialización de una instancia de EC2 mediante el asistente de inicialización de instancias de la consola en la Guía del usuario de Amazon EC2.
-
Conecte con la instancia . Para obtener más información, consulte Conexión con instancias de EC2 en la Guía del usuario de Amazon EC2.
-
Actualice la caché de paquetes y los paquetes instalados en la instancia.
sudo yum update -y
-
Instale el paquete de Community Edition de Docker más reciente.
sudo yum install docker
-
Abra el servicio de Docker.
sudo service docker start
-
Agregue el
ec2-user
al grupodocker
para que pueda ejecutar comandos de Docker sin usarsudo
.sudo usermod -a -G docker ec2-user
-
Cierre sesión y vuelva a iniciarla para actualizar los nuevos permisos de grupo de
docker
. Para ello, cierre la ventana de su terminal de SSH actual y vuelva a conectarse a la instancia en una ventana nueva. De esta forma, la nueva sesión de SSH tendrá los permisos de grupo dedocker
adecuados. -
Compruebe que el
ec2-user
puede ejecutar comandos de Docker sinsudo
.docker info
nota
En algunos casos, es posible que tenga que reiniciar su instancia para que el
ec2-user
tenga los permisos necesarios para acceder al daemon de Docker. Intente reiniciar su instancia si ve el siguiente error:Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Creación de una imagen de Docker
Las definiciones de tareas de Amazon ECS utilizan imágenes de Docker para lanzar contenedores en las instancias de contenedor de los clústeres. En esta sección, va a crear una imagen de Docker de una aplicación web simple y la va a probar en su sistema local o en la instancia de Amazon EC2. Luego, enviará la imagen a un registro de contenedores de Amazon ECR para poder utilizarla en una definición de tarea de Amazon ECS.
Creación de una imagen Docker de una aplicación web simple
-
Cree un archivo denominado
Dockerfile
. Un Dockerfile es un manifiesto que describe la imagen base para su imagen Docker y qué desea instalar y que se ejecute en ella. Para obtener más información acerca de los archivos Docker, consulte Docker Reference. touch Dockerfile
-
Edite el
Dockerfile
que acaba de crear y agregue el siguiente contenido.FROM public.ecr.aws/amazonlinux/amazonlinux:latest # Update installed packages and install Apache RUN yum update -y && \ yum install -y httpd # Write hello world message RUN echo 'Hello World!' > /var/www/html/index.html # Configure Apache RUN echo 'mkdir -p /var/run/httpd' >> /root/run_apache.sh && \ echo 'mkdir -p /var/lock/httpd' >> /root/run_apache.sh && \ echo '/usr/sbin/httpd -D FOREGROUND' >> /root/run_apache.sh && \ chmod 755 /root/run_apache.sh EXPOSE 80 CMD /root/run_apache.sh
Este Dockerfile utiliza la imagen pública de Amazon Linux 2 alojada en Amazon ECR Public. Las instrucciones
RUN
actualizan la caché del paquete, instalan algunos paquetes de software para el servidor web y, a continuación, escriben el contenido “Hello World!”. en la raíz de documentos del servidor web. La instrucciónEXPOSE
significa que el puerto 80 del contenedor es el que está escuchando y la instrucciónCMD
inicia el servidor web. -
Cree la imagen Docker desde el Dockerfile.
nota
Algunas versiones de Docker pueden requerir la ruta completa a su Dockerfile en el siguiente comando en lugar de la ruta relativa que se muestra a continuación.
Si ejecuta el comando en MacOS M1/Mx-chip, utilice la opción de plataforma “--platform linux/amd64”.
docker build -t hello-world .
-
Incluya la imagen de su contenedor.
docker images --filter reference=hello-world
Salida:
REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest e9ffedc8c286 4 minutes ago 194MB
-
Ejecute la nueva imagen. La opción
-p 80:80
asigna el puerto 80 expuesto en el contenedor al puerto 80 del sistema de host.docker run -t -i -p 80:80 hello-world
nota
La salida desde el servidor web Apache se muestra en la ventana de la terminal. Puede hacer caso omiso del mensaje "
Could not reliably determine the fully qualified domain name
" -
Abra un navegador y encuentre el servidor que está ejecutando Docker y alojando su contenedor.
-
Si utiliza una instancia de EC2, este es el valor DNS público para el servidor, que es la misma dirección que utiliza para conectarse a la instancia con SSH. Asegúrese de que el grupo de seguridad para la instancia permite el tráfico entrante en el puerto 80.
-
Si ejecuta Docker de forma local, dirija el navegador a http://localhost/
. -
Si utiliza docker-machine en un equipo Windows o Mac, encuentre la dirección IP del VirtualBox VM que aloja Docker con el comando docker-machine ip y sustituya
machine-name
con el nombre de la máquina docker que esté usando.docker-machine ip
machine-name
Debería ver una página web que diga "Hello, World!" statement.
-
-
Detenga el contenedor de Docker escribiendo Ctrl + c.
Envío de la imagen a Amazon Elastic Container Registry
Amazon ECR es un servicio administrado de registro de Docker de AWS. Puede utilizar la CLI de Docker para enviar, extraer y administrar imágenes de sus repositorios de Amazon ECR. Para obtener información detallada sobre los productos de Amazon ECR, casos prácticos destacados de clientes y preguntas frecuentes, consulte las páginas de detalles de productos de Amazon Elastic Container Registry
Para etiquetar la imagen y enviarla a Amazon ECR
-
Cree un repositorio de Amazon ECR para almacenar la imagen
hello-world
. En los resultados, anote elrepositoryUri
.Sustituya
region
, con la Región de AWS, por ejemplo,us-east-1
.aws ecr create-repository --repository-name
hello-repository
--regionregion
Salida:
{ "repository": { "registryId": "
aws_account_id
", "repositoryName": "hello-repository", "repositoryArn": "arn:aws:ecr:region
:aws_account_id
:repository/hello-repository", "createdAt": 1505337806.0, "repositoryUri": "aws_account_id
.dkr.ecr.region
.amazonaws.com/hello-repository" } } -
Etiquete la imagen de
hello-world
con el valor derepositoryUri
del paso anterior.docker tag hello-world
aws_account_id
.dkr.ecr.region
.amazonaws.com/hello-repository
-
Ejecute el comando aws ecr get-login-password. Especifique el URI del registro en el que desea autenticar. Para obtener más información, consulte Autenticación de registros en la Guía del usuario de Amazon Elastic Container Registry.
aws ecr get-login-password --region
region
| docker login --username AWS --password-stdinaws_account_id
.dkr.ecr.region
.amazonaws.com.rproxy.goskope.comSalida:
Login Succeeded
importante
Si recibe un error, instale o actualice a la versión más reciente de la AWS CLI. Para obtener más información, consulte Instalación o actualización de la versión más reciente de la AWS CLI en la Guía del usuario de AWS Command Line Interface.
-
Envíe la imagen a Amazon ECR con el valor
repositoryUri
del paso anterior.docker push
aws_account_id
.dkr.ecr.region
.amazonaws.com/hello-repository
Limpieza
Para seguir creando una definición de tarea de Amazon ECS e iniciando una tarea con la imagen de contenedor, vaya al Pasos a seguir a continuación. Cuando haya terminado de experimentar con su imagen de Amazon ECR, puede eliminar el repositorio para que no se le cobre por el almacenamiento de imágenes.
aws ecr delete-repository --repository-name
hello-repository
--regionregion
--force
Pasos a seguir a continuación
Las definiciones de tareas requieren un rol de ejecución de tarea. Para obtener más información, consulte Rol de IAM de ejecución de tareas de Amazon ECS.
Después de crear e insertar la imagen de contenedor en Amazon ECR, puede utilizar esa imagen en una definición de tarea. Para obtener más información, consulte una de las siguientes: