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
.sizeInGiB
harus integer antara nilai-nilai21
dan200
dinyatakan 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
containerDefinitions
bagian 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
examplefile
di/var/log/exported
direktori yang ingin kita pasang di dalam wadah. DirektifVOLUME
harus menentukan jalur absolut.FROM public.ecr.aws/amazonlinux/amazonlinux:latest RUN mkdir -p
/var/log/exported
RUN touch/var/log/exported/examplefile
VOLUME ["/var/log/exported
"]Secara default, izin volume diatur ke
0755
dan pemilik sebagairoot
. Izin ini dapat diubah di Dockerfile. Contoh berikut mendefinisikan pemilik direktori/var/log/exported
diatur kenode
.FROM public.ecr.aws/amazonlinux/amazonlinux:latest RUN yum install -y shadow-utils && yum clean all RUN useradd
node
RUN mkdir -p /var/log/exported && chownnode
:node
/var/log/exported USERnode
RUN touch /var/log/exported/examplefile VOLUME ["/var/log/exported"] -
Dalam ketentuan tugas bagian
volumes
, tentukan volume dengan namaapplication_logs
."volumes": [ { "name": "
application_logs
" } ] -
Di
containerDefinitions
bagian ini, buat definisi wadah aplikasi. Ini agar mereka memasang penyimpanan.containerPath
Nilai harus cocok dengan jalur absolut yang ditentukan dalamVOLUME
arahan 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 denganname
dan nilaisourcePath
. Dalam contoh berikut, EC2 instance Amazon host berisi data/ecs/webdata
yang ingin Anda pasang di dalam wadah."volumes": [ { "name": "
webdata
", "host": { "sourcePath": "/ecs/webdata
" } } ] -
Di bagian
containerDefinitions
, mendefiniskan sebuah kontainer dengan nilai-nilaimountPoints
yang mereferensikan nama pemasangan terikat dan nilaicontainerPath
untuk 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 namawebroot
dan jalur sumber/data/webroot
."volumes": [ { "name": "
webroot
", "host": { "sourcePath": "/data/webroot
" } } ] -
Di bagian
containerDefinitions
, tentukan kontainer untuk setiap server web dengan nilai-nilaimountPoints
yang mengasosiasikan volumewebroot
dengan nilaicontainerPath
menunjuk 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
VOLUME
instruksi di Dockerfile. Contoh berikut Dockerfile menggunakanhttpd
gambar, dan kemudian menambahkan volume dan memasangnyadockerfile_volume
di root dokumen Apache. Ini adalah folder yang digunakan oleh serverhttpd
web.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_volume
gambar 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
volumes
ini, Anda akan membuat volume kosong yang disebutempty
, yang dikelola oleh daemon Docker. Ada juga volume host yang ditentukan yang disebuthost_etc
. Ini mengekspor/etc
folder 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,
web
wadah memasanghost_etc
volumeempty
dan. 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
volumesFrom
untuk memasang semua volume yang terkait dengan kontainerweb
. Semua volume padaweb
wadah juga dipasang padabusybox
wadah. 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
command
dalambusybox
wadah menulis tanggal dan waktu ke file. File ini dipanggildate
di setiap folder volume. Folder kemudian terlihat di situs web yang ditampilkan oleh kontainerweb
.catatan
Karena kontainer
busybox
menjalankan perintah cepat dan kemudian keluar, itu harus ditetapkan sebagai"essential": false
dalam ketentuan kontainer. Jika tidak, kontainer berhenti seluruh tugas ketika keluar.