Tag: capistrano3

如何整合Capistrano与Docker进行部署?

我不知道我的问题是相关的,因为我可能会尝试混合不应混用的工具(Capistrano和Docker)。 我最近dockerized与Capistrano部署的应用程序。 Docker compose用于开发环境和登台环境。 这就是我的项目的样子(应用程序文件没有显示): Capfile docker-compose.yml docker-compose.staging.yml config/ deploy.rb deploy staging.rb Docker Compose文件创build了所有必要的容器(Nginx,PHP,MongoDB,Elasticsearch等),以在开发或分段环境中运行应用程序(因此在docker-compose.staging.yml定义了一些特定的参数)。 使用以下命令将应用程序部署到临时环境: cap staging deploy 服务器上的文件夹体系结构是Capistrano: current releases 20160912150720 20160912151003 20160912153905 shared 以下命令已在登台服务器的current目录中运行,以实例化所有必要的容器以运行该应用程序: docker-compose -f docker-compose.yml -f docker-compose.staging.yml up -d 到现在为止还挺好。 在下一个部署中事情会变得更加复杂: current符号链接将指向releases目录的新目录: 如果deploy.rb定义了需要在容器中执行的命令(比如docker-compose exec php composer install器),Docker会告诉容器不存在(因为现有的容器是在以前的发布文件夹中创build的)。 如果在Capistrano部署过程中执行docker-compose up -d命令,由于端口冲突(以前的容器仍然存在),我会收到一些错误。 你有关于如何解决这个问题的想法? 我应该离开Capistrano做一些不同的事吗? 这个想法将是保持Capistrano提供的(靠近)零停机时间的部署,以及Docker容器的灵活性(例如,为同一台服务器上的各种应用程序提供几个PHP版本)。