首页 > 其他分享 >Docker笔记五之Docker系统变量

Docker笔记五之Docker系统变量

时间:2023-05-27 23:32:17浏览次数:47  
标签:容器 变量 指定 笔记 getenv ENV Docker os

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

标签:容器,变量,指定,笔记,getenv,ENV,Docker,os
From: https://blog.51cto.com/u_16061969/6363336

相关文章

  • 计算机基础知识的一些学习笔记
    Excel里用AND在开头连接多个条件。立即寻址访问速度最快。直接寻址方式下,操作数在内存中,指令中给出操作数的地址,需要再访问一次内存来得到操作数。立即寻址方式下,操作数在指令中,所以在取得指令时就得到操作数,是速度最快的。寄存器寻址方式下,操作数在CPU的寄存器中,与在......
  • 程序员笔记1-学习markdown语法
    写在前面​ 作为一名程序员,发现要学习的东西实在是太多了,光靠自己的脑子记录实在太难,所以选择用markdown记录一下,先学习一下markdow的基本语法。以后还要学习latex这样的文本编辑器。markdown语法​ 下面开始正式记录markdown语法。1.标题2.无序列表强调用>无序列表......
  • docker安装mysql
    转载请注明出处:1.从DockerHub下载MySQL镜像:dockerpullmysql2.运行MySQL容器,并将主机的3306端口映射到容器的3306端口:dockerrun-p3306:3306--namemysql-eMYSQL_ROOT_PASSWORD=your_password-dmysql其中,--namemysql指定容器的名称为mysql,-p3306......
  • Python连接es笔记一之连接与查询es
    本文首发于公众号:Hunter后端原文链接:Python连接es笔记一之连接与查询es有几种方式在Python中配置与es的连接,最简单最有用的方法就是定义一个默认的连接,如果系统不是需要访问多个集群,最建议的方式就是使用create_connection方法创建连接,然后所有的操作都会自动使用这个连......
  • docker的CMD和ENTRYPOINT
    在Dockerfile中,`CMD`和`ENTRYPOINT`都用于定义容器启动时要执行的命令或程序,但它们有一些关键的区别。1.`CMD`的作用:-`CMD`指令用于设置容器启动时的默认命令或程序。-`CMD`可以在Dockerfile中只出现一次,如果有多个`CMD`指令,只有最后一个指令会生效。-`......
  • dockerfile里的EXPOSE
    在Dockerfile中,`EXPOSE`指令用于声明容器运行时将要监听的网络端口。`EXPOSE`并不会实际打开容器的端口,它只是向用户和开发人员提供了容器内部服务的网络接口信息。通过在Dockerfile中使用`EXPOSE`,你可以向其他人传达容器暴露的网络服务和端口,以便更好地理解容器的使用和......
  • 《用户故事与敏捷方法》阅读笔记2
    第八章讲述了用户故事的分解。当一个大的用户故事过于复杂或难以实现时,需要将其分解为较小的任务或子用户故事。这样可以使开发工作更加可管理和可控,同时也有助于更好地理解用户需求。第九章介绍了团队与客户之间的沟通。开发团队需要密切与客户沟通,以确保开发过程中的用户故事与......
  • kubeadm极速部署Kubernetes,教你如何轻松处理容器运行瓶颈(Docker丨容器化技术丨DevOps
    kubeadm极速部署Kubernetes1.25版本集群前言随着Kubernetes的普及,快速部署和管理Kubernetes集群已成为容器领域的关键技能之一。本文将介绍使用kubeadm工具部署Kubernetes集群的方法,为您提供一个简单且高效的解决方案。不再需要自行构建集群,通过使用本文的方法,您将能够在最短的时......
  • Docker 安装
     安装软件软源和基础软件#安装要求的软件包yuminstallyum-utilsdevice-mapper-persistent-datalvm2-y#添加基础yum源和Dockerrepository。yum-config-manager--add-repohttp://mirrors.163.com/.help/CentOS7-Base-163.repoyum-config-manager--add-repohttp:/......
  • 五月读书笔记三《人件集》
    通过继续阅读《人件集》了解到在一般情况下,大家都认为技术决策所依据的都是技术性因素,诸如事实、可测量的数值、应用中需要考虑的事项等。但实际情况是,诸如感觉、意见、直觉、偏见等,都会对决策的制定或者问题的解决产生影响,这些都是人在做事情时所不可避免的因素。尽管有些人试......