Cómo instalar Docker en una instancia de AWS EC2 con AMI (actualización CE / EE)

¿Cuál es la forma actual de instalar Docker en una instancia de AWS EC2 que ejecuta la AMI?Ha habido un anuncio de Docker Enterprise Edition y ahora quiero saber si algo ha cambiado.Hasta ahora he estado usando yum install docker y obtenga una versión de Docker en 1.12.6, build 7392c3b/1.12.6 ahora mismo (3/3/2017). Obstante, el repositorio de Docker en GitHub me dice que ya hay versiones más nuevas.

Recuerdo que el repositorio oficial de Docker (paquete) tenía un paquete llamado docker-engine reemplazar docker hace algún tiempo, y ahora parecen dividir el paquete en docker-ce y docker-ee, donde, por ejemplo, "Docker Community Edition (Docker CE) no es compatible con Red Hat Enterprise Linux." [Fuente]

Entonces, ¿es correcto o seguirá siendo correcto usar lo anterior para obtener la última versión estable de Docker en instancias EC2 que ejecutan la AMI o necesito extraer el paquete de otro lugar (y, de ser así, cuál, CE o EE)?

Para que Docker se ejecute en la AMI de AWS, debe seguir los pasos a continuación (todos estos son suponiendo que haya iniciado sesión en la instancia EC2).

  1. Actualice los paquetes de su instancia

    [ec2-user ~]$ sudo yum update -y

  2. Instalar Docker

    [ec2-user ~]$ sudo yum install docker -y

  3. Iniciar el servicio Docker

    [ec2-user ~]$ sudo service docker start

  4. Agregue el usuario ec2 al grupo de docker para que pueda ejecutar comandos de Docker sin usar sudo.

    [ec2-user ~]$ sudo usermod -a -G docker ec2-user

A continuación, debería poder ejecutar todos los comandos de Docker sin necesidad de sudo. Después de ejecutar el cuarto comando, tuve que cerrar sesión y volver a iniciar sesión para que el cambio surta efecto.

La parte más difícil de resolver todo esto fue el requisito de contenedor-selinux. Solo tiene que encontrar la última versión en http://mirror.centos.org/centos/7/extras/x86_64/Packages/ e instálalo primero. Además, las instancias EC2 pueden no tener un generador de entropía adecuado, por lo que haveged es posible que sea necesario instalarlo.

El resto se toma de https://docs.docker.com/install/linux/docker-ce/centos/ con la adición de haveged y firewalld. Todo esto tiene que hacerse de la siguiente manera sudo adecuadamente.

yum install -q -y http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.42-1.gitad8f0f7.el7.noarch.rpmyum install -q -y http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/h/haveged-1.9.1-1.el7.x86_64.rpmyum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repoyum install -q -y firewalld docker-cesystemctl enable firewalldsystemctl start firewalldfirewall-cmd --add-port=2377/tcp --permanentfirewall-cmd --add-port=2376/tcp --permanentfirewall-cmd --add-port=7946/tcp --permanentfirewall-cmd --add-port=7946/udp --permanentfirewall-cmd --add-port=4789/udp --permanentfirewall-cmd --zone=public --permanent --add-masqueradefirewall-cmd --reloadsystemctl enable havegedsystemctl start havegedsystemctl enable dockersystemctl start dockersetenforce 1

Habilitar SELinux modificando /etc/sysconfig/selinux ser

SELINUX=enforcingSELINUXTYPE=targeted

A continuación, reinicie la instancia emitiendo shutdown -r now

Ejecutar sudo docker version debería ceder en el momento de esta publicación...

Cliente: Versión: 18.03.0-ce Versión API: 1.37 Versión Go: go1.9.4 Git commit: 0520e24 Compilación: Mié Mar 21 23:09:15 2018 OS/Arch: linux/amd64 Experimental: falso Orquestador: swarmServer: Motor: Versión: 18.03.0-ce Versión API: 1.37 (versión mínima 1.12) Versión Go: go1.9.4 Git commit: 0520e24 Construido: Mié Mar 21 23:13:03 2018 OS/Arch: linux/amd64 Experimental: falso

Por https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html

La AMI optimizada para Amazon ECS actual (amzn-ami-2017.09.j-amazon-ecs-optimized) consiste en:

  • La última versión mínima de la AMI de Amazon Linux
  • La versión más reciente del agente de contenedores de Amazon ECS (1.17.2)
  • La versión recomendada de Docker para el agente de contenedores de Amazon ECS más reciente (17.12.0-ce)
  • La versión más reciente del paquete ecs-init para ejecutar y supervisar el agente de Amazon ECS (1.17.2-1)

Puedes ver la historia en https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-ami-versions.html

Además de mi respuesta anterior. Si usa Terraform, también he creado un módulo de Terraform que se puede usar para crear un enjambre de Docker

https://registry.terraform.io/modules/trajano/swarm-aws/docker

La diferencia entre el enfoque que había hecho anteriormente y el enfoque que estoy actualmente hacer con el módulo Terraform es utilizar los paquetes Docker proporcionados por AWS. Esto no incluye el docker-compose completo y lo que no, pero normalmente no necesita esos paquetes en un servidor.

Debido a que estoy usando el que Amazon me había proporcionado, ya no es la última versión 18.09, sino la versión 18.06. Sin embargo, la configuración es más simple y no tengo que ponerme al día con container-selinux.

La única dependencia externa que uso es EPEL para obtener haveged porque aún necesita una buena fuente aleatoria para algunas aplicaciones.

También confié en los grupos de seguridad de AWS en lugar de configurar explícitamente firewalld y utilicé la configuración de SELinux que está predeterminada en la imagen de AMI.

¿Ha leído la documentación de AWS sobre cómo instalar Docker Standard? Si es así, ¿qué parte no funcionó o qué problemas no abordó? Creating a container image for use on Amazon ECS - Amazon Elastic Container Service

Supongo que Amazon lo actualizará cuando lo hagan. Aunque, por supuesto, sabe que nadie debería usar Amazon Linux para nada.

La pregunta es si puedo seguir así. Como ya se mencionó, me instalará Docker con la versión 1.12, que ya es una, si no más, actualizaciones de versión menores detrás de la última versión estable (1.13, antes de CE / EE) y me pregunto si esto se debe al retraso habitual en la actualización del repositorio o porque la guía y el paquete simplemente están desactualizados, lo que requiere un trabajo de reemplazo realizado por mí (por ejemplo, ¿de alguna manera obtener Docker de su propio repositorio?). También sobre el último anuncio de EE que podría cambiar algo…

¿Corriendo qué AMI?

@MichaelHampton el más reciente para HVM, Amazon Linux AMI 2016.09.1.

Si esa es la verdadera solución a este problema, esto me entristece un poco. Sin embargo, gracias por la pista, todavía no he tenido demasiada experiencia con EC2 para llegar a esta conclusión por mí mismo. Siempre he pensado que es lo mejor usar AMI porque es (debería ser) la imagen más actualizada y adaptada a la virtualización EC2.

Todos los paquetes están actualizados, el núcleo. Sin embargo, encuentro que Ubuntu es mucho más fácil para la instalación de software y el soporte general, hay pocos recursos de Amazon Linux, por lo que las cosas difíciles se hacen aún más difíciles.

@MichaelHampton Amazon Linux está bien para el uso de ECS. Está preconfigurado para el uso de ECS, y el sistema operativo subyacente no importa mucho en ese caso.

@MichaelHampton ` ‘nadie debería usar Amazon Linux para nada’, entonces, ¿qué AMI propone entonces, señor?