GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Jak předávat proměnné prostředí do kontejnerů Docker

Programy často řídí provoz prostřednictvím konfigurace dodávané se softwarem a proměnné prostředí umožňují uživatelům je nastavit za běhu. Spouštění procesů v kontejnerech Docker však věci komplikuje, jak tedy předáte proměnné prostředí do kontejneru?

K čemu slouží proměnné prostředí?

Proměnné prostředí umožňují oddělit konfiguraci od spustitelného souboru aplikace. Například byste nechtěli ukládat heslo své produkční databáze do své kódové báze – pokud ano, bylo by viditelné z Gitu a kdokoli s přístupem k vašemu kódu by vaši databázi mohl odstranit.

Místo toho ji nastavíte pomocí proměnné prostředí, která ukládá jednoduchý pár klíč–hodnota a umožňuje vám přístup k hodnotě v jakékoli aplikaci spuštěné ve stejné relaci prostředí (nejsou globálně dostupné). Výhodou je také možnost snadno definovat různé konfigurace pro různá prostředí. Například mít samostatné klíče pro vývojové a produkční databáze nebo používat jiný koncový bod API.

Nastavení těchto proměnných pro kontejnery Docker lze provést třemi hlavními způsoby – pomocí argumentů CLI, .env konfigurační soubory nebo prostřednictvím docker-compose .

S argumentem příkazového řádku

Příkaz používaný ke spouštění kontejnerů Docker, docker run , přijímá proměnné ENV jako argumenty. Jednoduše jej spusťte pomocí -e flag, zkratka pro --env a předejte pár klíč=hodnota:

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

A pokud již máte tyto proměnné prostředí nastavené v prostředí, ve kterém je tento příkaz spuštěn, můžete je jednoduše předat přímo podle názvu:

// set variable
POSTGRES_PASSWORD='password'

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

Další zabezpečení pomocí souboru .env

Předávání proměnných s argumenty CLI funguje skvěle, ale má to nevýhodu – tyto proměnné jsou viditelné z hostitele. Jsou zaznamenány v historii příkazů a jsou viditelné v seznamu procesů pro spuštěný proces.

Linux má vestavěný způsob správy oprávnění pro toto – přístup k souborům. Uložení proměnných v .env file umožňuje řídit přístup k tomuto souboru pomocí oprávnění k souboru (chmod , chown ).

Vytvořte .env soubor s proměnnými v následujícím formátu, každou na novém řádku:

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

Poté jej předejte docker run pomocí --env-file příznak:

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

S Docker-Compose

Mnoho lidí samozřejmě nespouští kontejnery Docker přímo pomocí docker run a místo toho se rozhodnou použít docker-compose pro zpracování konfigurace více kontejnerů, které všechny představují jednu aplikaci.

Chcete-li předat proměnné prostředí do kontejneru spuštěného tímto způsobem, budete muset nakonfigurovat soubor pro vytvoření tak, aby předal proměnné relace do kontejneru Docker. Tato konfigurace zde předává POSTGRES_USER proměnnou pro sestavení i běhové prostředí a nastaví výchozí hodnotu, pokud neexistuje.

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

Před spuštěním docker-compose up budete muset nastavit proměnné prostředí , jinak k nim nebude mít přístup. Můžete je uložit do nového souboru, ale ten je obvykle sledován a verzován, což maří účel proměnných env.

S Kubernetes

Kubernetes je orchestrační systém, který zvládne provoz stovek kontejnerů v síti. Stále používá Docker, ale vždy se dotknete pouze konfigurace, takže přímé předávání proměnných prostředí nebude fungovat.

Místo toho je můžete definovat v konfiguraci pro 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 je komplikovaný a existuje mnoho různých způsobů, jak pracovat s proměnnými prostředí. Chcete-li se dozvědět více, můžete si přečíst jejich průvodce vkládáním dat do Podů.


Docker
  1. Jak automaticky aktualizovat běžící kontejnery Docker

  2. Jak exportovat a importovat kontejnery Docker

  3. Jak vypsat Docker kontejnery

  1. Jak používat Docker Compose

  2. Jak připojit kontejnery Docker

  3. Jak odstranit všechny kontejnery Docker

  1. Jak nastavit proměnné prostředí v Linuxu

  2. Jak zrušit nastavení mnoha proměnných prostředí

  3. Jak číst proměnné prostředí procesu