【发布时间】:2015-11-29 15:43:48
【问题描述】:
我的 Web 应用程序由 3 个 docker 容器组成:app(带有代码的主容器)、redis 和 node。我有执行以下操作的部署 shell 脚本:
- 从 git (
git clone <...> $REVISION) 克隆 master - 从文档根目录中删除所有文件 (
rm -rf $PROJECT_DIR) - 将所有克隆到文档根目录 (
mv $REVISION $PROJECT_DIR) - 停止所有正在运行的容器:(
docker-compose stop) - 删除所有停止的容器 (
docker-compose rm -f) - 构建容器 (
docker-compose build) - 运行所有构建的容器 (
docker-compose up -d) - 通过
docker exec运行容器内的所有初始化和启动脚本(例如:配置编译器、nginx 重新加载)
这对我来说很好,但我对这个方案有几个疑问:
- 在第 6 步中,如果我不将文件更改为节点容器,它将使用已构建的映像 - 速度很快。但是,如果我更改某些内容,容器将再次构建 - 它很慢并且会增加未使用的图像
- 在最坏的情况下(当我更改节点代码时)部署可能持续大约 2-3 分钟,在最好的情况下 - 大约 30 秒。但即便如此,对于某些用户来说,这也是一种停机时间。
我认为,我需要构建新容器的可用性(在旧容器的并行中继续工作),并且只有在成功状态后 - 更改使用的最新容器的 tag通过应用程序。我该怎么做?
将非常感谢您的 cmets。
【问题讨论】:
标签: deployment docker web-deployment dockerfile docker-compose