

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

# Gunakan volume Docker dengan Amazon ECS
<a name="docker-volumes"></a>

Saat menggunakan volume Docker, built-in driver `local` atau driver volume pihak ke tiga dapat digunakan. Volume Docker dikelola oleh Docker dan direktori dibuat di `/var/lib/docker/volumes` pada instans kontainer yang berisi data volume.

Untuk menggunakan volume Docker, tentukan `dockerVolumeConfiguration` dalam ketentuan tugas Anda. Untuk informasi selengkapnya, lihat [Volume](https://docs.docker.com/engine/storage/volumes/) dalam Docker dokumentasi.

Beberapa kasus penggunaan umum untuk volume Docker adalah sebagai berikut:
+ Untuk menyediakan volume data tetap untuk digunakan dengan kontainer
+ Untuk berbagi volume data yang ditetapkan di lokasi yang berbeda pada kontainer yang berbeda pada instans kontainer yang sama
+ Untuk menentukan volume data kosong, tidak tetap dan memasangnya pada beberapa kontainer dalam tugas yang sama
+ Untuk memberikan volume data ke tugas Anda yang dikelola oleh driver pihak ketiga

## Pertimbangan untuk menggunakan volume Docker
<a name="docker-volume-considerations"></a>

Pertimbangkan hal berikut saat menggunakan volume Docker:
+ Volume Docker hanya didukung saat menggunakan tipe peluncuran EC2 atau instance eksternal.
+ Kontainer Windows hanya mendukung penggunaan driver `local`.
+ Jika driver pihak ketiga digunakan, pastikan itu diinstal dan aktif pada instance kontainer sebelum agen kontainer dimulai. Jika driver pihak ketiga tidak aktif sebelum agen dimulai, Anda dapat memulai ulang agen kontainer menggunakan salah satu perintah berikut:
  + Untuk Amazon ECS yang dioptimalkan Amazon Linux 2 AMI:

    ```
    sudo systemctl restart ecs
    ```
  + Untuk Amazon ECS yang dioptimalkan Amazon Linux AMI:

    ```
    sudo stop ecs && sudo start ecs
    ```

Untuk informasi tentang cara menentukan volume Docker dalam definisi tugas, lihat[Menentukan volume Docker dalam definisi tugas Amazon ECS](specify-volume-config.md).

# Menentukan volume Docker dalam definisi tugas Amazon ECS
<a name="specify-volume-config"></a>

Sebelum kontainer Anda dapat menggunakan volume data, Anda harus menentukan konfigurasi volume dan titik pemasangan dalam ketentuan tugas Anda. Bagian ini menjelaskan konfigurasi volume untuk kontainer. Untuk tugas yang menggunakan volume Docker, tentukan `dockerVolumeConfiguration`. Untuk tugas yang menggunakan volume host pemasangan terikat, tentukan `host` dan `sourcePath` opsional.

Definisi tugas berikut JSON menunjukkan sintaks untuk `volumes` dan `mountPoints` objek untuk wadah.

```
{
    "containerDefinitions": [
        {
            "mountPoints": [
                {
                    "sourceVolume": "string",
                    "containerPath": "/path/to/mount_volume",
                    "readOnly": boolean
                }
            ]
        }
    ],
    "volumes": [
        {
            "name": "string",
            "dockerVolumeConfiguration": {
                "scope": "string",
                "autoprovision": boolean,
                "driver": "string",
                "driverOpts": {
                    "key": "value"
                },
                "labels": {
                    "key": "value"
                }
            }
        }
    ]
}
```

`name`  
Tipe: String  
Wajib: Tidak  
Nama volume. Hingga 255 huruf (huruf besar dan kecil), angka, tanda hubung (), dan garis bawah (`-`) diperbolehkan. `_` Nama ini direferensikan dalam `sourceVolume` parameter `mountPoints` objek definisi kontainer.

`dockerVolumeConfiguration`  
Jenis: [DockerVolumeConfiguration](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DockerVolumeConfiguration.html)Objek  
Wajib: Tidak  
Parameter ini ditentukan saat menggunakan volume Docker. Volume Docker hanya didukung saat menjalankan tugas pada instans EC2. Kontainer Windows hanya mendukung penggunaan driver `local`. Untuk menggunakan pemasangan mengikat, tentukan `host` saja.    
`scope`  
Tipe: String  
Nilai Valid: `task` \$1 `shared`  
Wajib: Tidak  
Cakupan untuk volume Docker, yang menentukan siklus hidupnya. Volume Docker yang tercakup ke `task` secara otomatis disediakan saat tugas dimulai dan dihancurkan saat tugas berhenti. Volume Docker yang tercakup sebagai `shared` dipertahankan setelah tugas berhenti.  
`autoprovision`  
Jenis: Boolean  
Nilai default: `false`  
Wajib: Tidak  
Jika nilai ini`true`, volume Docker dibuat jika belum ada. Bidang ini hanya digunakan jika `scope` ada`shared`. Jika `scope` ya`task`, maka parameter ini harus dihilangkan.  
`driver`  
Tipe: String  
Wajib: Tidak  
Driver volume Docker yang digunakan. Nilai driver harus sesuai dengan nama driver yang disediakan oleh Docker karena nama ini digunakan untuk penempatan tugas. Jika driver diinstal dengan menggunakan CLI plugin Docker, `docker plugin ls` gunakan untuk mengambil nama driver dari instance container Anda. Jika driver diinstal dengan menggunakan metode lain, gunakan penemuan plugin Docker untuk mengambil nama driver.  
`driverOpts`  
Tipe: String  
Wajib: Tidak  
Peta opsi khusus driver Docker untuk dilewati. Parameter ini dipetakan ke `DriverOpts` bagian Create a volume dari Docker.  
`labels`  
Tipe: String  
Wajib: Tidak  
Metadata kustom untuk ditambahkan ke volume Docker.

`mountPoints`  
Tipe: Array objek  
Wajib: Tidak  
Titik pemasangan untuk volume data dalam penampung Anda. Parameter ini memetakan ke `Volumes` dalam create-container Docker API dan opsi `--volume` untuk docker run.  
Kontainer Windows dapat memasang seluruh direktori pada drive yang sama dengan `$env:ProgramData`. Kontainer Windows tidak dapat memasang direktori pada drive yang berbeda, dan titik pemasangan tidak dapat digunakan di seluruh drive. Anda harus menentukan titik pemasangan untuk melampirkan volume Amazon EBS langsung ke tugas Amazon ECS.    
`sourceVolume`  
Tipe: String  
Diperlukan: Ya, kapan `mountPoints` digunakan  
Nama volume yang akan dipasang.  
`containerPath`  
Tipe: String  
Diperlukan: Ya, kapan `mountPoints` digunakan  
Jalur dalam wadah tempat volume akan dipasang.  
`readOnly`  
Tipe: Boolean  
Wajib: Tidak  
Jika nilai ini adalah `true`, kontainer memiliki akses hanya-baca ke volume. Jika nilai ini adalah `false`, maka kontainer dapat menulis ke volume. Nilai default-nya adalah `false`.  
Untuk tugas yang berjalan pada instans EC2 yang menjalankan sistem operasi Windows, biarkan nilainya sebagai default. `false`

# Contoh volume Docker untuk Amazon ECS
<a name="docker-volume-examples"></a>

Contoh berikut menunjukkan cara menyediakan penyimpanan sementara untuk wadah dan cara menyediakan volume bersama untuk beberapa kontainer, dan cara menyediakan penyimpanan persisten NFS untuk sebuah wadah.

**Untuk menyediakan penyimpanan sementara untuk wadah menggunakan volume Docker**

Dalam contoh ini, wadah menggunakan volume data kosong yang dibuang setelah tugas selesai. Salah satu contoh kasus penggunaan adalah Anda mungkin memiliki wadah yang perlu mengakses beberapa lokasi penyimpanan file awal selama tugas. Tugas ini dapat dicapai dengan menggunakan volume Docker.

1. Dalam ketentuan tugas bagian `volumes`, tentukan volume data dengan `name` dan nilai `DockerVolumeConfiguration`. Dalam contoh ini, kami menentukan ruang lingkup sebagai `task` jadi volume dihapus setelah tugas berhenti dan menggunakan built-in driver `local`.

   ```
   "volumes": [
       {
           "name": "scratch",
           "dockerVolumeConfiguration" : {
               "scope": "task",
               "driver": "local",
               "labels": {
                   "scratch": "space"
               }
           }
       }
   ]
   ```

1. Di bagian `containerDefinitions`, mendefiniskan sebuah kontainer dengan nilai-nilai `mountPoints` yang mereferensikan nama volume yang didefinisikan dan nilai `containerPath` untuk memasang volume pada kontainer.

   ```
   "containerDefinitions": [
       {
           "name": "container-1",
           "mountPoints": [
               {
                 "sourceVolume": "scratch",
                 "containerPath": "/var/scratch"
               }
           ]
       }
   ]
   ```

**Untuk menyediakan penyimpanan persisten untuk beberapa kontainer menggunakan volume Docker**

Dalam contoh ini, Anda ingin volume bersama untuk beberapa kontainer untuk digunakan dan Anda ingin tetap ada setelah satu tugas yang menggunakannya dihentikan. `local`Driver bawaan sedang digunakan. Ini agar volume masih terikat dengan siklus hidup instance container.

1. Dalam ketentuan tugas bagian `volumes`, tentukan volume data dengan `name` dan nilai `DockerVolumeConfiguration`. Dalam contoh ini, tentukan `shared` cakupan sehingga volume tetap ada, setel penyediaan otomatis ke. `true` Ini agar volume dibuat untuk digunakan. Kemudian, gunakan juga `local` driver bawaan.

   ```
   "volumes": [
       {
           "name": "database",
           "dockerVolumeConfiguration" : {
               "scope": "shared",
               "autoprovision": true,
               "driver": "local",
               "labels": {
                   "database": "database_name"
               }
           }
       }
   ]
   ```

1. Di bagian `containerDefinitions`, mendefiniskan sebuah kontainer dengan nilai-nilai `mountPoints` yang mereferensikan nama volume yang didefinisikan dan nilai `containerPath` untuk memasang volume pada kontainer.

   ```
   "containerDefinitions": [
       {
           "name": "container-1",
           "mountPoints": [
           {
             "sourceVolume": "database",
             "containerPath": "/var/database"
           }
         ]
       },
       {
         "name": "container-2",
         "mountPoints": [
           {
             "sourceVolume": "database",
             "containerPath": "/var/database"
           }
         ]
       }
     ]
   ```

**Untuk menyediakan penyimpanan persisten NFS untuk wadah menggunakan volume Docker**

 Dalam contoh ini, kontainer menggunakan volume data NFS yang dipasang secara otomatis saat tugas dimulai dan dilepas saat tugas berhenti. Ini menggunakan `local` driver bawaan Docker. Salah satu contoh kasus penggunaan adalah Anda mungkin memiliki penyimpanan NFS lokal dan perlu mengaksesnya dari tugas ECS Anywhere. Ini dapat dicapai dengan menggunakan volume Docker dengan opsi driver NFS.

1. Dalam ketentuan tugas bagian `volumes`, tentukan volume data dengan `name` dan nilai `DockerVolumeConfiguration`. Dalam contoh ini, tentukan `task` cakupan sehingga volume dilepas setelah tugas berhenti. Gunakan `local` driver dan konfigurasikan `driverOpts` dengan`type`,`device`, dan `o` opsi yang sesuai. Ganti `NFS_SERVER` dengan endpoint server NFS.

   ```
   "volumes": [
          {
              "name": "NFS",
              "dockerVolumeConfiguration" : {
                  "scope": "task",
                  "driver": "local",
                  "driverOpts": {
                      "type": "nfs",
                      "device": "$NFS_SERVER:/mnt/nfs",
                      "o": "addr=$NFS_SERVER"
                  }
              }
          }
      ]
   ```

1. Di `containerDefinitions` bagian tersebut, tentukan wadah dengan `mountPoints` nilai yang mereferensikan nama volume yang ditentukan dan `containerPath` nilai untuk memasang volume pada wadah.

   ```
   "containerDefinitions": [
          {
              "name": "container-1",
              "mountPoints": [
                  {
                    "sourceVolume": "NFS",
                    "containerPath": "/var/nfsmount"
                  }
              ]
          }
      ]
   ```