Migración a la plataforma Docker Amazon Linux 2 - AWS Elastic Beanstalk

Migración a la plataforma Docker Amazon Linux 2

importante

Las versiones de la plataforma de Amazon Linux 2 son totalmente diferentes de las versiones de la plataforma AMI de Amazon Linux (anterior a Amazon Linux 2). Estas generaciones distintas de plataformas son incompatibles de varias maneras. Si va a migrar a una versión de la plataforma de Amazon Linux 2, asegúrese de leer la información en Migración de la aplicación de Linux de Elastic Beanstalk a Amazon Linux 2.

Puede migrar las aplicaciones que se ejecutan en la plataforma Docker de varios contenedores en la AMI de Amazon Linux a la plataforma Amazon Linux 2 Docker. La plataforma Docker Multi-Container en la AMI de Amazon Linux requiere que especifique imágenes de aplicación preconfiguradas para que se ejecuten como contenedores. Después de la migración, ya no tendrá esta limitación, ya que la plataforma de Docker en Amazon Linux 2 también permite a Elastic Beanstalk crear imágenes de contenedor durante la implementación.

Sus aplicaciones seguirán ejecutándose en entornos de varios contenedores con los beneficios agregados de la herramienta Docker Compose. Para obtener más información sobre Docker Compose y cómo instalarlo, consulte los sitios de Docker Overview of Docker Compose e Install Docker Compose.

El archivo docker-compose.yml

La herramienta Docker Compose utiliza el archivo docker-compose.yml para la configuración de los servicios de aplicaciones. Este archivo reemplaza el archivo Dockerrun.aws.json v2 en el directorio del proyecto de la aplicación y el paquete de código fuente de la aplicación. Cree el archivo docker-compose.yml manualmente. Le resultará útil hacer referencia a su archivo Dockerrun.aws.json v2 para la mayoría de los valores de parámetros.

A continuación, se muestra un ejemplo de un archivo docker-compose.yml y el archivo Dockerrun.aws.json v2 correspondiente para la misma aplicación. Para obtener más información sobre el archivo docker-compose.yml, consulte Compose file reference. Para obtener más información sobre el archivo Dockerrun.aws.json v2, consulte Dockerrun.aws.json v2.

docker-compose.yml Dockerrun.aws.json v2
version: '2.4' services: php-app: image: "php:fpm" volumes: - "./php-app:/var/www/html:ro" - "${EB_LOG_BASE_DIR}/php-app:/var/log/sample-app" mem_limit: 128m environment: Container: PHP nginx-proxy: image: "nginx" ports: - "80:80" volumes: - "./php-app:/var/www/html:ro" - "./proxy/conf.d:/etc/nginx/conf.d:ro" - "${EB_LOG_BASE_DIR}/nginx-proxy:/var/log/nginx" mem_limit: 128m links: - php-app
{ "AWSEBDockerrunVersion": 2, "volumes": [ { "name": "php-app", "host": { "sourcePath": "/var/app/current/php-app" } }, { "name": "nginx-proxy-conf", "host": { "sourcePath": "/var/app/current/proxy/conf.d" } } ], "containerDefinitions": [ { "name": "php-app", "image": "php:fpm", "environment": [ { "name": "Container", "value": "PHP" } ], "essential": true, "memory": 128, "mountPoints": [ { "sourceVolume": "php-app", "containerPath": "/var/www/html", "readOnly": true } ] }, { "name": "nginx-proxy", "image": "nginx", "essential": true, "memory": 128, "portMappings": [ { "hostPort": 80, "containerPort": 80 } ], "links": [ "php-app" ], "mountPoints": [ { "sourceVolume": "php-app", "containerPath": "/var/www/html", "readOnly": true }, { "sourceVolume": "nginx-proxy-conf", "containerPath": "/etc/nginx/conf.d", "readOnly": true }, { "sourceVolume": "awseb-logs-nginx-proxy", "containerPath": "/var/log/nginx" } ] } ] }

Consideraciones adicionales sobre la migración

La plataforma Docker Amazon Linux 2 y la plataforma Docker de contenedores múltiples Amazon Linux AMI implementan propiedades del entorno de forma diferente. Estas dos plataformas también tienen directorios de registro diferentes a los que Elastic Beanstalk crea para cada uno de sus contenedores. Después de migrar desde la plataforma Docker de contenedores múltiples de Amazon Linux AMI, deberá tener en cuenta estas diferentes implementaciones para su nuevo entorno de plataforma Docker de Amazon Linux 2.

Area Plataforma Docker en Amazon Linux 2 con Docker Compose Plataforma Docker de varios contenedores en la AMI de Amazon Linux

Propiedades del entorno

Para que los contenedores accedan a las propiedades del entorno, debe agregar una referencia al archivo .env en el archivo docker-compose.yml. Elastic Beanstalk genera el archivo .env, enumerando cada una de las propiedades como variables de entorno. Para obtener más información, consulte Referencia a variables de entorno en contenedores.

Elastic Beanstalk puede pasar directamente las propiedades del entorno al contenedor. El código que se ejecuta en el contenedor puede acceder a estas propiedades como variables de entorno sin ninguna configuración adicional.

Directorios de registro

Para cada contenedor, Elastic Beanstalk crea un directorio de registro llamado /var/log/eb-docker/containers/<service name> (o ${EB_LOG_BASE_DIR}/<service name>). Para obtener más información, consulte Registro personalizado del contenedor de Docker (Docker Compose).

Para cada contenedor, Elastic Beanstalk crea un directorio de registro llamado /var/log/containers/<containername>. Para obtener más información, consulte mountPoints en Formato de definición de contenedor.

Pasos para realizar la migración

Para migrar a la plataforma Docker de Amazon Linux 2

  1. Cree el archivo docker-compose.yml para su aplicación, basado en el archivo Dockerrun.aws.json v2 existente. Para obtener más información, consulte la sección anterior El archivo docker-compose.yml.

  2. En el directorio raíz de la carpeta del proyecto de la aplicación, reemplace el archivo Dockerrun.aws.json v2 por el archivo docker-compose.yml que acaba de crear.

    La estructura de directorios debe ser similar a la siguiente.

    ~/myApplication |-- docker-compose.yml |-- .ebextensions |-- php-app |-- proxy
  3. Utilice el comando eb init para configurar el directorio local para la implementación en Elastic Beanstalk.

    ~/myApplication$ eb init -p docker application-name
  4. Utilice el comando eb create para crear un entorno e implementar la imagen de Docker.

    ~/myApplication$ eb create environment-name
  5. Si la aplicación es una aplicación web, después de que se inicie el entorno, utilice el comando eb open para verla en un navegador web.

    ~/myApplication$ eb open environment-name
  6. Puede mostrar el estado del entorno recién creado mediante el comando eb status.

    ~/myApplication$ eb status environment-name