Docker筆記五之Docker系統變數

Hunter發表於2023-04-30

本文首發於公眾號:Hunter後端

原文連結:Docker筆記五之Docker系統變數

當我們執行一個容器的時候是可以向容器內部指定某些變數值的,比如上一篇 MySQL 筆記中的引數是透過容器執行的時候 -e 來指定的。

往容器裡指定變數,有如下幾種方法:

  1. Dockerfile 中定義
  2. 執行容器的時候指定變數引數
  3. 執行容器的時候指定變數檔案

我們還是以執行 Django 獲取變數的方式來介紹。

假設我們需要把資料庫的相關資訊作為變數傳入容器內部,在 Django 裡獲取的方式可以用 os.getenv(key, default_value) 的方式。

import os 

DATABASES = {
    'default': {
        'ENGINE': os.getenv("ENGINE", "django.db.backends.mysql"),
        'NAME': os.getenv("NAME", "func_test"),
        "USER": os.getenv("USER", "root"),
        "PASSWORD": os.getenv("PASSWORD", "123456"),
        "HOST": os.getenv("HOST", "127.0.0.1"),
        "PORT": os.getenv("PORT", 3306),
    }
}

os.getenv() 函式第一個引數為傳入的 key,第二個為預設值,也就是獲取不到 key 時取的值。

1、Dockerfile 中定義

以我們之前執行的 Dockerfile 為例,在 Dockerfile 中定義環境變數的方式為:

ENV ENGINE "django.db.backends.mysql"
ENV NAME "func_test"

形式為 ENV key value

將變數傳入之前的 Dockerfile 中為:

FROM python:3.6

RUN mkdir /hunter -p

WORKDIR /hunter

ADD ./requirements.txt /hunter

RUN cd /hunter
RUN pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

ADD ./hunter /hunter

ENV ENGINE "django.db.backends.mysql"
ENV NAME "func_test"
ENV USER "root"
ENV PASSWORD "123456"
ENV HOST "127.0.0.1"
ENV PORT "3306"

CMD ["python3", "manage.py", "runserver", "0:9898"]

然後重新構建映象,執行容器,進入容器內部,輸入 export 就可以輸出容器內部的所有變數列表

或者進入 python 的 shell:

import os
os.getenv("ENGINE")

也可以檢視到容器內部的變數。

2、執行容器的時候指定變數引數

第二種輸入變數的方式為在執行容器的時候透過 -e 引數來指定變數,假設映象 id 為 image_id,我們可以如此執行容器:

docker run -itd -p 9898:9898 -e NAME="func_test" -e USER="root" image_id 

將引數都透過 -e 來指定

注意: 如果在構建映象的時候,Dockerfile 裡指定了變數,如果在執行容器的時候,再次指定了該變數,則執行的時候的變數會覆蓋 Dockerfile 裡的變數

3、執行容器的時候指定變數檔案

有時候,如果執行容器的時候需要輸入的變數過多,一個一個透過 -e 來指定很複雜,我們也可以透過變數檔案來指定變數:

# django_env_list.env

ENGINE=django.db.backends.mysql
NAME=func_test
USER=root
PASSWORD=123456
HOST=172.28.32.68
PORT=3306

然後執行容器的時候指定變數檔案:

docker run -itd -p 9898:9898 —env-file=django_env_list.env image_id

如果想獲取更多後端相關文章,可掃碼關注閱讀:

image.png

相關文章