共计 1671 个字符,预计需要花费 5 分钟才能阅读完成。
本文首发于公众号: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
如果想获取更多后端相干文章,可扫码关注浏览: