

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

# Docker ikhtisar lingkungan antrian
<a name="containers-queue-environment"></a>

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.

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

1. Hook melewati `WrappedAction.Command``WrappedAction.Args`,, dan `WrappedAction.Environment` ke skrip bungkus statis sebagai argumen terpisah.

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

`onEnter`Tindakan 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.](https://docs.aws.amazon.com/id_id/deadline-cloud/latest/developerguide/images/wrap-actions-flow.png)



| 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 melalui`WrappedAction.Command`,`WrappedAction.Args`, dan`WrappedAction.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](containers-share-session-directory.md)

## Sesuaikan Docker lingkungan antrian
<a name="containers-queue-customize"></a>

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.

`EXPR`Ekstensi 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 untuk`onWrapEnvEnter`,`onWrapTaskRun`, dan`onWrapEnvExit`. Menjaga semua fase siklus hidup dalam runtime yang sama mencegah lingkungan batin masuk dalam satu konteks dan keluar di konteks lain. `WRAP_ACTIONS`Ekstensi membutuhkan ketiga kait bahkan ketika suatu kondisi memilih pembungkus host.

Pembungkus host harus menerapkan`WrappedAction.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 untuk`bash -c`. Untuk mengutip aturan, lihat[Konstruksi komando dan melarikan diri](containers-security.md#containers-security-command-construction).

## Spesifikasi OpenJD
<a name="containers-openjd-references"></a>

[Proposal bahasa ekspresi OpenJD](https://github.com/OpenJobDescription/openjd-specifications/blob/mainline/rfcs/0005-expression-language.md) di GitHub situs web mendefinisikan evaluasi ekspresi, jalur yang diketik, dan simbol sesi.

[Proposal perpustakaan fungsi ekspresi OpenJD](https://github.com/OpenJobDescription/openjd-specifications/blob/mainline/rfcs/0006-expression-function-library.md) di GitHub situs web mendefinisikan `flatten` dan fungsinya. `repr_*`

[Proposal tipe parameter yang diperluas OpenJD](https://github.com/OpenJobDescription/openjd-specifications/blob/mainline/rfcs/0007-extend-parameter-types.md) di GitHub situs web mendefinisikan parameter bernilai daftar yang dapat digunakan templat portabel.

[Proposal tindakan pembungkus lingkungan OpenJD](https://github.com/OpenJobDescription/openjd-specifications/blob/mainline/rfcs/0008-environment-wrap-actions.md) di GitHub situs web mendefinisikan tiga kait dan nilai bungkus. `WrappedAction.*`