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

Mengambil Keuntungan dari Variabel Lingkungan komposisi buruh pelabuhan

Jika Anda perlu menentukan berbagai nilai konfigurasi, variabel lingkungan adalah teman terbaik Anda. Seperti banyak alat, Docker dan, lebih khusus lagi, Docker Compose dapat mendefinisikan dan membaca variabel lingkungan untuk membantu menjaga konfigurasi Anda tetap bersih dan modular. Tutorial ini mengajarkan Anda cara menggunakan docker-compose variabel lingkungan untuk menentukan wadah, lingkungan, dan lainnya yang berbeda.

Prasyarat

Jika Anda ingin mengikuti langkah demi langkah, pastikan Anda memiliki hal berikut:

  • Host Linux dengan hak istimewa admin. Tutorial ini menggunakan Ubuntu 18.04.5 LTS.
  • Docker diinstal pada host Linux. Tutorial ini menggunakan Docker v19.03.11.

Mendeklarasikan Variabel Lingkungan di File Penulisan Docker

Kontainer dapat menuntut banyak konfigurasi. Dan tidak setiap konfigurasi di wadah Anda akan unik. Beberapa pengaturan mungkin dibagikan di beberapa wadah Anda, seperti kredensial database MySQL. Simpan kredensial secara manual di setiap penampung, dan saat kredensial berubah, Anda akhirnya harus memperbarui kredensial beberapa kali.

Variabel lingkungan dapat mengurangi kerumitan itu. Simpan pengaturan bersama itu sebagai variabel lingkungan! Referensikan variabel lingkungan alih-alih mengulangi diri Anda sendiri dalam wadah. Saat kredensial berubah, Anda hanya perlu memperbarui satu setelan:variabel lingkungan.

Mari kita mulai dengan mendeklarasikan variabel lingkungan dan menyimpannya di file Docker Compose itu sendiri. Langkah-langkah di bawah ini akan menyimpan pengaturan untuk database MySQL hipotetis dalam variabel lingkungan.

1. Buka terminal di komputer lokal Anda.

2. Buat folder bernama ~/docker-compose-demo, lalu ubah (cd ) direktori kerja ke folder yang baru saja Anda buat. ~/docker-compose-demo folder akan berisi semua file yang akan Anda buat dalam tutorial ini.

mkdir ~/docker-compose-demo
cd ~/docker-compose-demo

3. Buka editor teks favorit Anda, salin/tempel kode di cuplikan di bawah ini di editor teks. Simpan file sebagai docker-compose.yml di dalam ~/docker-compose-demo direktori. docker-compose.yml menyimpan konfigurasi untuk layanan aplikasi Anda.

Pada cuplikan kode di bawah ini:

  • mysql:5.7 adalah gambar dasar yang ditarik oleh Docker Compose dan membuat wadah baru.
  • MYSQL_ROOT_PASSWORD , MYSQL_ALLOW_EMPTY_PASSWORD , dan MYSQL_RANDOM_ROOT_PASSWORD adalah tiga variabel lingkungan yang berbeda dalam file Docker Compose. Setiap variabel lingkungan dideklarasikan dengan nilainya. Nilai yang didapat variabel lingkungan muncul setelah: simbol.
  • mysql service akan membuat wadah bernama mysql .
# Version of Docker compose file
version: "2.2"

services:
# Defining the service
  mysql:
# Defining the base image to be used 
    image: mysql:5.7
    hostname: mysql
    container_name: mysql
# Defining the environmental variable
    environment:
      # ENVIRONMET_VARIABLE_NAME: "environment variable value" 
      MYSQL_ROOT_PASSWORD: "root_password"
      MYSQL_ALLOW_EMPTY_PASSWORD: "password"
      MYSQL_RANDOM_ROOT_PASSWORD: "password"

Beberapa kontainer bergantung pada variabel lingkungan untuk bekerja dengan baik. Yang ada di contoh, MySQL, adalah salah satu wadah ini. Jika Anda tidak mendeklarasikan variabel lingkungan yang diharapkan penampung, itu akan menimbulkan kesalahan. Anda dapat melihat kesalahan di bawah ini.

4. Selanjutnya, jalankan docker-compose up memerintah. docker-compose up perintah membaca file YAML (docker-compose.yml ) dibuat pada langkah sebelumnya dan membuat wadah. docker-compose up perintah memulai semua layanan yang dikonfigurasi dalam file Docker Compose.

5. Sekarang, verifikasi apakah ketiga variabel lingkungan ada di wadah dengan menjalankan docker exec perintah dan env memerintah.

Menjalankan perintah docker exec akan memungkinkan Anda untuk masuk ke wadah. Menjalankan env akan mencetak daftar variabel lingkungan saat ini dengan nilainya masing-masing.

# ee8a... is the container
docker exec -it ee8af8bfcd41 /bin/bash

Mengganti Variabel Lingkungan

Di bagian sebelumnya, Anda telah mempelajari cara mendeklarasikan variabel lingkungan secara langsung di dalam file Docker Compose dengan melakukan hard coding. Pendekatan seperti itu tidak optimal jika Anda perlu mengamankan kredensial Anda. Sebagai alternatif, simpan nilai untuk variabel lingkungan dalam file bernama .env yang hanya dapat dibaca oleh admin.

Mari kita berlatih menggunakan substitusi untuk variabel lingkungan. Di terminal Anda:

1. Buat file bernama .env di ~/docker-compose-demo . yang sama direktori dan salin kode di bawah ini di .env mengajukan. File akan memiliki semua variabel lingkungan dengan nilainya masing-masing.

 # Defining the values of environmental variables
 MYSQL_ROOT_PASSWORD="root_password"
 MYSQL_ALLOW_EMPTY_PASSWORD="password"
 MYSQL_RANDOM_ROOT_PASSWORD="password"

2. Selanjutnya, edit izin .env file yang Anda buat pada langkah sebelumnya menggunakan perintah setfacl. Perintah di bawah ini memastikan bahwa pengguna root memiliki izin baca/tulis ke .env berkas.

  • m parameter memungkinkan Anda untuk mengatur izin ke file/folder.
  • u adalah pengguna (root ) yang akan memiliki izin yang diberikan ke file tertentu ~/*docker-compose-demo/.env
setfacl -m "u:root:rw" ~/docker-compose-demo/.env

3. Selanjutnya, edit buka file docker-compose.yml dengan editor favorit Anda dan komentari bagian lingkungan di docker-compose.yml dari bagian sebelumnya. Tambahkan kode di bawah ini untuk menetapkan nilai default untuk variabel lingkungan di file Compose.

Docker menyetel nilai melalui baris perintah atau dengan membaca file, seperti .env berkas dalam contoh. Dalam kedua kasus, Docker mengganti nilai yang sesuai.

# Defining the environmental variable using Hardcoded values in variables
    environment:
	    ###  Static way ###
      # MYSQL_ROOT_PASSWORD: "root_password" 
			# MYSQL_ALLOW_EMPTY_PASSWORD: "password"
      # MYSQL_RANDOM_ROOT_PASSWORD: "password"

			### Substitution ### 
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} 
			MYSQL_ALLOW_EMPTY_PASSWORD: ${MYSQL_ALLOW_EMPTY_PASSWORD} 
			MYSQL_RANDOM_ROOT_PASSWORD:  ${MYSQL_RANDOM_ROOT_PASSWORD} 

Kode mendefinisikan variabel dengan menerapkan metode interpolasi string. Variabel dengan interpolasi string dideklarasikan sebagai ${variable}. Docker menyetel nilai variabel lingkungan saat run time.

4. Sekali lagi, jalankan docker-compose up memerintah. Saat Anda menjalankan docker-compose up perintah, docker-compose.yml file mencari nilai variabel lingkungan di .env mengajukan. docker-compose perintah secara otomatis mencari .env file di direktori proyek atau di folder induk dari file penulisan Anda.

Segera setelah docker-compose menemukan nilai untuk variabel lingkungan yang diatur dalam docker-compose.yml di .env file, Compose mengganti nilai yang sesuai dan memulai layanan. Menatap layanan membuat wadah yang ditentukan di docker-compose.yml berkas.

Menggunakan Beberapa File Variabel Lingkungan untuk Beberapa Lingkungan

Sampai sekarang, Anda telah mempelajari dua pendekatan untuk mendeklarasikan variabel lingkungan. Yang pertama adalah mendeklarasikan variabel lingkungan di dalam docker-compose.yml mengajukan. Pendekatan kedua adalah mendeklarasikan variabel lingkungan dalam satu .env mengajukan dan menerapkan substitusi.

Kedua pendekatan ini cocok ketika bekerja dengan satu lingkungan. Jika Anda memiliki beberapa lingkungan, seperti Produksi dan/atau Pengujian, Anda memerlukan pendekatan yang berbeda. Mari kita lihat cara membuat banyak .env file dengan nama berbeda agar sesuai dengan lingkungan Anda!

Contoh di bawah ini akan meniru lingkungan biasa yang mungkin ditemui di Operasi TI:Dev, QA, dan Prod. Kembali ke terminal Anda:

1. Navigasikan ke ~/docker-compose-demo . Anda direktori dan buat .env.dev mengajukan. Salin/tempel konten kode cuplikan di bawah ini ke dalam file dan simpan. File ini akan menyimpan pengaturan yang digunakan untuk database lingkungan pengembangan MySQL Anda.

# Enviornmental Variables file .env.dev
MYSQL_ROOT_PASSWORD="password_DEV"
MYSQL_ALLOW_EMPTY_PASSWORD="password1"
MYSQL_RANDOM_ROOT_PASSWORD="password1"

2. Pada direktori yang sama, buat .env.qa file dan simpan isi kode potongan di bawah ini ke dalam file. Ini adalah pengaturan untuk database lingkungan jaminan kualitas MySQL Anda.

# Enviornmental Variables  file .env.qa
MYSQL_ROOT_PASSWORD="password_QA"
MYSQL_ALLOW_EMPTY_PASSWORD="password2"
MYSQL_RANDOM_ROOT_PASSWORD="password2"

3. Sekarang buat .env.prod file untuk menyimpan pengaturan untuk database lingkungan produksi MySQL hipotetis. Isinya di bawah ini:

# Enviornmental Variables file .env.prod
MYSQL_ROOT_PASSWORD="password_PROD"
MYSQL_ALLOW_EMPTY_PASSWORD="password3"
MYSQL_RANDOM_ROOT_PASSWORD="password3"

4. Selanjutnya, jalankan docker-compose perintah dengan --env-file opsi, menentukan .env.dev mengajukan. docker-compose perintah mencari .env.dev file di ~/docker-compose-demo . saat ini direktori.

docker-compose --env-file .env.dev up

Meneruskan file sebagai argumen memungkinkan Anda menyimpan file di mana saja dan dengan nama yang sesuai.

Seperti yang Anda lihat di bawah, Anda dapat dengan mudah memilih file lingkungan yang berbeda dan menerapkannya dengan mengganti .env.dev file ke .env.qa atau .env.prod mengajukan.

# Running the docker-compose command with the QA file
docker-compose --env-file .env.qa up
# Running the docker-compose command with the Prod file
docker-compose --env-file .env.prod up

5. Sekarang, verifikasi apakah file konfigurasi (.env.dev ) telah berhasil dibaca dengan menjalankan docker exec memerintah. Menjalankan perintah docker exec akan memungkinkan Anda untuk masuk ke wadah. Menjalankan env akan mencetak daftar variabel lingkungan saat ini.

Perhatikan bahwa ketiga variabel lingkungan (MYSQL_ROOT_PASSWORD , MYSQL_ALLOW_EMPTY_PASSWORD , dan MYSQL_RANDOM_ROOT_PASSWORD ) ada di dalam wadah. Perhatikan bahwa nilainya berasal dari env.dev mengajukan.

Menggabungkan env_file di File Tulis Docker

Di bagian sebelumnya, Anda melihat cara mendeklarasikan variabel lingkungan di .env file. Saat Anda menyimpan nilai variabel lingkungan di .env file secara terpisah, Anda berakhir dengan banyak baris dan referensi di docker-compose.yml .

Untuk mengurangi referensi dan jumlah baris untuk variabel lingkungan di docker-compose.yml file, pertimbangkan untuk memasukkan env_file di docker-compose.yml Anda berkas.

Mari pelajari cara menggabungkan env_file dalam file penulisan Docker. Sekali lagi, di terminal:

1. Buat file bernama var.env untuk menyimpan pengaturan untuk database MySQL Anda. Salin/tempel kode berikut ke var.env file dan simpan ke ~/docker-compose-demo yang sama direktori.

MYSQL_ROOT_PASSWORD="password_NEW"
MYSQL_ALLOW_EMPTY_PASSWORD="password_NEW"
MYSQL_RANDOM_ROOT_PASSWORD="password_NEW"

2. Selanjutnya, buka file docker-compose.yml yang telah dibuat sebelumnya menggunakan editor favorit Anda. Ganti bagian lingkungan dari docker-compose.yml yang Anda buat sebelumnya dengan env_file , dan tambahkan jalur file dengan - ./var.env .

Docker sekarang mencari ./var.env file dalam ~/docker-compose-demo yang sama direktori.

version: "2.2"

services:
  mysql_svc:
    image: mysql:5.7
    hostname: mysql
    container_name: mysql
# Replacing the environment: with env_file: 
  # environment:
  #   MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
  #   MYSQL_ALLOW_EMPTY_PASSWORD: ${MYSQL_ALLOW_EMPTY_PASSWORD}
  #   MYSQL_RANDOM_ROOT_PASSWORD: ${MYSQL_RANDOM_ROOT_PASSWORD}
    env_file:
     - ./var.env

Perhatikan bahwa ketiga pengaturan dan referensi sekarang hilang. Anda dibiarkan dengan satu referensi. Ini mungkin tidak tampak seperti banyak dalam contoh. Tapi di dunia nyata, jumlah referensi bisa jadi sangat cepat.

3. Selanjutnya, jalankan docker-compose memerintah. Perintah mencari nilai variabel lingkungan yang ada di var.env file dan membuat wadah yang Anda tetapkan di docker-compose.yml mengajukan.

Docker membuat layanan, artinya Docker menemukan nilai untuk variabel lingkungan di var.env mengajukan. Untuk mengonfirmasi, jalankan docker exec dan env perintah untuk terakhir kalinya. Anda akan melihat semua variabel lingkungan (MYSQL_ROOT_PASSWORD , MYSQL_ALLOW_EMPTY_PASSWORD , dan MYSQL_RANDOM_ROOT_PASSWORD ) dan nilainya dalam wadah.

Kesimpulan

Dalam tutorial ini, Anda mempelajari berbagai cara mendeklarasikan variabel lingkungan dengan penulisan Docker. Artikel tersebut menunjukkan kepada Anda fleksibilitas luar biasa yang memungkinkan Docker dalam mendeklarasikan variabel lingkungan dengan mengkodekannya secara langsung atau menggunakannya dengan file terpisah.

Jadi pendekatan mana yang akan Anda gunakan selanjutnya saat menjalankan container Docker dari Docker Compose?


Docker
  1. Apa Cara Distro/shell-agnostik Terbaik Untuk Mengatur Variabel Lingkungan?

  2. Apakah Variabel Non-lingkungan Diteruskan Ke Subkulit Dipanggil Dengan Substitusi Perintah?

  3. Memeriksa variabel lingkungan

  1. Bagaimana Anda memberi su variabel lingkungan pengguna saat ini

  2. Tetapkan lingkungan sementara ($PATH)

  3. Betapa tidak disetelnya banyak variabel lingkungan

  1. Mengatur Variabel Lingkungan Shell | Kulit BASH

  2. Perbedaan Penggunaan Antara Variabel Shell Dan Variabel Lingkungan?

  3. Referensi Variabel Lingkungan *di* /etc/environment?