如何配置 Docker 环境变量

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本全面教程中,我们将深入探讨 Docker 环境变量的世界,涵盖从基础到在容器化应用程序中传递、配置和管理它们的高级技术的所有内容。无论你是经验丰富的 Docker 用户还是刚刚起步,本指南都将为你提供知识和最佳实践,以有效利用环境变量,并确保基于 Docker 的部署的安全性、可维护性和可移植性。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/exec("Execute Command in Container") docker/ContainerOperationsGroup -.-> docker/logs("View Container Logs") docker/SystemManagementGroup -.-> docker/info("Display System-Wide Information") docker/SystemManagementGroup -.-> docker/version("Show Docker Version") subgraph Lab Skills docker/run -.-> lab-392042{{"如何配置 Docker 环境变量"}} docker/exec -.-> lab-392042{{"如何配置 Docker 环境变量"}} docker/logs -.-> lab-392042{{"如何配置 Docker 环境变量"}} docker/info -.-> lab-392042{{"如何配置 Docker 环境变量"}} docker/version -.-> lab-392042{{"如何配置 Docker 环境变量"}} end

Docker 环境基础

理解 Docker 环境变量

Docker 环境变量是关键的配置机制,可实现容器的动态运行时设置。它们提供了一种灵活的方式来注入配置并控制容器行为,而无需修改容器镜像。

graph LR A[Docker 镜像] --> B[环境变量] B --> C[容器运行时配置]

关键环境变量类型

类型 描述 示例
静态变量 在镜像构建时预先定义 ENV DATABASE_HOST=localhost
运行时变量 在容器启动期间注入 docker run -e DB_PASSWORD=secret
默认变量 在 Dockerfile 中预设 ENV APP_PORT=8080

配置方法

开发者可以通过多种方式定义 Docker 环境变量:

  1. Dockerfile 配置
FROM ubuntu:22.04
ENV APP_NAME=myservice
ENV DEBUG_MODE=false
  1. 命令行注入
docker run -e DATABASE_URL=postgres://user:pass@localhost/db myimage
  1. 环境文件
docker run --env-file./config.env myimage

运行时配置示例

## 创建一个环境配置文件
echo "DB_HOST=database.example.com" > app.env
echo "LOG_LEVEL=debug" >> app.env

## 使用环境文件启动容器
docker run --env-file app.env ubuntu:22.04

此方法展示了 Docker 环境变量如何实现灵活、安全且动态的容器配置,而无需将敏感信息直接硬编码到镜像中。

管理 Docker 环境

环境配置策略

Docker 环境管理需要系统的方法来处理不同部署阶段的复杂配置场景。

graph TD A[开发环境] --> B[预发布环境] B --> C[生产环境] A,B,C --> D[环境变量管理]

环境变量作用域

作用域 描述 实现方式
容器级别 单个容器的设置 -e 标志
Compose 级别 多容器环境 docker-compose.yml
集群级别 全集群范围的配置 docker config

环境文件管理

## 创建环境配置
mkdir -p /opt/docker/configs
touch /opt/docker/configs/app.env
echo "DATABASE_URL=postgresql://user:pass@localhost/db" > /opt/docker/configs/app.env
echo "DEBUG_MODE=false" >> /opt/docker/configs/app.env

## 使用环境文件启动容器
docker run --env-file /opt/docker/configs/app.env ubuntu:22.04

安全的环境变量处理

## 使用 Docker 机密存储敏感数据
echo "sensitive_password" | docker secret create db_password -

docker service create \
  --name database \
  --secret db_password \
  postgres:latest

动态环境注入

## 运行时环境变量替换
export DB_HOST=production.database.com
docker run -e DB_HOST=$DB_HOST myapplication

此方法展示了在不同部署环境中灵活且安全的 Docker 环境管理技术。

高级环境策略

复杂环境配置技术

高级 Docker 环境管理需要复杂的策略来处理复杂的部署场景。

graph LR A[环境配置] --> B[验证] B --> C[安全] C --> D[动态适配]

环境变量验证

## 实现严格的环境验证
validate_env() {
  if [ -z "$DATABASE_URL" ]; then
    echo "错误:必须指定 DATABASE_URL"
    exit 1
  fi
}

## 在 Docker 入口脚本中使用
validate_env

多阶段环境配置

阶段 配置策略 示例
开发 本地模拟配置 .env.development
预发布 部分生产设置 .env.staging
生产 安全、最小化暴露 .env.production

安全环境加密

## 加密敏感环境配置
apt-get update && apt-get install -y gpg

## 生成加密密钥
gpg --gen-key

## 加密环境文件
gpg -c /opt/docker/configs/sensitive.env

## 在容器启动期间解密
gpg -d /opt/docker/configs/sensitive.env.gpg

动态环境适配

FROM ubuntu:22.04

## 条件环境配置
ARG ENV_TYPE=development
ENV APP_MODE=${ENV_TYPE}

RUN if [ "$APP_MODE" = "production" ]; then \
        echo "应用生产优化"; \
    else \
        echo "使用开发配置"; \
    fi

运行时环境自省

## 检查容器环境
docker inspect \
  --format='{{range.Config.Env}}{{println.}}{{end}}' \
  容器名称

这些高级策略展示了 Docker 环境管理的复杂方法,重点在于验证、安全和动态配置。

总结

在本教程结束时,你将对如何在 Docker 中使用环境变量有扎实的理解,包括将它们传递给容器、在 Docker Compose 中配置它们,以及遵循管理敏感和非敏感变量的最佳实践。你还将学习如何排查与 Docker 环境变量相关的常见问题,从而能够构建更健壮、更可靠的容器化应用程序。