Docker-Compose
Docker Compose
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,可以使用 YML 文件来配置应用程序需要的所有服务。使用一个命令,就可以从 YML 文件配置中创建并启动所有服务
- 使用 Dockerfile 定义应用程序的环境。
- 使用 docker-compose. yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
- 最后,执行
docker-compose up命令来启动并运行整个应用程序。
# yaml 配置实例
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
https://www.runoob.com/docker/docker-compose.html
docker-compose. yaml 和 config. yaml
读取环境变量
在 docker-compose.yml 中设置的 environment:
environment:
- DB_HOST=localhost
- DB_PORT=5432
- API_KEY=abc123
这些是 操作系统级别的环境变量(Environment Variables),你的 Go 程序必须通过 os.Getenv() 或类似方式读取。
package main
import (
"fmt"
"os"
)
func main() {
dbHost := os.Getenv("DB_HOST") // 从 environment 读取
dbPort := os.Getenv("DB_PORT")
apiKey := os.Getenv("API_KEY")
fmt.Printf("DB: %s:%s\n", dbHost, dbPort)
}
环境变量覆盖配置文件
| 优先级 | 来源 | 说明 |
|---|---|---|
| 1️⃣ 最高 | 环境变量(Environment Variables) | Docker、K8s、CI/CD 常用 |
| 2️⃣ 中等 | config.yaml 文件 |
本地开发、默认值 |
| 3️⃣ 最低 | 硬编码默认值 | 防止崩溃 |
使用 viper 库
import "github.com/spf13/viper"
func init() {
viper.SetConfigName("config")
viper.SetConfigType("yaml")
viper.AddConfigPath("config")
// 允许环境变量覆盖
viper.AutomaticEnv()
viper.ReadInConfig()
}
然后你就可以:
- 在
config.yaml写:
database:
host: localhost
port: 5432
- 在
docker-compose.yml写:
environment:
- DATABASE_HOST=prod-db.example.com
- DATABASE_PORT=6432
viper.GetString("database.host")会自动优先返回环境变量
基目录
Docker Compose 是以 项目(project)为单位 管理容器的。
而 默认项目名 = 所在目录的 basename(即文件夹名字)。
okx/
├── signal/
│ └── test/ ← basename = "test"
│ └── docker-compose.yaml # 只定义 signal
└── market/
└── test/ ← basename = "test"
└── docker-compose.yaml # 只定义 market
虽然物理路径不同,但两个目录的 basename 都是 test。
所以:
- 在
signal/test执行docker compose up→ 项目名 =test - 在
market/test执行docker compose up→ 项目名 =test
Docker Compose 认为这是同一个项目
所以应该指定不同的 basename
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 木素音的小站!