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

Bagaimana Melewati Variabel Lingkungan ke Docker Containers

Program sering mengontrol operasi melalui konfigurasi yang dibundel dengan perangkat lunak, dan variabel lingkungan memungkinkan pengguna untuk mengaturnya saat runtime. Namun, menjalankan proses di wadah Docker memperumit banyak hal, jadi bagaimana Anda meneruskan variabel lingkungan ke wadah?

Untuk Apa Variabel Lingkungan Digunakan?

Variabel lingkungan memungkinkan Anda untuk memisahkan konfigurasi dari aplikasi yang dapat dieksekusi. Misalnya, Anda tidak ingin menyimpan sandi basis data produksi di basis kode—jika Anda melakukannya, sandi akan terlihat dari Git, dan siapa pun yang memiliki akses ke kode Anda dapat menghapus basis data Anda.

Sebagai gantinya, Anda menyetelnya dengan variabel lingkungan, yang menyimpan pasangan nilai kunci sederhana, dan memungkinkan Anda mengakses nilai di aplikasi apa pun yang berjalan dalam sesi shell yang sama (tidak dapat diakses secara global). Ini juga memiliki keuntungan karena dapat dengan mudah menentukan konfigurasi yang berbeda untuk lingkungan yang berbeda. Misalnya, memiliki kunci terpisah untuk database pengembangan dan produksi, atau menggunakan titik akhir API yang berbeda.

Menyetel variabel ini untuk container Docker dapat dilakukan dengan tiga cara utama—dengan argumen CLI, .env file konfigurasi, atau melalui docker-compose .

Dengan Argumen Baris Perintah

Perintah yang digunakan untuk meluncurkan kontainer Docker, docker run , menerima variabel ENV sebagai argumen. Cukup jalankan dengan -e flag, singkatan dari --env , dan berikan pasangan kunci=nilai:

sudo docker run 
-e POSTGRES_USER='postgres' 
-e POSTGRES_PASSWORD='password' 
...

Dan, jika Anda sudah memiliki variabel lingkungan yang disetel di lingkungan yang menjalankan perintah itu, Anda bisa meneruskannya langsung dengan nama:

// set variable
POSTGRES_PASSWORD='password'

// use it later
docker run -e POSTGRES_PASSWORD -e POSTGRES_USER ...

Keamanan Tambahan Dengan File .env

Melewati variabel dengan argumen CLI berfungsi dengan baik, tetapi memiliki kelemahan—variabel tersebut terlihat dari host. Mereka masuk ke riwayat perintah, dan terlihat di daftar proses untuk proses yang diluncurkan.

Linux memiliki cara bawaan untuk mengelola izin untuk ini—akses file. Menyimpan variabel dalam .env file memungkinkan Anda untuk mengontrol akses ke file itu dengan izin file (chmod , chown ).

Buat .env file dengan variabel dalam format berikut, masing-masing pada baris baru:

POSTGRES_PASSWORD='password'
POSTGRES_USER='postgres'
APPLICATION_URL='example.com'

Kemudian, berikan ke docker run dengan --env-file bendera:

docker run --env-file ./envfile ...

Dengan Docker-Compose

Tentu saja, banyak orang tidak meluncurkan kontainer Docker secara langsung dengan docker run , dan sebagai gantinya memilih untuk menggunakan docker-compose file untuk menangani konfigurasi beberapa wadah yang semuanya mewakili satu aplikasi.

Untuk meneruskan variabel lingkungan ke wadah yang diluncurkan dengan cara ini, Anda harus mengonfigurasi file penulisan untuk meneruskan variabel sesi ke wadah Docker. Konfigurasi ini melewati POSTGRES_USER variabel ke lingkungan build dan lingkungan runtime, dan menetapkan nilai default jika tidak ada.

version: '3.1'
services:
  my-service: 
    build:
      context: .
      args:
        - POSTGRES_USER=${POSTGRES_USER:-default}
    environment: 
      - POSTGRES_USER=${POSTGRES_USER:-default}

Anda perlu mengatur variabel lingkungan sebelum menjalankan docker-compose up , jika tidak maka tidak akan dapat mengaksesnya. Anda dapat menyimpannya di file penulisan, tetapi itu biasanya dilacak dan diversi, yang mengalahkan tujuan variabel env.

Dengan Kubernetes

Kubernetes adalah sistem orkestrasi yang dapat menangani ratusan container yang dijalankan di seluruh jaringan. Itu masih menggunakan Docker, tetapi Anda hanya akan menyentuh konfigurasi, jadi meneruskan variabel lingkungan secara langsung tidak akan berfungsi.

Sebagai gantinya, Anda dapat mendefinisikannya dalam konfigurasi untuk Pod:

apiVersion: v1
kind: Pod
metadata:
  name: example
spec:
  containers:
    - ...
      env:
        - name: SERVICE_PORT
          value: "80"
        - name: SERVICE_IP
          value: "172.17.0.1"

Kubernetes rumit, dan ada banyak cara berbeda untuk bekerja dengan variabel lingkungan. Untuk mempelajari lebih lanjut, Anda dapat membaca panduan mereka tentang memasukkan data ke dalam Pod.


Docker
  1. Cara Mengekspor dan Mengimpor Kontainer Docker

  2. Cara Menggunakan Tulis Docker

  3. Bagaimana Menghubungkan Kontainer Docker

  1. Cara Memperbarui Wadah Docker yang Berjalan Secara Otomatis

  2. Cara Mendaftar Kontainer Docker

  3. Betapa tidak disetelnya banyak variabel lingkungan

  1. Cara Mengatur Variabel Lingkungan di Linux

  2. Cara menghapus semua wadah Docker

  3. Cara membaca variabel lingkungan dari suatu proses