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.
Configuración de Docker
En esta sección se describe cómo preparar su imagen y contenedor Docker y para implementarlos en Elastic Beanstalk.
Entorno de Docker con Docker Compose
En esta sección se describe cómo preparar su imagen y contenedor Docker y para implementarlos en Elastic Beanstalk. Cualquier aplicación web que implemente en Elastic Beanstalk en un entorno de Docker debe incluir un archivo docker-compose.yml
si también utiliza la herramienta Docker Compose. Puede implementar su aplicación web como un servicio en contenedor en Elastic Beanstalk realizando una de las siguientes acciones:
-
Cree un archivo
docker-compose.yml
para implementar una imagen de Docker de un repositorio alojado en Elastic Beanstalk. No se requieren otros archivos si todas las implementaciones provienen de imágenes de repositorios públicos. (Si la implementación debe provenir de una imagen de un repositorio privado, debe incluir archivos de configuración adicionales para la autenticación. Para obtener más información, consulte Utilizar imágenes de un repositorio privado). Para obtener más información sobre el archivodocker-compose.yml
, consulte Compose file referenceen el sitio web de Docker. -
Cree un
Dockerfile
para que Elastic Beanstalk cree y ejecute una imagen personalizada. Este archivo es opcional y depende de los requisitos de implementación. Para obtener más información acerca deDockerfile
, consulte Dockerfile reference (Referencia de Dockerfile)en el sitio web de Docker. -
Cree un archivo
.zip
que contenga los archivos de la aplicación, todas las dependencias de los archivos de la aplicación, el archivoDockerfile
y el archivodocker-compose.yml
. Si utiliza la CLI de EB para implementar la aplicación, se creará un archivo.zip
automáticamente. Los dos archivos deben estar en la raíz, o en el nivel superior, del archivo.zip
.Si utiliza únicamente un archivo
docker-compose.yml
para implementar la aplicación, no es necesario crear un archivo.zip
.
Este tema es una referencia de sintaxis. Para obtener procedimientos detallados sobre el inicio de entornos Docker mediante Elastic Beanstalk, consulte Uso de la ramificación de la plataforma Docker.
Para obtener más información sobre Docker Compose y cómo instalarlo, consulte los sitios de Docker Overview of Docker Compose
nota
Si no usa Docker Compose para configurar sus entornos de Docker, tampoco debe usar el archivo docker-compose.yml
. En su lugar, utilice el archivo Dockerrun.aws.json
, Dockerfile
o ambos.
Para obtener más información, consulte Configuración de plataformas de Docker (sin Docker Compose) .
Uso de imágenes de un repositorio privado
Elastic Beanstalk debe autenticarse con el registro en línea que aloja el repositorio privado antes de que pueda extraer e implementar las imágenes de un repositorio privado. Ofrecemos ejemplos de dos opciones para almacenar y recuperar las credenciales de su entorno de Elastic Beanstalk para autenticarse en un repositorio.
-
El AWS Secrets Manager
-
El archivo
Dockerrun.aws.json v3
Puede configurar Elastic Beanstalk para que inicie sesión en su repositorio privado antes de que inicie el proceso de implementación. Esto permite a Elastic Beanstalk acceder a las imágenes desde el repositorio e implementar estas imágenes en su entorno Elastic Beanstalk.
Esta configuración inicia eventos en la fase de precompilación del proceso de implementación de Elastic Beanstalk. Esto se configura en el directorio de configuración .ebextentions. La configuración utiliza scripts de enlace de plataforma que llaman a docker login para la autenticación en el registro en línea que aloja el repositorio privado. A continuación, se presenta un desglose detallado de estos pasos de configuración.
Configuración de Elastic Beanstalk para autenticarse en su repositorio privado con AWS Secrets Manager
nota
Se deben otorgar permisos específicos para completar estos pasos. Para obtener más información, consulte las siguientes referencias.
-
En Paso 2, necesitará permisos para crear un secreto. Para obtener más información, consulte Ejemplo: permiso para crear secretos en la Guía del usuario de AWS Secrets Manager .
-
En Paso 3, necesitará permisos para recuperar secretos mediante las referencias dinámicas
secretsmanager
. Para obtener más información, consulte Ejemplo: Permiso para recuperar valores de secretos en la Guía del usuario de AWS Secrets Manager .
-
Cree su estructura de directorios
.ebextensions
de la siguiente manera.├── .ebextensions │ └── env.config ├── .platform │ ├── confighooks │ │ └── prebuild │ │ └── 01login.sh │ └── hooks │ └── prebuild │ └── 01login.sh ├── docker-compose.yml
-
Úselo AWS Secrets Manager para guardar las credenciales de su repositorio privado para que Elastic Beanstalk pueda recuperarlas cuando sea necesario. Para ello, ejecute el comando create-secret AWS CLI de Secrets Manager.
aws secretsmanager create-secret \ --name
MyTestSecret
\ --description "My image repo credentials created with the CLI.
" \ --secret-string "{\"USER\
":\"EXAMPLE-USERNAME\
",\"PASSWD\
":\"EXAMPLE-PASSWORD\
"}" -
Cree el siguiente archivo
env.config
y colóquelo en el directorio.ebextensions
como se muestra en la estructura de directorios anterior. Esta configuración utiliza el espacio de nombres aws:elasticbeanstalk:application:environment para iniciar las variablesUSER
yPASSWD
del entorno de Elastic Beanstalk con las referencias dinámicas a AWS Secrets Manager. Para obtener más información sobre las referenciassecretsmanager
dinámicas, consulte Recuperar un AWS Secrets Manager secreto de un AWS CloudFormation recurso en la Guía del AWS Secrets Manager usuario.nota
USER
yPASSWD
en el script deben coincidir con las mismas cadenas que se utilizan en el comandosecretsmanager
create-secret anterior.option_settings: aws:elasticbeanstalk:application:environment: USER: '{{resolve:secretsmanager:MyTestSecret:SecretString:USER}}' PASSWD: '{{resolve:secretsmanager:MyTestSecret:SecretString:PASSWD}}'
-
Cree el siguiente archivo de script
01login.sh
y colóquelo en los siguientes directorios (también se muestra en la estructura de directorios anterior):-
.platform/confighooks/prebuild
-
.platform/hooks/prebuild
### example 01login.sh #!/bin/bash USER=/opt/elasticbeanstalk/bin/get-config environment -k USER /opt/elasticbeanstalk/bin/get-config environment -k PASSWD | docker login -u $USER --password-stdin
El script
01login.sh
llama al script de la plataforma get-config para recuperar las credenciales del repositorio y, luego, inicia sesión en el repositorio. Almacena el nombre de usuario en la variableUSER
del script. En la siguiente línea, recupera la contraseña. En lugar de almacenar la contraseña en una variable, el script la envía directamente al comando docker login del flujo de entradastdin
. La opción--password-stdin
usa el flujo de entrada, por lo que no tiene que almacenar la contraseña en una variable. Para obtener más información sobre la autenticación con la interfaz de la línea de comandos de Docker, consulte Docker login(Inicio de sesión de Docker) en el sitio web de documentación de Docker. Notas
-
Todos los archivos de script deben tener permiso de ejecución. Utilice chmod +x para configurar el permiso de ejecución de los archivos de enlace. Para todas las versiones de plataformas basadas en Amazon Linux 2 que se publicaron el 29 de abril de 2022 o en fecha posterior, Elastic Beanstalk automáticamente otorga permisos de ejecución a todos los scripts de enlace de plataforma. En este caso, no tiene que otorgar permisos de ejecución manualmente. Para obtener una lista de estas versiones de plataforma, consulte las notas de la versión del 29 de abril de 2022 - Plataforma Linux en la AWS Elastic Beanstalk Guía de notas de la versión.
-
Los archivos de enlace pueden ser archivos binarios o archivos de script y deben comenzar con una línea #! que contenga la ruta del intérprete, como #!/bin/bash.
-
Para obtener más información, consulte Enlaces de la plataforma en Ampliación de plataformas Linux de Elastic Beanstalk.
-
Cuando Elastic Beanstalk se autentique con el registro en línea que aloja el repositorio privado, podrá implementar y extraer sus imágenes.
En esta sección se describe otro enfoque para que Elastic Beanstalk se autentique en un repositorio privado. Con este enfoque, se genera un archivo de autenticación con el comando Docker y, a continuación, se carga el archivo de autenticación en un bucket de Amazon S3. También debe incluir la información del bucket en el archivo Dockerrun.aws.json v3
.
Para generar y proporcionar un archivo de autenticación a Elastic Beanstalk
-
Genere un archivo de autenticación con el comando docker login. En el caso de los repositorios de Docker Hub, ejecute docker login:
$
docker login
En el caso de otros registros, incluya la URL del servidor del registro:
$
docker login
registry-server-url
nota
Si su entorno de Elastic Beanstalk utiliza la versión de la plataforma Docker AMI de Amazon Linux (precede a Amazon Linux 2), lea la información relevante en Configuración de Docker en la AMI de Amazon Linux (anterior a Amazon Linux 2).
Para obtener más información sobre el archivo de autenticación, consulte Store images on Docker Hub
y docker login en el sitio web de Docker. -
Cargue una copia del archivo de autenticación denominado
.dockercfg
en un bucket de Amazon S3 seguro.-
El bucket de Amazon S3 debe alojarse en el Región de AWS mismo entorno que el que lo utiliza. Elastic Beanstalk no puede descargar archivos desde un bucket de Amazon S3 alojado en otras regiones.
-
Conceda permisos para la operación
s3:GetObject
al rol de IAM en el perfil de instancia. Para obtener más información, consulte Administración de perfiles de instancia de Elastic Beanstalk.
-
-
Incluya la información del bucket de Amazon S3 en el parámetro
Authentication
en el archivoDockerrun.aws.json v3
.A continuación, se muestra un ejemplo de un archivo
Dockerrun.aws.json v3
.{ "AWSEBDockerrunVersion": "3", "Authentication": { "bucket": "DOC-EXAMPLE-BUCKET", "key": "
mydockercfg
" } }nota
El parámetro
AWSEBDockerrunVersion
indica la versión del archivoDockerrun.aws.json
.-
La plataforma de Docker Amazon Linux 2 utiliza el archivo
Dockerrun.aws.json v3
para los entornos que usan Docker Compose. Utiliza el archivoDockerrun.aws.json v1
para los entornos que no usan Docker Compose. -
La plataforma de la AMI Multicontainer Docker de Amazon Linux utiliza el archivo
Dockerrun.aws.json v2
.
-
Cuando Elastic Beanstalk pueda autenticarse con el registro en línea que aloja el repositorio privado, se podrán implementar y extraer sus imágenes.
Creación de imágenes personalizadas con un Dockerfile
Tendrá que crear un archivo Dockerfile
si aún no dispone de una imagen alojada en un repositorio.
El siguiente fragmento es un ejemplo del archivo Dockerfile
. Cuando siga las instrucciones de Uso de la ramificación de la plataforma Docker, podrá cargar este archivo Dockerfile
tal como está escrito. Elastic Beanstalk ejecuta el juego 2048 cuando se utiliza este Dockerfile
.
Para obtener más información sobre las instrucciones que puede incluir en el archivo Dockerfile
, consulte la referencia de Dockerfile
FROM ubuntu:12.04
RUN apt-get update
RUN apt-get install -y nginx zip curl
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
RUN curl -o /usr/share/nginx/www/master.zip -L https://codeload.github.com/gabrielecirulli/2048/zip/master
RUN cd /usr/share/nginx/www/ && unzip master.zip && mv 2048-master/* . && rm -rf 2048-master master.zip
EXPOSE 80
CMD ["/usr/sbin/nginx", "-c", "/etc/nginx/nginx.conf"]
nota
Puede ejecutar compilaciones de varias etapas a partir de un solo Dockerfile para producir imágenes de menor tamaño con una reducción significativa de la complejidad. Para obtener más información, consulte Utilizar compilaciones de varias etapas
Configuración de plataformas de Docker (sin Docker Compose)
Si su entorno de Docker en Elastic Beanstalk no utiliza Docker Compose, consulte la información adicional de las secciones siguientes.
Cualquier aplicación web que se implemente en Elastic Beanstalk en un entorno de Docker debe incluir un archivo Dockerfile
o Dockerrun.aws.json
. Puede implementar su aplicación web desde un contenedor de Docker en Elastic Beanstalk realizando alguna de las siguientes acciones:
-
Cree un
Dockerfile
para que Elastic Beanstalk cree y ejecute una imagen personalizada. -
Cree un archivo
Dockerrun.aws.json
para implementar una imagen de Docker de un repositorio alojado en Elastic Beanstalk. -
Cree un archivo
.zip
que contenga los archivos de la aplicación, todas las dependencias de los archivos de la aplicación, el archivoDockerfile
y el archivoDockerrun.aws.json
. Si utiliza la CLI de EB para implementar la aplicación, se creará un archivo.zip
automáticamente.Si utiliza únicamente un archivo
Dockerfile
o solo un archivoDockerrun.aws.json
para implementar la aplicación, no es necesario comprimir el archivo en un archivo.zip
.
Este tema es una referencia de sintaxis. Para obtener información detallada sobre cómo iniciar entornos de Docker, consulte Uso de la ramificación de la plataforma Docker.
Secciones
Un archivo Dockerrun.aws.json
describe cómo implementar una imagen remota de Docker como una aplicación de Elastic Beanstalk. Este archivo JSON es específico de Elastic Beanstalk. Si la aplicación se ejecuta en una imagen que está disponible en un repositorio alojado, puede especificar la imagen en un archivo Dockerrun.aws.json v1
y omitir el archivo Dockerfile
.
Las claves y los valores válidos para el archivo Dockerrun.aws.json v1
se definen con las siguientes operaciones:
- AWSEBDockerrunVersion
-
(Obligatorio) Especifica el número de versión como el valor
1
para entornos Docker de un solo contenedor. - Autenticación
-
(Obligatorio solo para repositorios privados) Especifica el objeto de Amazon S3 que almacena el archivo
.dockercfg
. - Imagen
-
Especifica la imagen base de Docker en un repositorio Docker existente desde el que va a crear un contenedor Docker. Especifique el valor de la clave Name (Nombre) con el formato
<organización>/nombre de imagen>
para las imágenes de Docker Hub o<sitio>/nombre de organización>/<nombre de imagen>
para otros sitios.Cuando especifica una imagen en el archivo
Dockerrun.aws.json
, cada instancia del entorno de Elastic Beanstalk ejecutadocker pull
para ejecutar la imagen. Si lo desea, incluya la clave Update (Actualizar). El valor predeterminado estrue
e indica a Elastic Beanstalk que consulte el repositorio, inserte las actualizaciones en la imagen y sobrescriba las imágenes en caché.Cuando utilice un archivo
Dockerfile
, no especifique la clave Image en el archivoDockerrun.aws.json
. Elastic Beanstalk siempre crea y usa la imagen descrita en el archivoDockerfile
si hay alguna. - Puertos
-
(Obligatorio si especifica la clave Image) Muestra los puertos que se exponen en el contenedor Docker. Elastic Beanstalk ContainerPortusa el valor para conectar el contenedor de Docker al proxy inverso que se ejecuta en el host.
Puede especificar varios puertos de contenedor, pero Elastic Beanstalk solo utiliza el primer puerto. Utiliza este puerto para conectar el contenedor al proxy inverso del host y para enrutar las solicitudes de la Internet pública. Si utiliza un
Dockerfile
, el primer ContainerPortvalor debe coincidir con la primera entrada de la lista EXPOSEDockerfile
.Si lo desea, puede especificar una lista de puertos de entrada HostPort. HostPortlas entradas especifican los puertos del host a ContainerPortlos que se asignan los valores. Si no especificas un HostPortvalor, el valor predeterminado será el ContainerPortvalor.
{ "Image": { "Name": "
image-name
" }, "Ports": [ { "ContainerPort":8080
, "HostPort":8000
} ] } - Volúmenes
-
Asigne volúmenes de una instancia EC2 a su contenedor Docker. Especifique una o varias matrices de volúmenes que desee asignar.
{ "Volumes": [ { "HostDirectory": "
/path/inside/host
", "ContainerDirectory": "/path/inside/container
" } ] ... - Registro
-
Especifique el directorio dentro del contenedor en el que la aplicación escribe los registros. Elastic Beanstalk carga todos los registros de este directorio en Amazon S3 cuando solicita registros de cola o paquete. Si rota los logs en una carpeta con el nombre
rotated
dentro de este directorio, también puede configurar Elastic Beanstalk para que cargue los logs rotados en Amazon S3 para su almacenamiento permanente. Para obtener más información, consulte Visualización de registros de instancias de Amazon EC2 en su entorno de Elastic Beanstalk. - Comando
-
Especifique un comando para ejecutarlo en el contenedor. Si especifica un punto de entrada y, a continuación, se añade Command (Comando) como argumento en el punto de entrada. Para obtener más información, consulte CMD
en la documentación de Docker. - Punto de entrada
-
Especifique un comando predeterminado para ejecutarse cuando se inicia el contenedor. Para obtener más información, consulte ENTRYPOINT
en la documentación de Docker.
El siguiente fragmento es un ejemplo que ilustra la sintaxis del archivo Dockerrun.aws.json
para un solo contenedor.
{
"AWSEBDockerrunVersion": "1",
"Image": {
"Name": "janedoe/image",
"Update": "true"
},
"Ports": [
{
"ContainerPort": "1234"
}
],
"Volumes": [
{
"HostDirectory": "/var/app/mydb",
"ContainerDirectory": "/etc/mysql"
}
],
"Logging": "/var/log/nginx",
"Entrypoint": "/app/bin/myapp",
"Command": "--argument"
}
Puede proporcionar a Elastic Beanstalk solo el archivo Dockerrun.aws.json
o un archivo .zip
que contenga los archivos Dockerrun.aws.json
y Dockerfile
. Cuando proporciona ambos archivos, el archivo Dockerfile
describe la imagen de Docker y el archivo Dockerrun.aws.json
proporciona información adicional para la implementación tal y como se describe más adelante en esta sección.
nota
Los dos archivos deben estar en la raíz, o en el nivel superior, del archivo .zip
. No cree el archivo de almacenamiento desde un directorio que contenga los archivos. En lugar de ello, desplácese hasta ese directorio y cree allí el archivo de almacenamiento.
Cuando proporcione ambos archivos, no especifique una imagen en el archivo Dockerrun.aws.json
. Elastic Beanstalk crea y usa la imagen descrita en Dockerfile
e ignora la imagen especificada en el archivo Dockerrun.aws.json
.
Añada la información sobre el bucket de Amazon S3; que contiene el archivo de autenticación en el parámetro Authentication
del archivo Dockerrun.aws.json
v1
. Asegúrese de que el parámetro Authentication
contiene un bucket de Amazon S3 y una clave válidos. El bucket de Amazon S3 debe estar alojado en la misma Región de AWS que el entorno que lo está utilizando. Elastic Beanstalk no descarga archivos de buckets de Amazon S3 alojados en otras regiones.
Para obtener información sobre cómo generar y cargar el archivo de autenticación, consulte Uso de imágenes de un repositorio privado.
El siguiente ejemplo muestra el uso de un archivo de autenticación denominado mydockercfg
en un bucket denominado DOC-EXAMPLE-BUCKET
para utilizar una imagen privada de un registro de terceros.
{
"AWSEBDockerrunVersion": "1",
"Authentication": {
"Bucket": "DOC-EXAMPLE-BUCKET
",
"Key": "mydockercfg
"
},
"Image": {
"Name": "quay.io/johndoe/private-image",
"Update": "true"
},
"Ports": [
{
"ContainerPort": "1234"
}
],
"Volumes": [
{
"HostDirectory": "/var/app/mydb",
"ContainerDirectory": "/etc/mysql"
}
],
"Logging": "/var/log/nginx"
}