En el contexto de AWS:
AMI se utiliza para empaquetar software y se puede implementar en EC2. Docker también se puede usar para empaquetar software y también se puede implementar en EC2.
¿Cuál es la diferencia entre ambos y cómo elijo entre ellos?
Una AMI es una imagen. Esta es una máquina completa desde la que puede iniciar nuevas instancias. Un contenedor docker es más liviano y portátil. Un contenedor docker debe ser transportable entre proveedores mientras que una AMI no lo es (fácilmente).
Las AMI son básicamente imágenes de máquinas virtuales. Los contenedores Docker son miniimágenes empaquetadas que se ejecutan en alguna máquina virtual en un entorno aislado.
Aunque esto no responde la pregunta directamente, pero brinda algunos antecedentes sobre cómo se usan.
Un enfoque es lanzar instancias EC2 con Amazon AMI (o puede ser cualquier AMI) y luego ejecutar contenedores Docker (con todas las dependencias) encima. Con este enfoque, la imagen de la ventana acoplable se infla con el tiempo y hay una deriva del contenedor con el tiempo. Además, el tiempo necesario para que la aplicación esté en funcionamiento es más, ya que Ec2 debe iniciarse y la ventana acoplable debe abrir su servidor de aplicaciones.
Otro enfoque son las "instancias Ec2 inmutables". Con este enfoque, utiliza Amazon AMI como base e instala todas las dependencias (utilice scripts de shell o Ansible) y las hornee en la AMI. Usamos Hashicorp Packer, que es una herramienta increíble. Aquí, el tiempo que tarda la aplicación en estar en funcionamiento se reduce considerablemente, ya que todas las dependencias (java8, tomcat, war file, etc.) ya están instaladas en la AMI.
Para el caso de uso de producción, use Packer para crear AMI y use Terraform para lanzar recursos en la nube para usar esta AMI. Ate todo esto en la canalización de Jenkins.
Este enlace tiene detalles sobre las diferencias entre Docker y AMI:- https://forums.docker.com/t/how-would-you- differenceiate- between-docker-vs-ec2-image/1235/2