Lingkungan Docker ECS dengan konsol Elastic Beanstalk - AWS Elastic Beanstalk

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Lingkungan Docker ECS dengan konsol Elastic Beanstalk

Anda dapat meluncurkan sekelompok contoh multi-container dalam satu contoh atau scalable lingkungan Elastic Beanstalk menggunakan konsol Elastic Beanstalk. Tutorial ini rincian konfigurasi kontainer dan kode sumber persiapan untuk lingkungan yang menggunakan dua kontainer.

kontainer, aplikasi PHP dan proxy nginx, berjalan berdampingan pada masing-masing Amazon Elastic Compute Cloud (Amazon EC2) contoh pada lingkungan Elastic Beanstalk. Setelah membuat lingkungan dan memverifikasi bahwa aplikasi berjalan, Anda akan terhubung ke contoh kontainer untuk melihat bagaimana semuanya cocok bersama-sama.

Tentukan kontainer Docker yang dikelola ECS

Langkah pertama dalam menciptakan lingkungan Docker baru adalah untuk membuat sebuah direktori untuk data aplikasi Anda. Folder ini dapat ditemukan di mana saja pada mesin lokal Anda dan memiliki nama apapun yang Anda pilih. Selain file konfigurasi kontainer, folder ini akan berisi konten yang akan Anda upload ke Elastic Beanstalk dan menerapkannya ke lingkungan Anda.

catatan

Semua kode untuk tutorial ini tersedia di repositori awslabs pada GitHub padahttps://github.com/awslabs/eb-docker-nginx-proxy.

File yang digunakan Elastic Beanstalk untuk mengkonfigurasi kontainer pada contoh Amazon EC2 adalah file bernama teks berformat-JSON Dockerrun.aws.json. Buat sebuah file teks dengan nama ini di akar aplikasi Anda dan tambahkan teks berikut:

{ "AWSEBDockerrunVersion": 2, "volumes": [ { "name": "php-app", "host": { "sourcePath": "/var/app/current/php-app" } }, { "name": "nginx-proxy-conf", "host": { "sourcePath": "/var/app/current/proxy/conf.d" } } ], "containerDefinitions": [ { "name": "php-app", "image": "php:fpm", "essential": true, "memory": 128, "mountPoints": [ { "sourceVolume": "php-app", "containerPath": "/var/www/html", "readOnly": true } ] }, { "name": "nginx-proxy", "image": "nginx", "essential": true, "memory": 128, "portMappings": [ { "hostPort": 80, "containerPort": 80 } ], "links": [ "php-app" ], "mountPoints": [ { "sourceVolume": "php-app", "containerPath": "/var/www/html", "readOnly": true }, { "sourceVolume": "nginx-proxy-conf", "containerPath": "/etc/nginx/conf.d", "readOnly": true }, { "sourceVolume": "awseb-logs-nginx-proxy", "containerPath": "/var/log/nginx" } ] } ] }

Contoh konfigurasi ini mendefinisikan dua kontainer, sebuah situs web PHP dengan proxy nginx di depannya. Kedua kontainer akan berjalan berdampingan dalam kontainer Docker pada setiap contoh di lingkungan Elastic Beanstalk Anda, mengakses konten berbagi (isi situs web) dari volume pada contoh host, yang juga didefinisikan dalam file ini. Kontainer-kontainer itu sendiri dibuat dari gambar yang dihosting di repositori resmi di Docker Hub. Lingkungan yang dihasilkan terlihat seperti berikut ini:

Volume yang didefinisikan dalam konfigurasi sesuai dengan konten yang akan Anda buat berikutnya dan upload sebagai bagian dari bundel sumber aplikasi Anda. Kontainer mengakses konten pada host dengan memasang volume di bagian mountPoints dari definisi kontainer.

Untuk informasi lebih lanjut tentang format Dockerrun.aws.json dan parameternya, lihat Format definisi kontainer.

Tambahkan konten

Selanjutnya Anda akan menambahkan beberapa konten untuk situs PHP Anda untuk ditampilkan kepada pengunjung, dan file konfigurasi untuk proxy nginx.

php-app/index.php

<h1>Hello World!!!</h1> <h3>PHP Version <pre><?= phpversion()?></pre></h3>

php-app/static.html

<h1>Hello World!</h1> <h3>This is a static HTML page.</h3>

proxy/conf.d/default.conf

server { listen 80; server_name localhost; root /var/www/html; index index.php; location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; if (!-f $document_root$fastcgi_script_name) { return 404; } include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; fastcgi_pass php-app:9000; fastcgi_index index.php; } }

Menerapkan ke Elastic Beanstalk

Folder aplikasi Anda sekarang berisi file-file berikut ini:

├── Dockerrun.aws.json ├── php-app │   ├── index.php │   └── static.html └── proxy └── conf.d └── default.conf

Ini semua yang Anda butuhkan untuk menciptakan lingkungan Elastic Beanstalk. Buat arsip .zip dari file dan folder di atas (tidak termasuk folder proyek tingkat atas). Untuk membuat arsip di Windows explorer, pilih isi folder proyek, klik kanan, pilih Kirim Ke, dan kemudian klik Folder terkompresi (zip)

catatan

Untuk informasi tentang struktur berkas yang diperlukan dan petunjuk untuk membuat arsip di lingkungan lain, lihat Membuat paket sumber aplikasi

Selanjutnya, upload bundel sumber ke Elastic Beanstalk dan buat lingkungan Anda. Untuk Platform, pilih Docker. UntukCabang platform, pilihECS berjalan pada Amazon Linux 2 64bit.

Untuk meluncurkan lingkungan (konsol)
  1. Buka konsol Elastic Beanstalk dengan tautan yang telah dikonfigurasi ini:console.aws.amazon.com/elasticbeanstalk/home#/ newApplicationapplicationName=Tutorial &environmentType=LoadBalanced

  2. Untuk Platform, pilih platform dan cabang platform yang sesuai dengan bahasa yang digunakan oleh aplikasi Anda, atau platform Docker untuk aplikasi berbasis kontainer.

  3. Untuk Kode aplikasi, pilih Unggah kode Anda.

  4. Pilih File lokal, pilih Pilih file, dan kemudian buka paket sumber.

  5. Pilih Tinjau dan Luncurkan.

  6. Tinjau pengaturan dan kemudian pilih Buat applikasi.

Konsol Elastic Beanstalk mengarahkan Anda kembali ke dasbor manajemen untuk lingkungan baru Anda. Layar ini menunjukkan status kesehatan lingkungan dan acara output oleh layanan Elastic Beanstalk. Ketika statusnya Hijau, klik URL disebelah nama lingkungan untuk melihat situs web baru Anda.

Hubungkan ke instans kontainer

Selanjutnya Anda akan terhubung ke contoh Amazon EC2 di lingkungan Elastic Beanstalk Anda untuk melihat beberapa bagian yang bergerak dalam tindakan.

Cara termudah untuk terhubung ke sebuah instance di lingkungan Anda adalah dengan menggunakan EB CLI. Untuk menggunakannya,instal EB CLI, jika Anda belum melakukannya. Anda juga harus mengkonfigurasi lingkungan Anda dengan key pair Amazon EC2 SSH. Gunakan salah satu konsol halaman konfigurasi keamananatau EB CLI perintah eb init untuk melakukan itu. Untuk menyambung ke contoh lingkungan, gunakan EB CLI perintah eb ssh.

Sekarang setelah Anda terhubung ke instans Amazon EC2 yang menghosting docker container Anda, Anda dapat melihat bagaimana segala sesuatunya diatur. Jalankan ls pada/var/app/current:

[ec2-user@ip-10-0-0-117 ~]$ ls /var/app/current Dockerrun.aws.json php-app proxy

Direktori ini berisi berkas dari bundel sumber yang Anda upload ke Elastic Beanstalk selama pembuatan lingkungan.

[ec2-user@ip-10-0-0-117 ~]$ ls /var/log/containers nginx-proxy nginx-proxy-4ba868dbb7f3-stdouterr.log php-app php-app-dcc3b3c8522c-stdouterr.log rotated

Di sinilah log dibuat pada contoh kontainer dan dikumpulkan oleh Elastic Beanstalk. Elastic Beanstalk membuat volume di direktori ini untuk setiap kontainer, yang Anda pasang ke lokasi kontainer tempat log ditulis.

Anda juga dapat melihat Docker untuk melihat kontainer berjalan dengan docker ps.

[ec2-user@ip-10-0-0-117 ~]$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4ba868dbb7f3 nginx "/docker-entrypoint.…" 4 minutes ago Up 4 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp ecs-awseb-Tutorials-env-dc2aywfjwg-1-nginx-proxy-acca84ef87c4aca15400 dcc3b3c8522c php:fpm "docker-php-entrypoi…" 4 minutes ago Up 4 minutes 9000/tcp ecs-awseb-Tutorials-env-dc2aywfjwg-1-php-app-b8d38ae288b7b09e8101 d9367c0baad6 amazon/amazon-ecs-agent:latest "/agent" 5 minutes ago Up 5 minutes (healthy) ecs-agent

Ini menunjukkan dua kontainer berjalan yang Anda gunakan, serta agen kontainer Amazon ECS yang mengkoordinasikan deployment.

Periksa agen kontainer Amazon ECS

contoh Amazon EC2 dalam lingkungan Docker ECS pada Elastic Beanstalk menjalankan proses agen dalam kontainer Docker. Agen ini menghubungkan ke layanan Amazon ECS untuk mengkoordinasikan penyebaran kontainer. Penyebaran ini berjalan sebagai tugas di Amazon ECS, yang dikonfigurasi dalam file definisi tugas. Elastic Beanstalk menciptakan file definisi tugas ini berdasarkan Dockerrun.aws.jsonyang Anda upload dalam bundel sumber.

Periksa status agen kontainer dengan HTTP get request to http://localhost:51678/v1/metadata:

[ec2-user@ip-10-0-0-117 ~]$ curl http://localhost:51678/v1/metadata { "Cluster":"awseb-Tutorials-env-dc2aywfjwg", "ContainerInstanceArn":"arn:aws:ecs:us-west-2:123456789012:container-instance/awseb-Tutorials-env-dc2aywfjwg/db7be5215cd74658aacfcb292a6b944f", "Version":"Amazon ECS Agent - v1.57.1 (089b7b64)" }

Struktur ini menunjukkan nama kluster Amazon ECS, dan ARN (Nama Sumber Daya Amazon) contoh instans kluster (contoh Amazon EC2 yang tersambung ke Anda).

Untuk informasi lebih lanjut, buat permintaan HTTP get kehttp://localhost:51678/v1/tasks:

[ec2-user@ip-10-0-0-117 ~]$ curl http://localhost:51678/v1/tasks { "Tasks":[ { "Arn":"arn:aws:ecs:us-west-2:123456789012:task/awseb-Tutorials-env-dc2aywfjwg/bbde7ebe1d4e4537ab1336340150a6d6", "DesiredStatus":"RUNNING", "KnownStatus":"RUNNING", "Family":"awseb-Tutorials-env-dc2aywfjwg", "Version":"1", "Containers":[ { "DockerId":"dcc3b3c8522cb9510b7359689163814c0f1453b36b237204a3fd7a0b445d2ea6", "DockerName":"ecs-awseb-Tutorials-env-dc2aywfjwg-1-php-app-b8d38ae288b7b09e8101", "Name":"php-app", "Volumes":[ { "Source":"/var/app/current/php-app", "Destination":"/var/www/html" } ] }, { "DockerId":"4ba868dbb7f3fb3328b8afeb2cb6cf03e3cb1cdd5b109e470f767d50b2c3e303", "DockerName":"ecs-awseb-Tutorials-env-dc2aywfjwg-1-nginx-proxy-acca84ef87c4aca15400", "Name":"nginx-proxy", "Ports":[ { "ContainerPort":80, "Protocol":"tcp", "HostPort":80 }, { "ContainerPort":80, "Protocol":"tcp", "HostPort":80 } ], "Volumes":[ { "Source":"/var/app/current/php-app", "Destination":"/var/www/html" }, { "Source":"/var/log/containers/nginx-proxy", "Destination":"/var/log/nginx" }, { "Source":"/var/app/current/proxy/conf.d", "Destination":"/etc/nginx/conf.d" } ] } ] } ] }

Struktur ini menjelaskan tugas yang dijalankan untuk menerapkan dua docker kontainer dari proyek contoh tutorial ini. Informasi berikut ini ditampilkan secara default.

  • KnownStatus— ItuRUNNINGStatus menunjukkan bahwa kontainer masih aktif.

  • Keluarga— Nama definisi tugas yang Elastic Beanstalk dibuat dariDockerrun.aws.json.

  • Versi— Versi definisi tugas. Ini bertambah setiap kali file definisi tugas diperbarui.

  • Kontainer— Informasi tentang kontainer yang berjalan pada contoh.

Informasi lebih lanjut tersedia dari layanan Amazon ECS itu sendiri, yang dapat Anda hubungi menggunakan AWS Command Line Interface. Untuk petunjuk tentang penggunaan AWS CLI dengan Amazon ECS, dan informasi secara umum tentang Amazon ECS , lihat Panduan Pengguna Amazon ECS.