我很难理解docker上下文文档,因为它与我迄今为止的真实经验相比。
我想看看我是否可以快速轻松地将docker-compose.yml
文件转换为某个服务器上正在运行的应用程序堆栈会很有趣。理想情况下,我可以简单地将文件上传到某个位置的repo,但在任何情况下,最常建议的解决方案都是aws-ecs
docker-compose集成。
根据该文件,该过程为
- 在您的机器上本地拥有给定的
docker-compose.yml
- 使用
aws cli
和docker context
的组合,使用dockercli命令将容器部署到aws ecs
关键命令似乎是docker context use {{name}}
。这就是我困惑的地方。
我成功地将容器堆栈部署到了ecs(显然,我不知道如何在aws UI中看到这一点,但该应用程序在URL上可用,所以它起了作用。我希望我没有被收费…(,但后来,我想在另一个项目上进行一些本地开发。
我打开另一个终端,尝试运行docker命令。显然,docker context
持续存在,所以我不得不用docker context use default
切换回来。当我这么做的时候,我部署的应用程序崩溃了。我切换回另一个终端,做了docker context use {{name}}
,现在即使我的另一个应用程序的本地开发容器似乎正在运行,但对它们的请求在所有端口上都失败了。
我是否理解亚马逊ECS上部署的容器堆栈取决于我本地机器的某些状态?我关掉这台机器怎么办?我现在不能做任何其他docker开发了?如果这是真的,有没有更好的方法来使用docker-ecs集成,因为如果这都是真的话,显然这基本上是不可用的。
docker config context use
将上下文名称记录在配置文件中(在我当前的MacOS/Docker Desktop系统上,位于$HOME/.docker/config.json
中(。因此,以这种方式更改上下文会更改所有终端窗口中所有shell的上下文。
Docker还支持$DOCKER_CONTEXT
环境变量,与所有环境变量一样,这将是当前shell的本地变量。如果您试图使用这种支持部署到云环境,那么只为执行部署的命令设置环境变量可能是个好主意。
export DOCKER_CONTEXT=ecs
docker-compose up -d
docker ps -a
unset DOCKER_CONTEXT
如果部署的ECS应用程序与您的本地系统有任何依赖关系,或者本地运行docker context use
导致您的云托管应用程序中断,我会感到非常惊讶。上下文设置仅影响Docker守护进程或其他API端点本地docker
命令与之对话;它不会在您的即时系统之外进行任何持久的更改。ECS应用程序可能对您的本地系统一无所知(除非您已将其DNS名称包含在环境变量设置或类似配置中(,甚至可能没有网络路径可以调用。