Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Contoh pemasangan bind untuk Amazon ECS
Contoh berikut mencakup kasus penggunaan umum untuk menggunakan bind mount untuk wadah Anda.
Untuk mengalokasikan peningkatan jumlah ruang penyimpanan sementara untuk tugas Fargate
Untuk tugas Amazon ECS yang dihosting di Fargate menggunakan versi platform 1.4.0 atau yang lebih baru (Linux) atau 1.0.0 (Windows), Anda dapat mengalokasikan lebih dari jumlah default penyimpanan sementara untuk wadah dalam tugas Anda untuk digunakan. Contoh ini dapat dimasukkan ke dalam contoh lain untuk mengalokasikan lebih banyak penyimpanan sementara untuk tugas Fargate Anda.
-
Dalam ketentuan tugas, tentukan objek
ephemeralStorage.sizeInGiBharus integer antara nilai-nilai21dan200dinyatakan dalam GiB."ephemeralStorage": { "sizeInGiB":integer}
Untuk menyediakan volume data kosong untuk satu atau lebih kontainer.
Dalam beberapa kasus, Anda ingin menyediakan kontainer dalam tugas beberapa ruang scratch. Misalnya, Anda mungkin memiliki dua wadah database yang perlu mengakses lokasi penyimpanan file awal yang sama selama tugas. Hal ini dapat dicapai dengan menggunakan pemasangan terikat.
-
Dalam ketentuan tugas bagian
volumes, tentukan pemasangan terikat dengan namadatabase_scratch."volumes": [ { "name": "database_scratch" } ] -
Di
containerDefinitionsbagian tersebut, buat definisi wadah database. Ini agar mereka memasang volume."containerDefinitions": [ { "name": "database1", "image": "my-repo/database", "cpu": 100, "memory": 100, "essential": true, "mountPoints": [ { "sourceVolume": "database_scratch", "containerPath": "/var/scratch" } ] }, { "name": "database2", "image": "my-repo/database", "cpu": 100, "memory": 100, "essential": true, "mountPoints": [ { "sourceVolume": "database_scratch", "containerPath": "/var/scratch" } ] } ]
Untuk mengekspos jalur dan isinya dari Dockerfile ke kontainer.
Dalam contoh ini, Anda memiliki Dockerfile yang menulis data yang ingin Anda pasang di dalam kontainer. Contoh ini berfungsi untuk tugas yang dihosting di instans Fargate atau Amazon EC2.
-
Buat Dockerfile. Contoh berikut menggunakan image container Amazon Linux 2 publik dan membuat file yang diberi nama
examplefiledi/var/log/exporteddirektori yang ingin kita pasang di dalam wadah. DirektifVOLUMEharus menentukan jalur absolut.FROM public.ecr.aws/amazonlinux/amazonlinux:latest RUN mkdir -p/var/log/exportedRUN touch/var/log/exported/examplefileVOLUME ["/var/log/exported"]Secara default, izin volume diatur ke
0755dan pemilik sebagairoot. Izin ini dapat diubah di Dockerfile. Contoh berikut mendefinisikan pemilik direktori/var/log/exporteddiatur kenode.FROM public.ecr.aws/amazonlinux/amazonlinux:latest RUN yum install -y shadow-utils && yum clean all RUN useraddnodeRUN mkdir -p /var/log/exported && chownnode:node/var/log/exported USERnodeRUN touch /var/log/exported/examplefile VOLUME ["/var/log/exported"] -
Dalam ketentuan tugas bagian
volumes, tentukan volume dengan namaapplication_logs."volumes": [ { "name": "application_logs" } ] -
Di
containerDefinitionsbagian tersebut, buat definisi wadah aplikasi. Ini agar mereka memasang penyimpanan.containerPathNilai harus sesuai dengan jalur absolut yang ditentukan dalam direktifVOLUMEdari Dockerfile."containerDefinitions": [ { "name": "application1", "image": "my-repo/application", "cpu": 100, "memory": 100, "essential": true, "mountPoints": [ { "sourceVolume": "application_logs", "containerPath": "/var/log/exported" } ] }, { "name": "application2", "image": "my-repo/application", "cpu": 100, "memory": 100, "essential": true, "mountPoints": [ { "sourceVolume": "application_logs", "containerPath": "/var/log/exported" } ] } ]
Untuk menyediakan volume data kosong untuk wadah yang terkait dengan siklus hidup instans host Amazon EC2
Untuk tugas yang dihosting di instans Amazon EC2, Anda dapat menggunakan bind mount dan memiliki data terkait dengan siklus hidup instans Amazon EC2 host. Anda dapat melakukan ini dengan menggunakan host parameter dan menentukan sourcePath nilai. Setiap file yang ada di sourcePath disajikan ke wadah pada containerPath nilai tersebut. Setiap file yang ditulis ke containerPath nilai ditulis ke sourcePath nilai pada instans host Amazon EC2.
penting
Amazon ECS tidak menyinkronkan penyimpanan Anda di seluruh instans Amazon EC2. Tugas yang menggunakan penyimpanan persisten dapat ditempatkan pada instans Amazon EC2 apa pun di cluster Anda yang memiliki kapasitas tersedia. Jika tugas Anda memerlukan penyimpanan persisten setelah berhenti dan memulai ulang, selalu tentukan instans Amazon EC2 yang sama pada waktu peluncuran tugas dengan perintah AWS CLI start- task. Anda juga dapat menggunakan volume Amazon EFS untuk penyimpanan persisten. Untuk informasi selengkapnya, lihat Gunakan volume Amazon EFS dengan Amazon ECS.
-
Dalam ketentuan tugas bagian
volumes, tentukan pemasangan terikat dengannamedan nilaisourcePath. Dalam contoh berikut, instans host Amazon EC2 berisi data/ecs/webdatayang ingin Anda pasang di dalam wadah."volumes": [ { "name": "webdata", "host": { "sourcePath": "/ecs/webdata" } } ] -
Di bagian
containerDefinitions, mendefiniskan sebuah kontainer dengan nilai-nilaimountPointsyang mereferensikan nama pemasangan terikat dan nilaicontainerPathuntuk memasang pemasangan terikat pada kontainer."containerDefinitions": [ { "name": "web", "image": "public.ecr.aws/docker/library/nginx:latest", "cpu": 99, "memory": 100, "portMappings": [ { "containerPort": 80, "hostPort": 80 } ], "essential": true, "mountPoints": [ { "sourceVolume": "webdata", "containerPath": "/usr/share/nginx/html" } ] } ]
Untuk memasang volume yang ditetapkan pada beberapa kontainer di lokasi yang berbeda
Anda dapat menentukan volume data dalam ketentuan tugas dan memasang volume tersebut di lokasi yang berbeda pada kontainer yang berbeda. Misalnya, wadah host Anda memiliki folder data situs web di/data/webroot. Anda mungkin ingin memasang volume data tersebut sebagai read-only pada dua server web berbeda yang memiliki akar dokumen yang berbeda.
-
Dalam ketentuan tugas bagian
volumes, tentukan volume data dengan namawebrootdan jalur sumber/data/webroot."volumes": [ { "name": "webroot", "host": { "sourcePath": "/data/webroot" } } ] -
Di bagian
containerDefinitions, tentukan kontainer untuk setiap server web dengan nilai-nilaimountPointsyang mengasosiasikan volumewebrootdengan nilaicontainerPathmenunjuk ke akar dokumen untuk kontainer itu."containerDefinitions": [ { "name": "web-server-1", "image": "my-repo/ubuntu-apache", "cpu": 100, "memory": 100, "portMappings": [ { "containerPort": 80, "hostPort": 80 } ], "essential": true, "mountPoints": [ { "sourceVolume": "webroot", "containerPath": "/var/www/html", "readOnly": true } ] }, { "name": "web-server-2", "image": "my-repo/sles11-apache", "cpu": 100, "memory": 100, "portMappings": [ { "containerPort": 8080, "hostPort": 8080 } ], "essential": true, "mountPoints": [ { "sourceVolume": "webroot", "containerPath": "/srv/www/htdocs", "readOnly": true } ] } ]
Untuk memasang volume dari wadah lain menggunakan VolumesFrom
Untuk tugas yang dihosting di instans Amazon EC2, Anda dapat menentukan satu atau lebih volume pada wadah, lalu menggunakan volumesFrom parameter dalam definisi wadah yang berbeda dalam tugas yang sama untuk memasang semua volume dari titik pemasangan yang ditentukan semula. sourceContainer ParametervolumesFrom berlaku untuk volume yang didefinisikan dalam ketentuan tugas, dan volume yang dibangun ke dalam citra dengan Dockerfile.
-
(Opsional) Untuk berbagi volume yang dibangun ke dalam gambar, gunakan
VOLUMEinstruksi di Dockerfile. Contoh berikut Dockerfile menggunakanhttpdgambar, dan kemudian menambahkan volume dan memasangnyadockerfile_volumedi root dokumen Apache. Ini adalah folder yang digunakan oleh serverhttpdweb.FROM httpd VOLUME ["/usr/local/apache2/htdocs/dockerfile_volume"]Anda dapat membangun citra dengan Dockerfile ini dan mendorongnya ke repositori, seperti Docker Hub, dan menggunakannya dalam ketentuan tugas Anda.
my-repo/httpd_dockerfile_volumeGambar contoh yang digunakan dalam langkah-langkah berikut dibangun dengan Dockerfile sebelumnya. -
Buat ketentuan tugas yang mendefinisikan volume lain dan memasang titik untuk kontainer. Dalam contoh bagian
volumesini, Anda akan membuat volume kosong yang disebutempty, yang dikelola oleh daemon Docker. Ada juga volume host yang didefinisikan yang disebuthost_etc. Ini mengekspor/etcfolder pada instance kontainer host.{ "family": "test-volumes-from", "volumes": [ { "name": "empty", "host": {} }, { "name": "host_etc", "host": { "sourcePath": "/etc" } } ],Di bagian ketentuan kontainer, buat kontainer yang memasang volume yang didefinisikan sebelumnya. Dalam contoh ini,
webwadah memasanghost_etcvolumeemptydan. Ini adalah wadah yang menggunakan gambar yang dibangun dengan volume di Dockerfile."containerDefinitions": [ { "name": "web", "image": "my-repo/httpd_dockerfile_volume", "cpu": 100, "memory": 500, "portMappings": [ { "containerPort": 80, "hostPort": 80 } ], "mountPoints": [ { "sourceVolume": "empty", "containerPath": "/usr/local/apache2/htdocs/empty_volume" }, { "sourceVolume": "host_etc", "containerPath": "/usr/local/apache2/htdocs/host_etc" } ], "essential": true },Buat kontainer lain yang menggunakan
volumesFromuntuk memasang semua volume yang terkait dengan kontainerweb. Semua volume padawebwadah juga dipasang padabusyboxwadah. Ini termasuk volume yang ditentukan dalam Dockerfile yang digunakan untuk membangun gambar.my-repo/httpd_dockerfile_volume{ "name": "busybox", "image": "busybox", "volumesFrom": [ { "sourceContainer": "web" } ], "cpu": 100, "memory": 500, "entryPoint": [ "sh", "-c" ], "command": [ "echo $(date) > /usr/local/apache2/htdocs/empty_volume/date && echo $(date) > /usr/local/apache2/htdocs/host_etc/date && echo $(date) > /usr/local/apache2/htdocs/dockerfile_volume/date" ], "essential": false } ] }Ketika tugas ini dijalankan, dua wadah memasang volume, dan
commanddi dalambusyboxwadah menulis tanggal dan waktu ke file. File ini dipanggildatedi setiap folder volume. Folder kemudian terlihat di situs web yang ditampilkan oleh kontainerweb.catatan
Karena kontainer
busyboxmenjalankan perintah cepat dan kemudian keluar, itu harus ditetapkan sebagai"essential": falsedalam ketentuan kontainer. Jika tidak, kontainer berhenti seluruh tugas ketika keluar.