docker - 连接到专用 Docker 机器时如何默认使用 Docker Compose 生产配置?
问题描述
我有一个使用 Docker Compose 设置的项目。当我或我的团队中的任何人都在从事该项目时,让一切运行起来只是遥不可及的事情docker-compose up
。我们还有一个与生产环境关联的 Docker Machine(“默认”)。所以我们只需要通过以下方式连接到机器:
eval "$(docker-machine env default)"
现在部署与让一切在本地运行完全一样。只是一个docker-compose up
。我喜欢这个!
但是,Compose 配置现在分为三个文件:
docker-compose.yml
: 一般的东西。适用于生产环境和本地环境。docker-compose.override.yml
: 仅适用于本地环境。docker-compose.production.yml
: 仅适用于生产环境。
方便的是,docker-compose 会自动读取两者docker-compose.yml
,docker-compose.override.yml
因此在本地环境中我们仍然可以在docker-compose up
没有额外参数的情况下运行。在生产环境中,我们需要明确:
docker-compose -f docker-compose.yml -f docker-compose.production.yml up
这要冗长得多,当您习惯于简单地运行时,很容易忘记额外的参数docker-compose up
。我之前有过无缝体验:使用单个命令连接到机器,然后使用与本地环境中相同的命令。
我发现您可以通过设置环境变量使 docker-compose 默认为一组不同的配置文件COMPOSE_FILE
。所以我现在的首选解决方案是在连接到机器时运行两个命令:
eval $(docker-machine env default)
export COMPOSE_FILE="docker-compose.yml:docker-compose.production.yml"
这行得通!我可以docker-compose up
像以前一样在生产环境中运行。
由于eval $(docker-machine env default)
除了注册环境变量之外什么都不做,我想知道是否可以永久添加这一行:
export COMPOSE_FILE="docker-compose.yml:docker-compose.production.yml"
进入输出,所以当我想连接到机器时,我docker-machine env default
又回到运行单个命令。
如果这是不可能的(我找不到来源)是否有不同的方法来解决这个问题?
当然,我可以编写一个只包含两个命令的 shell 脚本,但我更喜欢惯用的解决方案。
解决方案
如果你只是在docker-compose env
没有包装器的情况下运行命令eval
,它会写出一系列 shell 命令。你可以用另一个运行的脚本来包装它,docker-compose env
并添加你的其他设置
#!/bin/sh
# I am docker_production
docker-compose env default
echo 'export COMPOSE_FILE="docker-compose.yml:docker-compose.production.yml"'
echo 'PS1="PRODUCTION $PS1"'
如果你运行这个脚本
./docker_production
它将打印出设置环境的 shell 命令;真正让它生效你可以
eval $(./docker_production)
以同样的方式,您可以编写一个输出命令来撤消此操作的 shell 脚本
#!/bin/sh
# I am docker_development
docker-compose env -u
echo 'unset COMPOSE_FILE'
echo 'PS1="${PS1#PRODUCTION }"'
eval $(./docker_development)
推荐阅读
- java - 需要帮助发布两次唯一字段并期待错误
- html - 在没有 jquery 的情况下在滚动时切换标题内容
- c# - Unity3D gives Script error: OnTriggerEnter when compiling
- powerbi-desktop - PowerBI:根据表中的值更改显示单位
- spring-boot - 在 Docker 中将 Spring-cloud-config 服务器托管为微服务
- swift - 滚动视图的前导和尾随约束在 rtl 语言中搞砸了
- angular - 如何修复将从 stomp 客户端接收到的 JSON 对象显示到视图中
- java - 如何在 JUnit XML 报告中配置 name 和 classname 属性
- cmake - 如何在开发和部署期间提供发布版本?
- javascript - 静态 JSON 数组从 API 推送到结果