

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

# Membuat lingkungan Docker yang dikelola ECS dengan konsol Elastic Beanstalk
<a name="create_deploy_docker_ecstutorial"></a>

Tutorial ini merinci konfigurasi kontainer dan persiapan kode sumber untuk lingkungan Docker yang dikelola ECS yang menggunakan dua kontainer. 

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

**Topics**
+ [Tentukan wadah Docker yang dikelola ECS](#create_deploy_docker_ecstutorial_config)
+ [Tambahkan konten](#create_deploy_docker_ecstutorial_code)
+ [Menerapkan ke Elastic Beanstalk](#create_deploy_docker_ecstutorial_deploy)
+ [Hubungkan ke instans kontainer](#create_deploy_docker_ecstutorial_connect)
+ [Periksa agen kontainer Amazon ECS](#create_deploy_docker_ecstutorial_connect_inspect)

## Tentukan wadah Docker yang dikelola ECS
<a name="create_deploy_docker_ecstutorial_config"></a>

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 di. GitHub [https://github.com/awslabs/eb-docker-nginx-proxy](https://github.com/awslabs/eb-docker-nginx-proxy)

File yang digunakan Elastic Beanstalk untuk mengonfigurasi wadah pada instance EC2 Amazon adalah file teks berformat JSON bernama v2. `Dockerrun.aws.json` Versi platform Docker yang dikelola ECS menggunakan format Versi 2 dari file ini. Format ini hanya dapat digunakan dengan platform Docker yang dikelola ECS, karena berbeda secara signifikan dari versi file konfigurasi lain yang mendukung cabang platform Docker yang tidak dikelola oleh ECS.

Buat file teks `Dockerrun.aws.json` v2 dengan nama ini di root 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:

![\[Elastic Beanstalk environment with load balancer, auto scaling group, and two instances running Nginx and PHP-FPM.\]](http://docs.aws.amazon.com/id_id/elasticbeanstalk/latest/dg/images/aeb-multicontainer-tutorial.png)


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` v2 dan parameternya, lihat[Format definisi kontainer](create_deploy_docker_v2config.md#create_deploy_docker_v2config_dockerrun_format). 

## Tambahkan konten
<a name="create_deploy_docker_ecstutorial_code"></a>

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
<a name="create_deploy_docker_ecstutorial_deploy"></a>

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 [Buat bundel sumber aplikasi Elastic Beanstalk](applications-sourcebundle.md) 

Selanjutnya, upload bundel sumber ke Elastic Beanstalk dan buat lingkungan Anda. Untuk **Platform**, pilih **Docker**. Untuk **cabang Platform**, pilih **ECS yang berjalan di 64bit Amazon Linux** 2023.

**Untuk meluncurkan lingkungan (konsol)**

1. [Buka konsol Elastic Beanstalk dengan tautan yang telah dikonfigurasi sebelumnya: console.aws.amazon. com/elasticbeanstalk/home\$1/newApplication? applicationName=Tutorial&EnvironmentType= LoadBalanced](https://console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced)

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

1. Untuk **Kode aplikasi**, pilih **Unggah kode Anda**.

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

1. Pilih **Tinjau dan Luncurkan**.

1. 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
<a name="create_deploy_docker_ecstutorial_connect"></a>

Selanjutnya Anda akan terhubung ke EC2 instans Amazon di lingkungan Elastic Beanstalk Anda untuk melihat beberapa bagian yang bergerak beraksi. 

Cara termudah untuk terhubung ke sebuah instance di lingkungan Anda adalah dengan menggunakan EB CLI. Untuk menggunakannya,[instal EB CLI](eb-cli3.md#eb-cli3-install), jika Anda belum melakukannya. Anda juga harus mengonfigurasi lingkungan Anda dengan key pair Amazon EC2 SSH. Gunakan salah satu konsol [halaman konfigurasi keamanan](using-features.managing.security.md)atau EB CLI perintah [eb init](eb3-init.md) untuk melakukan itu. Untuk menyambung ke contoh lingkungan, gunakan EB CLI perintah [eb ssh](eb3-ssh.md).

Sekarang setelah Anda terhubung ke EC2 instans Amazon yang menghosting container docker 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
<a name="create_deploy_docker_ecstutorial_connect_inspect"></a>

 EC2 Instans Amazon di lingkungan Docker yang dikelola ECS di Elastic Beanstalk menjalankan proses agen dalam wadah 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.json`yang 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 cluster Amazon ECS, dan ARN ([Amazon Resource](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) Name) dari instance cluster (instans EC2 Amazon yang Anda sambungkan). 

Untuk informasi lebih lanjut, buat permintaan HTTP get ke`http://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**— `RUNNING` Status menunjukkan bahwa kontainer masih aktif.
+ **Keluarga**— Nama definisi tugas yang Elastic Beanstalk dibuat dari`Dockerrun.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 tentang Amazon ECS secara umum, lihat Panduan Pengguna [Amazon ECS.](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_GetStarted.html) 