[Einführung in Docker x ECS] ECS-Bereitstellung mit Docker Compose

Das ECS-Plugin von Docker wurde veröffentlicht, und es scheint, dass es auch die stabile Version von Docker für Mac unterstützt, also habe ich es versucht.

Es gibt offizielle Dokumente und Kommentarseiten, aber es gab einige Stolpersteine (Ohne es zu wissen, wurde der Befehl docker ecs compose in Docker compose integriert ...) Ich habe es als persönliches Memo für ECS-Anfänger zusammengefasst.

Überprüfungsumgebung

Version 2 von AWS CLI ist erforderlich. Wir empfehlen, dass Sie Docker und AWS CLI auf die neueste Version aktualisieren.

Referenzlink: AWS CLI-Einstellungen Installieren, Aktualisieren und Deinstallieren von AWS CLI Version 2 unter macOS

Docker-Image vorbereiten

Dieses Mal verwenden wir Docker Official Sample. Überprüfen Sie zunächst den Vorgang lokal. Es ist fast in Official Doc geschrieben, aber als persönliches Memo ist es ein offizielles Docker-Beispiel Ich werde die Vorgehensweise von erklären.

--Pull Docker offizielle Probe

$ git clone https://github.com/docker/ecs-plugin.git
$ cd ecs-plugin/example/
$ docker build app -t example
$ docker images --filter reference=example
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
example             latest              33e46b7030e0        4 minutes ago       52.3MB
$ docker run -t -i -p 5000:5000 example
Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

Versuchen Sie, auf http://0.0.0.0:5000/ zuzugreifen. Weil redis nicht läuft redis.exceptions.ConnectionError Sollte auftreten. Beenden Sie mit STRG + C.

Einrichtung mit Amazon ECR

Amazon ECR ist wie Docker Hub. Schieben Sie das erstellte Docker-Image auf ECR und ziehen Sie es, wenn Sie Docker-Compose verwenden.

python


$ docker context use default
$ docker context ls

IAM-Benutzervorbereitung

Dadurch wird auch ein IAM-Benutzer gemäß [Official Doc] erstellt (https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/get-set-up-for-amazon-ecr.html). .. Befolgen Sie die Schritte, um es mit dem Namen "Administrator" zu erstellen. Wenn Sie sich als der von Ihnen erstellte IAM-Benutzer anmelden, "Administrator @ aws_account_id" wird in der Navigationsleiste angezeigt. ex. Administrator@1234-5678-9012

Notieren Sie sich die Anmeldeinformationen, da Sie sie später verwenden werden. aws_account_id aws_access_key_id aws_secret_access_key

Authentifizieren Sie sich über die Konsole bei der Standardregistrierung

In meinem Fall benutze ich die Region Tokio (ap-nordöstlich-1). Geben Sie die in der Navigationsleiste bestätigte aws_account_id ohne Bindestriche in [aws_account_id] ein. ex. 1234-5678-9012 => 123456789012

$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin [aws_account_id].dkr.ecr.ap-northeast-1.amazonaws.com
Login Succeeded

Erstellen Sie ein Repository

Nachdem Sie ein Bild an Amazon ECR gesendet haben, erstellen Sie ein Repository, in dem es gespeichert werden kann. Erstellen Sie ein Repository mit dem Namen example: latest und übertragen Sie das soeben erstellte Beispielbild.

--Erstellen Sie ein Repository

$ aws ecr create-repository \
		--repository-name example \
		--image-scanning-configuration scanOnPush=true \
		--region ap-northeast-1 
$ docker tag example:latest [aws_account_id].dkr.ecr.ap-northeast-1.amazonaws.com/example:latest

--Drücken Sie das Bild

$ docker push [aws_account_id].dkr.ecr.ap-northeast-1.amazonaws.com/example:latest
$ aws ecr list-images --repository-name example

Docker-Compose Lokale Betriebsprüfung

Ziehen Sie das Bild auf ECR und überprüfen Sie den Betrieb lokal. Stellen Sie sicher, dass Sie das Bild an ERC senden können. Öffnen Sie die Amazon ECR-Konsole (https://console.aws.amazon.com/ecr/). Das Beispiel-Repository sollte erstellt worden sein.

スクリーンショット 2020-10-30 13.01.54.png

Kopieren Sie die URL. Fügen Sie es in das Image von docker-compose.yml und docker-compose up ein. Kommentieren Sie x-aws-pull_credentials aus, da sie diesmal nicht benötigt werden.

example/docker-compose.yml


version: "3.8"
services:
  frontend:
    build: app
    # x-aws-pull_credentials: <<<your arn for your secret you can get with docker ecs secret list>>>
    image: 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/example:latest
    ports:
      - "5000:5000"
    depends_on:
      - backend
  backend:
    image: redis:alpine
$ docker-compose up

Sie können das auf ECR übertragene Bild ziehen, um den Betrieb der App lokal zu überprüfen.

スクリーンショット 2020-10-30 13.09.57.png

Ich konnte den Betrieb von redis bestätigen.

$ docker-compose down

Bereitstellung in ECS

AWS-Kontexterstellung

Erstellen Sie es gemäß Docker-Dokumente (Übersetzung) mit dem Namen myecscontext. Verwenden Sie die zuvor in IAM erstellten Anmeldeinformationen. aws_access_key_id aws_secret_access_key

$ docker context create ecs myecscontext
? Select AWS Profile new profile
? profile name myecscontext
? Region ap-northeast-1
? Enter credentials Yes
? AWS Access Key ID aws_access_key_id
? Enter AWS Secret Access Key aws_secret_access_key
Successfully created ecs context "myecscontext"

Überprüfen Sie den Kontext

$ docker context ls
NAME                TYPE                DESCRIPTION                               DOCKER ENDPOINT               KUBERNETES ENDPOINT   ORCHESTRATOR
default *           moby                Current DOCKER_HOST based configuration   unix:///var/run/docker.sock                         swarm
myecscontext        ecs                 ap-northeast-1                 

Verwenden Sie myecscontext

$ docker context use myecscontext
this tool requires the "new ARN resource ID format"

Es sieht so aus, als müssten Sie das lange ARN-Format aktivieren. Ich denke, es ist Magie und führe es aus.

$ aws ecs put-account-setting-default --name awsvpcTrunking --value enabled
$ aws ecs put-account-setting-default --name containerInsights --value enabled
$ aws ecs put-account-setting-default --name containerInstanceLongArnFormat --value enabled
$ aws ecs put-account-setting-default --name serviceLongArnFormat --value enabled
$ aws ecs put-account-setting-default --name taskLongArnFormat --value enabled

Bereitstellung in ECS

Es ist endlich ECS, aber es ist sofort vorbei. Beim Erstellen des Dockers werden Ressourcen automatisch erstellt und bereitgestellt.

$ docker compose up
WARN[0000] services.build: unsupported attribute        
[+] Running 17/17
 ⠿ example                        CREATE_COMPLETE                                                                                                          204.0s
 ⠿ ExampleLoadBalancer            CREATE_COMPLETE                                                                                                          122.0s
 ⠿ FrontendTCP5000TargetGroup     CREATE_COMPLETE                                                                                                            1.0s
 ⠿ CloudMap                       CREATE_COMPLETE                                                                                                           51.0s
 ⠿ FrontendTaskExecutionRole      CREATE_COMPLETE                                                                                                           22.0s
 ⠿ LogGroup                       CREATE_COMPLETE                                                                                                            3.0s
 ⠿ ExampleDefaultNetwork          CREATE_COMPLETE                                                                                                            8.0s
 ⠿ Cluster                        CREATE_COMPLETE                                                                                                            6.0s
 ⠿ BackendTaskExecutionRole       CREATE_COMPLETE                                                                                                           21.0s
 ⠿ ExampleDefaultNetworkIngress   CREATE_COMPLETE                                                                                                            1.0s
 ⠿ FrontendTaskDefinition         CREATE_COMPLETE                                                                                                            3.0s
 ⠿ BackendTaskDefinition          CREATE_COMPLETE                                                                                                            4.0s
 ⠿ FrontendServiceDiscoveryEntry  CREATE_COMPLETE                                                                                                            3.0s
 ⠿ BackendServiceDiscoveryEntry   CREATE_COMPLETE                                                                                                            1.9s
 ⠿ BackendService                 CREATE_COMPLETE                                                                                                           68.0s
 ⠿ FrontendTCP5000Listener        CREATE_COMPLETE                                                                                                            1.0s
 ⠿ FrontendService                CREATE_COMPLETE                                                                                                           68.0s

Überprüfen Sie die bereitgestellte App

Überprüfen Sie den Status des laufenden Containers.

$ docker compose ps
ID                                     NAME                REPLICAS            PORTS
example-BackendService-xSDWkSABSvEt    backend             1/1                 
example-FrontendService-0pIz1giwUZg4   frontend            1/1                 ExampleLoadBalancer-29dbd0f98418a861.elb.ap-northeast-1.amazonaws.com:5000->5000/tcp

Versuchen Sie, auf die Frontend-PORTS zuzugreifen. Ich denke, Sie haben die Beispiel-App bereitgestellt. http://ExampleLoadBalancer-29dbd0f98418a861.elb.ap-northeast-1.amazonaws.com:5000/

Bereitgestellte Ressourcen löschen

Wenn Sie Docker komponieren, wird die Ressource automatisch gelöscht.

$ docker compose down
[+] Running 17/17
 ⠿ example                        DELETE_COMPLETE                                                                                                                515.0s
 ⠿ ExampleLoadBalancer            DELETE_COMPLETE                                                                                                                389.0s
 ⠿ FrontendTCP5000TargetGroup     DELETE_COMPLETE                                                                                                                389.0s
 ⠿ CloudMap                       DELETE_COMPLETE                                                                                                                514.0s
 ⠿ FrontendTaskExecutionRole      DELETE_COMPLETE                                                                                                                393.0s
 ⠿ LogGroup                       DELETE_COMPLETE                                                                                                                471.0s
 ⠿ ExampleDefaultNetwork          DELETE_COMPLETE                                                                                                                467.0s
 ⠿ Cluster                        DELETE_COMPLETE                                                                                                                467.0s
 ⠿ BackendTaskExecutionRole       DELETE_COMPLETE                                                                                                                472.0s
 ⠿ ExampleDefaultNetworkIngress   DELETE_COMPLETE                                                                                                                  3.0s
 ⠿ FrontendTaskDefinition         DELETE_COMPLETE                                                                                                                390.0s
 ⠿ BackendTaskDefinition          DELETE_COMPLETE                                                                                                                467.0s
 ⠿ FrontendServiceDiscoveryEntry  DELETE_COMPLETE                                                                                                                389.0s
 ⠿ BackendServiceDiscoveryEntry   DELETE_COMPLETE                                                                                                                467.0s
 ⠿ BackendService                 DELETE_COMPLETE                                                                                                                464.0s
 ⠿ FrontendTCP5000Listener        DELETE_COMPLETE                                                                                                                388.0s
 ⠿ FrontendService                DELETE_COMPLETE                                                                                                                386.0s

Verweise

Offizielles Docker-Beispiel Bereitstellen von Docker Container auf ECS So starten Sie Amazon ECR mit AWS CLI So starten Sie Amazon ECS mit Fargate Der Docker-Befehl ecs wurde in Zusammenarbeit mit Docker und AWS entwickelt, daher habe ich versucht, ihn zu verwenden Ich habe versucht, Docker Compose von Amazon ECS bereitzustellen

Recommended Posts

[Einführung in Docker x ECS] ECS-Bereitstellung mit Docker Compose
[Docker] Einführung in Docker Compose Grundlegende Zusammenfassung von Docker-Compose.yml
Richten Sie GitLab mit Docker ein
Erstellen Sie die Node.js-Umgebung mit Docker Compose
Einführung in Linux Container / Docker (Teil 1)
Einführung in Spring Boot x Offene API ~ Offene API, erstellt mit Generationslückenmuster ~
Einführung in Algorithmen mit der Java-Shakutori-Methode
WordPress mit Docker Compose unter CentOS 8
Einführung in Linux Container / Docker (Teil 2)
Erstellen Sie einen C-Compiler zur Verwendung mit Rust x CLion mit Docker
Aktualisieren Sie MySQL mit Docker von 5.7 auf 8.0
So starten Sie Camunda mit Docker
So erstellen Sie eine Ruby on Rails-Entwicklungsumgebung mit Docker (Rails 6.x)
So erstellen Sie eine Ruby on Rails-Entwicklungsumgebung mit Docker (Rails 5.x)
So teilen Sie Dateien mit Docker Toolbox
Mit Docker auf Heroku bereitstellen (Rails 6, MySQL)
Einführung in Algorithmen mit Java-Suche (Tiefenprioritätssuche)
Einführung in die praktische Containerentwicklung von Docker / Kubernetes
Beispiel zum Starten von Ubuntu mit Deployment mit Client-Go
Installieren Sie Docker mit WSL2 Memo ([Teil 2] Docker-Einführung)
So führen Sie Blazor (C #) mit Docker aus
[Einführung in Docker] Offizielles Tutorial (japanische Übersetzung)
So erstellen Sie eine Rails 6-Umgebung mit Docker
Einführung in Algorithmen mit Java --Search (Breitenprioritätssuche)
Einführung in den Roboterkampf mit Robocode (Umgebungskonstruktion)
Wie man jeden Fall mit Mockito 1x verspottet
Ich habe versucht, AdoptOpenJDK 11 (11.0.2) mit dem Docker-Image zu überprüfen
Einführung in Algorithmen mit Java --Search (Bit Full Search)
Einführung in Algorithmen mit Java-Suche (Vollsuche, Halbierungssuche)
Einführung in Rspec mit Ruby on Rails x Docker
Einstellung zum Verlassen des Docker-Containers mit VScode
Stellen Sie Rails mit AWS Copilot für ECS Fargate bereit
So geben Sie jemandem Ihr Image mit Docker
[Rails] So erstellen Sie eine Umgebung mit Docker
Ich kann Docker-Compose -d nicht mit Docker machen
Einführung in den Roboterkampf mit Robocode (Anfängerentwicklung)
[Einführung in Spring Boot] Authentifizierungsfunktion mit Spring Security
Mit Rails + Docker einfach Hallo Welt anzuzeigen