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:
Template pekerjaan portabel menyediakan
onRunperintah dan argumennya.Runtime sesi membungkus
onRuntindakan asli di dalamonWrapTaskRunalih-alih menjalankan perintah secara langsung.Hook melewati
WrappedAction.CommandWrappedAction.Args,, danWrappedAction.Environmentke skrip bungkus statis sebagai argumen terpisah.Script wrap digunakan
docker container execuntuk 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.
| Tindakan lingkungan antrian | Berjalan di | Tujuan |
|---|---|---|
onEnter | Pekerja | Memulai daemon tanpa akar, mengautentikasi ke Amazon ECR, menarik gambar, dan memulai penampung sesi. |
onWrapEnvEnter | Kontainer | Menjalankan tindakan masuk lingkungan batin. |
onWrapTaskRun | Kontainer | Menjalankan perintah dan argumen aplikasi setiap tugas. |
onWrapEnvExit | Kontainer | Menjalankan tindakan keluar lingkungan batin. |
onExit | Pekerja | Menghentikan 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
Proposal perpustakaan fungsi ekspresi OpenJDflatten dan fungsinya. repr_*
Proposal tipe parameter yang diperluas OpenJD
Proposal tindakan pembungkus lingkungan OpenJDWrappedAction.*