0
点赞
收藏
分享

微信扫一扫

Docker笔记五之Docker系统变量

本文首发于公众号: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
举报

相关推荐

0 条评论