Die Container-Virtualisierungssoftware Docker soll über das neue ECS-Plugin besser mit den AWS-Services AWS Fargate und AWS Elastic Container zusammenspielen, so der zugehörige Blogpost auf dem Docker-Blog. Mit der Neuerung wird die Notwendigkeit der Erstellung separater AWS-ECS-Ressourcen wie zum Beispiel VPC, ECS-Cluster und sogenannte ECS-Task-Definitionen eliminiert.
Ein Command soll künftig reichen
Steuern lässt sich die ECS-Integration über den Root-Command ecs
. Die Ausführung des Commands docker ecs compose up
beispielsweise erstellt die Applikation und alle benötigten Ressourcen innerhalb der AWS-Umgebung wie in der compose.yaml
-Datei definiert. Für das ECS-Docker-Plugin muss ein AWS-Profil eingerichtet werden, aus dem die erforderlichen AWS-API-Zugangsdaten ausgewählt werden können. Über docker ecs setup
können AWS-Profil und -Region innerhalb der Docker-Umgebung gespeichert werden: Das ECS-Plugin parst die compose.yaml
-Datei und konvertiert sie in ein Cloud-Formation-Template. Über das Template werden dann alle in der compose.yaml
definierten Ressourcen erstellt. Im Idealfall müssen Entwickler also künftig nur noch den ECS-Command ausführen, damit in Cloudformation alles Nötige für den Betrieb des Docker-Containers vorbereitet wird. Zur Bereinigung von Ressourcen dient der down
-Command, im Fall eines fehlgeschlagenen Deployments werden diese automatisch bereinigt.
Das passiert im Detail
Die ECS-Integration führt vier Schritte aus. Während der Ladephase wird die compose.yaml
über die Go-Reference-Library compose-go geladen und geparst. Im nächsten Schritt, der Validierungsphase, werden sogenannte ECS-Defaults in das compose-go-Modell injiziert. Um sicherzustellen, dass sie keine Features enthält, die nicht unterstützt werden, wird in dieser Phase außerdem die compose.yaml
überprüft. Während der Konvertierungsphase wird das Cloud-Formation-Template erstellt. Darin definiert sind alle zur Implementation auf AWS benötigten Ressourcen. Im letzten Schritt wird das Cloud-Formation-Template entweder zu einer Stack-Datei exportiert oder auf AWS deployed.
Die Compose-Services der compose.yaml
sind währenddessen auf ECS-Services gemappt. Über eine spezielle Compose-Erweiterung (zum Beispiel x-aws-*) wird sichergestellt, dass ECS-Features als Service-Level-Features exponiert werden. Das ist nötig, weil Compose von Haus aus keine Multi-Container-Services wie zum Beispiel kubernetes-pods oder sidecars unterstützt.
Ausgehend von dem Compose-Modell wird die Netzwerkabstaktion in AWS-Security-Groups abgebildet. Die Anwendung wird innerhalb einer einzigen VPC erstellt, wobei pro Compose-Netzwerk eine separate Security-Gruppe erstellt wird, einschließlich der impliziten Standardgruppe. Dienste werden dann entsprechend der Deklaration der Netzwerke im Compose-Modell angehängt. Dienste, die an eine gemeinsame Security-Gruppe angeschlossen sind, können so miteinander kommunizieren. Für jede Anwendung wird zudem ein AWS-Cloud-Map Private Namespace als {project}.local
erstellt. Über den AWS-Service können Ressourcen einer Anwendung mit benutzerdefinierten Namen registriert werden. Der Service überprüft die Location der registrierten Ressourcen auf Aktualität.
Final-Release-Date: Ende des Jahres
Der Final Release des Plugins ist für Ende des Jahres angedacht, bis dahin soll das Feature in die Docker-Contexts integriert werden. Contexts bieten einen Weg, Kubernetes-Cluster, Swarm-Cluster und verschiedene einzelne Docker-Nodes über ein einzelnes Docker-CLI zu managen. Um das Plugin jetzt schon zu nutzen, braucht ihr neben einer Docker-ID zudem Docker Desktop Edge in Version 2.3.3.0. Im zugehörigen Repository auf GitHub finden interessierte Entwickler eine Demo-Anwendung. Feedback und Änderungswünsche können wie gehabt über die dem Projekt zugehörige Roadmap eingereicht werden.
Passend dazu:
- Container-Virtualisierung: Docker und Kubernetes erfolgreich einsetzen
- Kubernetes 1.18 kommt mit 38 spannenden Neuerungen
- Kubernetes entkompliziert: Microsoft launcht neues Open-Source-Projekt