Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
docker compose在退出docker compose时启动_Docker_Docker Compose - Fatal编程技术网

docker compose在退出docker compose时启动

docker compose在退出docker compose时启动,docker,docker-compose,Docker,Docker Compose,我有一个简单的docker-copose.yml,它构建了4个容器。容器在EC2上运行。 docker在master branch每天编写两次更改,每次更改我们都需要在生产中部署新容器 这就是我正在做的: docker-compose down --rmi all git pull origin master docker-compose build -d 我正在删除图像以避免冲突,这样一旦启动服务,我就会有新的图像 这个过程大约需要1分钟, 加速docker compose的最佳实践是什么,

我有一个简单的docker-copose.yml,它构建了4个容器。容器在EC2上运行。 docker在master branch每天编写两次更改,每次更改我们都需要在生产中部署新容器

这就是我正在做的:

docker-compose down --rmi all
git pull origin master
docker-compose build -d
我正在删除图像以避免冲突,这样一旦启动服务,我就会有新的图像

这个过程大约需要1分钟,
加速docker compose的最佳实践是什么,有什么改进建议吗

您可以执行Docker中本机显示的命令集,而无需在部署过程中使用
git
或其他源代码管理工具

每当您对源代码树进行更改时,构建一个新的Docker映像并将其推送到Docker存储库。这可以是Docker Hub,如果您已经在AWS上,也可以是Amazon ECR。每个构建都应该有一个唯一的映像标记,例如源代码管理提交ID或时间戳。您可以设置一个持续集成工具来自动完成所有这些工作

一旦你有了这个,你的
docker compose.yml
文件需要用要部署的版本号更新。如果您只有一个要部署的映像,可以直接使用Compose来填充它

image: 123456789012.dkr.ecr.us-east-1.amazonaws.com/myimage:${TAG:-latest}
如果您有多个映像,您可以设置多个环境变量,或者生成一个更新的
docker compose.yml
文件,其中包含已填充的值,但您需要在部署时同时了解所有映像版本

现在,当您要部署它时,只需运行

TAG=20200317.0412 docker-compose up -d
设置环境变量并触发组合。Compose将看到您尝试为该容器运行的映像与已经运行的映像不同,请拉取更新的映像,然后为您替换该容器。您不需要手动移除旧容器或停止整个堆栈

如果
git
现在是您工作流程的一部分,可能是因为您正在将应用程序代码装载到容器中。您还需要删除覆盖图像中内容的所有
卷:
。还要确保您在CI系统(因此您正在测试部署到生产环境中的实际映像)和开发(类似地)中进行了此更改

使用Kubernetes(或AmazonEKS)这样的集群管理系统,这一特定任务变得稍微容易一些,尽管它在其他地方带来了许多其他复杂性。在Kubernetes中,您需要向Kubernetes API服务器发送更新的部署规范,但是您可以在不直接使用ssh访问目标系统的情况下执行此操作,并且只需要知道要更新的一个映像的特定版本,并且使用多个副本,您可以获得零停机升级。在此设置中,基本上需要使用Docker存储库和每个构建使用唯一的图像标记:图像是代码进入集群的唯一方式,更改图像标记字符串是触发代码重新部署的原因