Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Contoh Bind mount untuk Amazon ECS
Contoh berikut mencakup kasus penggunaan umum untuk menggunakan dudukan pengikat untuk wadah Anda.
Untuk mengalokasikan peningkatan jumlah ruang penyimpanan sementara untuk tugas Fargate
Untuk tugas Amazon ECS yang di-host di Fargate menggunakan 1.4.0 versi platform atau yang lebih baru (Linux) 1.0.0 atau (Windows), Anda dapat mengalokasikan lebih dari jumlah penyimpanan sementara default untuk wadah dalam tugas yang akan 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 ini, 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 di-host di instance Fargate atau Amazon EC2 .
-
Buat Dockerfile. Contoh berikut menggunakan image kontainer Amazon Linux 2 publik dan membuat file yang diberi nama
examplefiledalam/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 ini, buat definisi wadah aplikasi. Ini agar mereka memasang penyimpanan.containerPathNilai harus cocok dengan jalur absolut yang ditentukan dalamVOLUMEarahan dari 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 container yang terkait dengan siklus hidup instance Amazon host EC2
Untuk tugas yang di-host di EC2 instans Amazon, Anda dapat menggunakan mount bind dan mengikat data ke siklus hidup instans Amazon host. EC2 Anda dapat melakukan ini dengan menggunakan host parameter dan menentukan sourcePath nilai. File apa pun yang ada di sourcePath disajikan ke wadah pada containerPath nilainya. File apa pun yang ditulis dengan containerPath nilai ditulis ke sourcePath nilai pada EC2 instance Amazon host.
penting
Amazon ECS tidak menyinkronkan penyimpanan Anda di seluruh EC2 instans Amazon. Tugas yang menggunakan penyimpanan persisten dapat ditempatkan pada EC2 instans Amazon apa pun di klaster Anda yang memiliki kapasitas yang tersedia. Jika tugas Anda memerlukan penyimpanan persisten setelah berhenti dan memulai ulang, selalu tentukan EC2 instance Amazon 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, EC2 instance Amazon host 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 me-mount 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 kontainer lain menggunakan volumesFrom.
Untuk tugas yang dihosting di EC2 instans Amazon, Anda dapat menentukan satu atau beberapa volume pada penampung, lalu menggunakan volumesFrom parameter dalam definisi penampung 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. Contoh
my-repo/httpd_dockerfile_volumegambar yang digunakan dalam langkah-langkah berikut dibuat 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 ditentukan yang disebuthost_etc. Ini mengekspor/etcfolder pada instance wadah 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 } ] }Saat tugas ini dijalankan, kedua kontainer memasang volume, dan
commanddalambusyboxwadah 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.