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

28

¿Cuál es la forma actual de instalar Docker en una instancia de AWS EC2 que ejecuta AMI? Ha habido un anuncio de Docker Enterprise Edition y ahora quiero saber si algo ha cambiado. Hasta ahora, he estado usando yum install dockery tengo un Docker versionado en 1.12.6, build 7392c3b/1.12.6este momento (3/3/2017). Sin embargo, 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-enginereemplazo hace dockeralgún tiempo y ahora parece dividir el paquete docker-cey docker-ee, por ejemplo, "Docker Community Edition (Docker CE) no es compatible con Red Hat Enterprise Linux". [ Fuente ]

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

mxscho
fuente
2
¿Leyó la documentación de AWS sobre cómo instalar el estándar Docker? De ser así, ¿qué parte no funcionó o qué problemas no resolvió? docs.aws.amazon.com/AmazonECS/latest/developerguide/…
Tim
La pregunta es si puedo seguir haciéndolo así. Como ya se mencionó, me instalará Docker versionado en 1.12, que ya es una, si no más, actualizaciones menores de versión detrás de la última versión estable (1.13, antes de CE / EE) y me pregunto si esto se debe al retraso habitual de 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, ¿obteniendo Docker de su propio repositorio?). También en relación con el último anuncio EE que podría cambiar algo ...
mxscho
Ejecutando lo que AMI?
Michael Hampton
@MichaelHampton el último para HVM, Amazon Linux AMI 2016.09.1.
mxscho
1
Supongo que Amazon lo actualizará cuando lo encuentren. Aunque, por supuesto, sabes que nadie debería usar Amazon Linux para nada.
Michael Hampton

Respuestas:

44

Para que Docker se ejecute en AWS AMI, debe seguir los pasos a continuación (todos estos suponen que ha ingresado a la instancia EC2).

  1. Actualice los paquetes en su instancia

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

  2. Instalar Docker

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

  3. Inicie el servicio Docker

    [ec2-user ~]$ sudo service docker start

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

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

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

ajtrichards
fuente
3
Como ya mencioné en la pregunta, esto realmente funciona, pero instala una versión desactualizada de Docker (todavía versión 1.12.6 el 28/05/2017). Si bien yo mismo he cambiado a la imagen de Ubuntu para mis instancias EC2, lo que realmente quería saber es cómo instalar una de las versiones actuales de Docker en una imagen AMI. Porque allí (al menos en el momento de la pregunta) no había una forma obvia de obtener una instalación Docker CE actualizada o una instalación Docker EE. De eso se trató esta pregunta en primer lugar y esa es la razón por la que no puedo aceptarla sin dudarlo. ¡Gracias de todos modos!
mxscho
@mxscho sí, eso también es lo que estoy buscando, así que espere hasta que se publique una respuesta que aborde la pregunta.
user239558
1
Hoy yum install instala 17.03.1ce-1.50.amzn1
raarts
1
No funciono para mi. Entonces necesitaba hacer esto. sudo yum instala yum-utils, y luego sudo yum-config-manager - habilita rhui-REGION-rhel-server-extras, y luego sudo yum install docker
TheAshwaniK
5

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

El resto se toma de https://docs.docker.com/install/linux/docker-ce/centos/ con la adición de haveged y firewalld. Todo esto debe hacerse como root de manera sudoapropiada.

yum install -q -y http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.42-1.gitad8f0f7.el7.noarch.rpm
yum install -q -y http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/h/haveged-1.9.1-1.el7.x86_64.rpm
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -q -y firewalld docker-ce
systemctl enable firewalld
systemctl start firewalld
firewall-cmd --add-port=2377/tcp --permanent
firewall-cmd --add-port=2376/tcp --permanent
firewall-cmd --add-port=7946/tcp --permanent
firewall-cmd --add-port=7946/udp --permanent
firewall-cmd --add-port=4789/udp --permanent
firewall-cmd --zone=public --permanent --add-masquerade
firewall-cmd --reload
systemctl enable haveged
systemctl start haveged
systemctl enable docker
systemctl start docker
setenforce 1

Habilite SELinux modificando /etc/sysconfig/selinuxpara ser

SELINUX=enforcing
SELINUXTYPE=targeted

Luego reinicie su instancia emitiendo shutdown -r now

La ejecución sudo docker versiondebería rendir a partir del momento de esta publicación ...

Cliente:
 Versión: 18.03.0-ce
 Versión de API: 1.37
 Versión Go: go1.9.4
 Git commit: 0520e24
 Construido: mié 21 de marzo 23:09:15 2018
 OS / Arch: linux / amd64
 Experimental: falso
 Orquestador: enjambre

Servidor:
 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é 21 de marzo 23:13:03 2018
  OS / Arch: linux / amd64
  Experimental: falso
Arquímedes Trajano
fuente
1
¿Has intentado ejecutar Docker en otras AMI excepto CentOS? ¿Puedes compartir tus experiencias?
Suncatcher
1
No utilicé los centos Ami. Utilicé el AMI Linux 2. El Linux 1 es demasiado viejo.
Arquímedes Trajano
1
Ok lo tengo. ¿Los repositorios CentOS que usó son totalmente compatibles con Amazon AMI?
Suncatcher
Justo uso las máquinas virtuales Centos para el desarrollo con Vagrant, solo tuve que adaptar mis scripts para que funcione con los paquetes faltantes.
Arquímedes Trajano
1
Paranoia simple
Arquímedes Trajano
2

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

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

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

Puede ver el historial en https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-ami-versions.html

Plutext
fuente
0

Además de mi respuesta anterior. Si usa Terraform, también he creado un módulo Terraform que se puede usar para crear un enjambre 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 haciendo actualmente 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 no necesita esos paquetes normalmente en un servidor.

Debido a que estoy usando el que Amazon 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 protección porque todavía 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 usé la configuración SELinux que está predeterminada en la imagen AMI.

Arquímedes Trajano
fuente