Docker,如何替换 docker 中的 capistrano 任务

标签 docker ansible capistrano docker-compose dockerfile

我正在尝试对我的生产 Rails 应用程序进行 docker 化。

当前应用程序是使用 Ansible 配置并使用 capistrano 部署的。

我研究了不同的 docker 部署策略,并考虑摆脱 docker 中的 capistrano 并将 docker 与 docker-compose 一起使用

我正在编写 dockerfile 来配置和部署应用程序,但是部署类似于 capistrano 的应用程序有点复杂,因为deploy.rb 使用很少的 rake 任务来设置预部署任务,例如创建目录、设置应用程序名称和获取一些变量。

如何在 dockerfile 中复制 cap 任务,或者有没有办法在 docker 文件或运行 docker 容器中使用当前的 cap rake 任务?

最佳答案

对于您的情况,现在是退后一步考虑 Docker 的好处是否超过增加的复杂性的好时机。假设是这样,这里有一些关于如何使这些组件更好地协同工作的建议。

虽然 Ansible 是一个配置管理系统,但它也设计用于编排(即跨一系列远程计算机运行命令)。这与 Capistrano 有一些交叉,因此,您可能会发现将 Capistrano 任务移植到 Ansible 并从堆栈中消除工具(从而消除复杂性)很有用。这可能是通过创建一个用于部署应用程序的 deploy.yaml playbook 来实现的。

Docker 的职责也与 Ansible 重叠,但在不同的领域,即配置。应用程序所需的系统配置的任何部分都可以使用 Dockerfile 在容器内进行配置,而不是使用 Ansible 在系统范围内进行配置。

如果您有设置应用程序环境的 rake 任务,则可以将它们放入 Dockerfile 中的 RUN 命令中。但请记住,这些只会在您构建镜像时执行,而不是在您运行镜像时执行。

一般来说,我是这样看待的:Docker 设置了一个容器,其中包含运行应用程序的一部分所需的一切(包括代码的特定 checkout )。 Ansible 配置您运行容器的环境并管理所有更新容器并将它们放在正确位置的工作。

关于Docker,如何替换 docker 中的 capistrano 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39084308/

相关文章:

awk - 在表格数据上使用带有 shell 模块的 awk 条件语句在 Ansible 中没有按预期工作

ruby-on-rails - 使用Capistrano部署时出错

java - 如何对依赖于 Maven 本地存储库的 Java 应用程序进行 Docker 化?

docker - php :5-apache mcrypt. h 未找到

docker - 为什么有时需要在docker上运行nginx?

Ansible - 将 shell 命令的输出传递给变量

nagios - 使用 Ansible 安装 Nagios,主机变量

ruby-on-rails-3 - 使用 capistrano 和 passenger 部署 Rails 应用程序时,应该如何设置用户权限?

ruby-on-rails - 部署到 capistrano 时如何调试?

java - 使用 Docker-Compose 运行多个 Spring-Boot 应用程序