Dans le contexte d'AWS:
AMI est utilisé pour emballer les logiciels et peut être déployé sur EC2 . Docker peut également être utilisé pour emballer des logiciels et peut également être déployé sur EC2.
Quelle est la différence entre les deux et comment puis-je choisir entre eux?
Une AMI est une image. Il s'agit d'une machine complète à partir de laquelle vous pouvez démarrer de nouvelles instances. Un conteneur Docker est plus léger et portable. Un conteneur docker doit pouvoir être transporté entre les fournisseurs alors qu'un IMA ne l'est pas (facilement).
Les AMI sont VM images essentiellement . Les conteneurs Docker sont des mini-images packagées qui s'exécutent sur un VM dans un environnement isolé.
Ce lien contient des informations détaillées sur les différences entre Docker et AMI: - https://forums.docker.com/t/how-would-you-differentiate-between-docker-vs-ec2-image/1235/2
Même si cela ne répond pas directement à la question, il donne quelques informations sur la manière dont ils sont utilisés.
Une approche consiste à lancer des instances EC2 avec Amazon AMI (ou toute autre AMI), puis à exécuter des conteneurs de menu fixe (avec toutes les dépendances). Avec cette approche, l'image du menu fixe se gonfle avec le temps et le conteneur dérive avec le temps. De plus, le temps nécessaire à l'application pour fonctionner est davantage lié au fait que l'Ec2 doit être démarré et que docker doit afficher votre serveur d'applications.
Une autre approche est celle des "instances Ecu immuables". Avec cette approche, vous utilisez Amazon AMI comme base, installez toutes les dépendances (utilisez des scripts Shell ou Ansible) et les créez dans l’AMI. Nous utilisons Hashicorp Packer, un outil extraordinaire. Ici, le temps nécessaire pour que l'application soit opérationnelle est considérablement réduit car toutes les dépendances (Java8, Tomcat, le fichier war, etc.) sont déjà installées dans l'AMI.
Pour un cas d'utilisation en production, utilisez Packer pour créer une AMI et Terraform pour lancer des ressources cloud qui utiliseront cette AMI. Nouez tout cela ensemble dans le pipeline Jenkins.