本文首發於公眾號:Hunter後端
原文連結:Docker筆記五之Docker系統變數
當我們執行一個容器的時候是可以向容器內部指定某些變數值的,比如上一篇 MySQL 筆記中的引數是透過容器執行的時候 -e 來指定的。
往容器裡指定變數,有如下幾種方法:
- Dockerfile 中定義
- 執行容器的時候指定變數引數
- 執行容器的時候指定變數檔案
我們還是以執行 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
如果想獲取更多後端相關文章,可掃碼關注閱讀: