GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Cara Menyederhanakan File Penulisan Docker Dengan Jangkar dan Ekstensi YAML

Docker Compose memungkinkan Anda mengelola beberapa container Docker dan sumber daya terkaitnya seperti volume dan jaringan. Anda menulis file YAML deklaratif yang digunakan Compose untuk membuat tumpukan penampung Anda.

docker-compose.yml Your Anda file dapat menjadi berulang saat Anda bekerja dengan tumpukan yang kompleks. Layanan mungkin berbagi opsi konfigurasi, menyebabkan Anda menduplikasi bagian file Anda. Pembaruan selanjutnya dapat menyebabkan kesalahan jika Anda lupa memperbarui setiap bagian dari suatu bagian.

Karena file Compose adalah file YAML biasa, Anda dapat memanfaatkan fitur YAML bawaan untuk memodulasi definisi tumpukan Anda. Jangkar, alias, dan ekstensi memungkinkan Anda mengabstraksi bagian YAML menjadi blok yang dapat digunakan kembali. Anda dapat menambahkan referensi ke bagian di setiap tempat yang dibutuhkan.

Apa Itu Jangkar?

Jangkar YAML adalah fitur yang memungkinkan Anda mengidentifikasi item dan kemudian merujuknya ke tempat lain di file Anda. Jangkar dibuat menggunakan & tanda. Tanda tersebut diikuti dengan nama alias. Anda dapat menggunakan alias ini nanti untuk mereferensikan nilai setelah jangkar.

Berikut cara menggunakan anchor untuk menghindari pengulangan kebijakan restart container:

services:
  httpd:
    image: httpd:latest
    restart: &restartpolicy unless-stopped
  mysql:
    image: mysql:latest
    restart: *restartpolicy

Jangkar direferensikan menggunakan * karakter dan aliasnya. Anda harus memastikan tidak ada spasi di antara & /* karakter dan nama alias berikut.

Contoh ini menunjukkan bagaimana nilai satu baris dapat digunakan kembali dengan jangkar. Mengubah kebijakan mulai ulang tumpukan sekarang dapat dilakukan di satu tempat, tanpa mengedit layanan satu per satu.

Jangkar Multi-Baris

Jangkar dapat memiliki nilai multi-baris. Anda membuatnya menggunakan sintaks yang sama sebagai jangkar satu baris. Ini berguna saat Anda perlu memberikan serangkaian detail konfigurasi ke beberapa layanan.

services:
  first:
    image: my-image:latest
    environment: &env
      - CONFIG_KEY
      - EXAMPLE_KEY
      - DEMO_VAR
  second:
    image: another-image:latest
    environment: *env

second service sekarang akan menarik variabel lingkungan yang sama dengan first . Kami tidak perlu mengulang daftar variabel lingkungan, membuatnya jauh lebih mudah dipelihara di masa mendatang.

Memperluas Nilai Jangkar

Contoh lingkungan di atas mengambil nilai jangkar dan menggunakannya apa adanya. Anda akan sering ingin memperpanjang jangkar untuk menambahkan nilai tambahan. Anda dapat melakukannya dengan sintaks alternatif.

Ubah second layanan sebagai berikut:

services:
  second:
    image: another-image:latest
    environment:
      <<: *env
      - AN_EXTRA_KEY
      - SECOND_SPECIFIC_KEY

Layanan sekarang menarik konfigurasi lingkungan dasar dari env jangkar. Kunci tambahan kemudian ditambahkan ke daftar lingkungan. Anda juga dapat mengganti kunci yang ada yang ditentukan oleh jangkar.

Menggunakan Bidang Ekstensi

Pendekatan lain untuk modularisasi adalah bidang ekstensi. Ini adalah fragmen YAML tingkat atas khusus yang akan diabaikan oleh Docker.

Docker biasanya mencoba menginterpretasikan node apa pun di root file Compose. Pengurai akan mengabaikan bidang ekstensi yang diawali dengan x- . Anda dapat menggunakan bidang ini untuk merangkum konfigurasi bersama untuk referensi nanti. Gabungkan bidang ekstensi dengan jangkar ke bagian abstrak dari definisi layanan Anda.

x-env: &env
  environment:
    - CONFIG_KEY
    - EXAMPLE_KEY
 
services:
  first:
    <<: *env
    image: my-image:latest
  second:
    <<: *env
    image: another-image:latest

File Compose ini merupakan penyempurnaan lebih lanjut dari contoh yang ditunjukkan di atas. Variabel lingkungan tidak lagi menjadi milik salah satu layanan. Mereka telah diangkat sepenuhnya, ke dalam x-env bidang ekstensi.

Ini mendefinisikan node baru yang berisi environment bidang. Jangkar YAML digunakan (&env ) sehingga kedua layanan dapat mereferensikan nilai bidang ekstensi.

Komposabilitas

Memanfaatkan fitur-fitur ini memungkinkan Anda memecah file Compose menjadi potongan-potongan mandiri. Ini membantu Anda menghindari definisi layanan yang terlalu berulang. Apa pun yang umum untuk lebih dari satu layanan harus diangkat ke bidang ekstensi.

Selain membantu pemeliharaan, praktik ini mengomunikasikan niat Anda kepada kolaborator lain. Jelas bahwa setiap bidang ekstensi tingkat atas berisi bidang umum. Mereka tidak terikat pada layanan tertentu dan dapat digunakan kembali secara bebas.

Jangkar dan bidang ekstensi memungkinkan Anda menulis definisi layanan Anda dari blok YAML yang dapat digunakan kembali. Dengan menjaga agar setiap bidang tetap kecil, layanan Anda dapat mencampur dan mencocokkan bagian konfigurasi dari jangkar yang tersedia. Memelihara file Compose Anda seharusnya tidak terlalu merepotkan.

Pendekatan Lain untuk Modularitas

Selain jangkar dan ekstensi, jangan lupa Anda selalu dapat membagi definisi Tulis Anda menjadi beberapa file Tulis. Ini mungkin diperlukan jika Anda memiliki lebih dari beberapa layanan individual.

Menggunakan beberapa file Tulis memungkinkan Anda mengalokasikan setiap layanan filenya sendiri. Anda juga dapat membuat file override, di mana nilai node diganti atau diperpanjang. Compose akan menggabungkan semua file menjadi satu untuk membuat konfigurasi runtime akhir.

service.yml

services:
  service:
    image: my-image:latest

service-dev.yml

services:
  service:
    environment:
      - DEV_MODE=true

Dalam contoh ini, menerapkan kedua file Compose akan menghasilkan satu layanan, my-image:latest , dengan DEV_MODE himpunan variabel lingkungan. Untuk menggunakan beberapa file dengan Compose CLI, teruskan -f bendera:

docker-compose -f service.yml -f service-dev.yml up -d

File digabungkan dalam urutan yang ditentukan.

Ringkasan

File Docker Compose bisa menjadi berat dan berulang. Jika Anda menghabiskan waktu untuk menyalin nilai, pertimbangkan untuk mengabstraksikan bagian layanan Anda ke dalam blok YAML khusus.

Fitur seperti jangkar dan ekstensi membantu pemeliharaan dan membuat pengalaman penulisan lebih mudah. Tidak semua file Compose akan mendapat manfaat – beberapa layanan mungkin memiliki sedikit kesamaan satu sama lain – jadi nilai tumpukan spesifik Anda sebelum memulai.


Docker
  1. Cara menginstal dan menghosting server OpenVPN dengan Docker

  2. Cara Mengamankan Data Sensitif Dengan Rahasia Penulisan Docker

  3. Cara Menginstal dan Menggunakan Docker Compose di CentOS

  1. Cara Menyebarkan dan Mengelola MongoDB dengan Docker

  2. Cara Menginstal dan Menggunakan Docker Compose di Ubuntu 18.04

  3. Cara Menggunakan Profil Layanan untuk Menyederhanakan Tumpukan di Docker Compose

  1. Cara Menginstal dan Menggunakan Docker Compose di CentOS 7

  2. Siapkan lingkungan Pengembangan Ruby on Rails dengan Docker dan Docker Compose di Ubuntu

  3. Cara Menginstal dan Menggunakan Docker Compose di Ubuntu 20.04