View a markdown version of this page

Docker ikhtisar lingkungan antrian - Batas Waktu Cloud

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

Docker ikhtisar lingkungan antrian

Lingkungan Docker antrian default mendeklarasikan ekstensi EXPR dan WRAP_ACTIONS OpenJD. Tindakan masuk dan keluarnya sendiri mengelola Docker daemon tanpa akar dan wadah sesi pada pekerja. Tiga tindakan bungkus menggantikan tindakan lingkungan dalam dan tugas saat lingkungan antrian aktif.

Alur berikut menunjukkan bagaimana lingkungan antrian membungkus tindakan tugas:

  1. Template pekerjaan portabel menyediakan onRun perintah dan argumennya.

  2. Runtime sesi membungkus onRun tindakan asli di dalam onWrapTaskRun alih-alih menjalankan perintah secara langsung.

  3. Hook melewati WrappedAction.CommandWrappedAction.Args,, dan WrappedAction.Environment ke skrip bungkus statis sebagai argumen terpisah.

  4. Script wrap digunakan docker container exec untuk menjalankan perintah asli dan argumen di dalam wadah sesi rootless.

onEnterTindakan lingkungan pembungkus memulai penampung sesi, dan onExit aksinya menghentikan penampung. Container bind-mount direktori session di jalur yang sama. Itu juga dapat mengikat penyimpanan persisten untuk cache yang dapat digunakan kembali.

Template pekerjaan portabel meneruskan tindakan OnRun aslinya ke WrapTaskRun batas on. Tindakan diteruskan ke skrip bungkus statis sebagai WrappedAction nilai dan berjalan di dalam wadah sesi tanpa akar. Lingkungan antrian memulai dan menghentikan penampung, yang memasang direktori sesi dan penyimpanan persisten opsional.
Tindakan lingkungan antrianBerjalan diTujuan
onEnterPekerjaMemulai daemon tanpa akar, mengautentikasi ke Amazon ECR, menarik gambar, dan memulai penampung sesi.
onWrapEnvEnterKontainerMenjalankan tindakan masuk lingkungan batin.
onWrapTaskRunKontainerMenjalankan perintah dan argumen aplikasi setiap tugas.
onWrapEnvExitKontainerMenjalankan tindakan keluar lingkungan batin.
onExitPekerjaMenghentikan penampung sesi, daemon tanpa akar, dan manajer pengguna.

Lingkungan pembungkus harus mendefinisikan ketiga tindakan bungkus. Setiap hook menerima tindakan asli melaluiWrappedAction.Command,WrappedAction.Args, danWrappedAction.Environment. Template paral berikut menunjukkan bagaimana lingkungan default meneruskan nilai-nilai tersebut:

specificationVersion: "environment-2023-09" extensions: - WRAP_ACTIONS - EXPR environment: name: DockerContainer script: actions: onWrapEnvEnter: command: bash args: - "{{Env.File.Wrap}}" - "{{ flatten([['-e', e] for e in WrappedAction.Environment]) }}" - "--" - "{{WrappedAction.Command}}" - "{{WrappedAction.Args}}" onWrapTaskRun: command: bash args: - "{{Env.File.Wrap}}" - "{{ flatten([['-e', e] for e in WrappedAction.Environment]) }}" - "--" - "{{WrappedAction.Command}}" - "{{WrappedAction.Args}}" onWrapEnvExit: command: bash args: - "{{Env.File.Wrap}}" - "{{ flatten([['-e', e] for e in WrappedAction.Environment]) }}" - "--" - "{{WrappedAction.Command}}" - "{{WrappedAction.Args}}"

Skrip wrap menerima perintah sebagai vektor argumen dan menjalankan aksi asli di dalam rootless Docker sebagai identitas yang tidak job-user memiliki hak istimewa. Skrip hanya meneruskan variabel lisensi berbasis penggunaan yang diketahui dari host. Itu tidak meneruskan AWS kredensyal ke dalam wadah.

Lingkungan default memasang direktori kerja sesi di jalur yang sama. Ini memilih GPU melalui Container Device Interface (CDI) bila tersedia dan menyebarkan status keluar tindakan yang dibungkus. Untuk detail berbagi data, lihat. Bagikan direktori kerja sesi

Sesuaikan Docker lingkungan antrian

Konsol membuat lingkungan Docker antrian default. Anda dapat menggunakan template tersebut sebagai titik awal untuk pemasangan khusus aplikasi, variabel lingkungan, jaringan, pemilihan gambar, dan opsi runtime. Pertahankan siklus hidup daemon tanpa akar, pemasangan direktori sesi, dan ketiga kait bungkus saat Anda menyesuaikan template.

EXPREkstensi mendukung ekspresi bersyarat. Contoh enter-script parsi berikut memilih antara dua gambar dan menambahkan argumen GPU hanya jika parameter benar: UseGpu

IMAGE={{ repr_sh(Param.GpuImage if Param.UseGpu else Param.CpuImage) }} GPU_ARGS=({{ repr_sh(['--gpus', 'all'] if Param.UseGpu else []) }}) docker container run \ --rm \ --detach \ "${GPU_ARGS[@]}" \ --mount {{ repr_sh("type=bind,src=" + Session.WorkingDirectory + ",dst=" + Session.WorkingDirectory) }} \ --workdir {{ repr_sh(Session.WorkingDirectory) }} \ "$IMAGE"

Anda juga dapat memilih skrip pembungkus secara kondisional di setiap kait. Tindakan parsi berikut memilih pembungkus kontainer atau pembungkus host dari satu parameter lingkungan antrian:

onWrapTaskRun: command: bash args: - "{{ Env.File.WrapContainer if Param.RunInContainer else Env.File.WrapHost }}" - "{{ flatten([['-e', e] for e in WrappedAction.Environment]) }}" - "--" - "{{WrappedAction.Command}}" - "{{WrappedAction.Args}}"

Gunakan kondisi runtime yang sama untukonWrapEnvEnter,onWrapTaskRun, danonWrapEnvExit. Menjaga semua fase siklus hidup dalam runtime yang sama mencegah lingkungan batin masuk dalam satu konteks dan keluar di konteks lain. WRAP_ACTIONSEkstensi membutuhkan ketiga kait bahkan ketika suatu kondisi memilih pembungkus host.

Pembungkus host harus menerapkanWrappedAction.Environment, mempertahankan batas argumen asli, dan mengembalikan status keluar tindakan yang dibungkus. Lulus nilai perintah dan argumen sebagai vektor argumen. Jangan menggabungkan nilai mentah ke dalam string untukbash -c. Untuk mengutip aturan, lihatKonstruksi komando dan melarikan diri.

Spesifikasi OpenJD

Proposal bahasa ekspresi OpenJD di GitHub situs web mendefinisikan evaluasi ekspresi, jalur yang diketik, dan simbol sesi.

Proposal perpustakaan fungsi ekspresi OpenJD di GitHub situs web mendefinisikan flatten dan fungsinya. repr_*

Proposal tipe parameter yang diperluas OpenJD di GitHub situs web mendefinisikan parameter bernilai daftar yang dapat digunakan templat portabel.

Proposal tindakan pembungkus lingkungan OpenJD di GitHub situs web mendefinisikan tiga kait dan nilai bungkus. WrappedAction.*