gpt4 book ai didi

docker - 如何使用 Vagrant、ansible 和 docker 让 Linux 开发机器尽可能接近生产环境

转载 作者:行者123 更新时间:2023-12-03 22:08:24 25 4
gpt4 key购买 nike

对不起,这是我想要实现的非明确标题

  • 让我的 Web 应用程序与 docker 一起运行(一个容器用于数据库,一个用于缓存,一个用于 php-fpm + 代码)
  • 在生产中,因为我没有 vagrant ,我希望使用 docker 模块的标准 ansible 能够提供环境
  • 由于我的开发人员拥有 linux 机器并且 vagrant 支持 docker 作为提供者,我希望这些 docker 容器直接在我们的开发机器中运行而无需虚拟机(因为我们有很多项目,按项目保留一个虚拟机很快就会耗尽内存,并且我们需要经常停止/启动机器,尤其是在维护阶段)
  • 我们有一些 Mac/Windows 上的开发人员,所以我们仍然需要 vagrant 来提供抽象层“vagrant up”来创建一个脑残的简单开发环境。

  • 我知道如何为 使用 Vagrant+Ansible 配置一个 机器和
    我知道如何使用 ansible 和 docker 模块来创建一个完整的环境,下面的例子

    http://docs.ansible.com/docker_module.html
    Vagrant.configure(2) do |config|
    config.vm.box = "ubuntu/trusty64"
    config.vm.provision :ansible do |ansible|
    ansible.playbook = 'provisioning/site.yml'
    ansible.extra_vars = app_vars
    ansible.verbose = verbosity_arg
    end
    end

    但随后它将在虚拟机中运行

    我知道如何使用 Vagrant 在一个 vagrant 文件中创建多台机器
    Vagrant.configure(2) do |config|
    config.vm.define :dbmachine do |dbmachine|
    dbmachine.vm.provider = "docker" do |d|
    ...
    end
    end
    config.vm.define :cachemachine do |cachemachine|
    cachemachine.vm.provider = "docker" do |d|
    ...
    end
    end
    end

    但是在生产/登台中,由于我没有 Vagrant ,我不再有描述架构的东西

    那么有没有办法将这些东西结合在一起以满足我的需求?

    最佳答案

    几点注意事项:

  • 并非所有组件都需要 docker 化。例如,您的数据库不会经常发布新版本。而且它不会让您即时添加更多实例或减少。其他组件缓存/代码等可能是 docker 化的良好候选者。免责声明:there are few reasons to dockerize db as well, but check if it makes sense for you
  • Vagrant 和 docker 是替代方案。您应该使用其中一个 - 而不是同时使用两者。 Vagrant 构建了一个完整的 VM(在 VMWare/或 virtualbox 等上),而 docker 构建了一个轻型 VM(称为容器),旨在全心运行一个进程。我将假设您在接下来的几点中更喜欢使用 docker 而不是 vagrant。
  • Mac/Windows 开发人员最好使用 Docker for Mac 和 Docker for Windows 在他们的开发机器上设置应用程序。它可以运行 docker 容器。我建议在 virtualbox 中使用完整的 linux VM,可以在其上运行 ansible 和 docker。 (你可以在这里使用 vagrant 来自动安装带有 ansible 和 docker 的 linux VM,但它只对那些在 VM 上工作的 mac 和 windows 开发人员有用。)
  • 使用Dockerfile而不是 vagrantfile 用于构建/描述您的应用程序环境。或者更好的是,如果您更喜欢 ansible 剧本而不是 dockerfile(基本上是 shell 命令),您可以使用 ansible 来设置您的 docker 容器。 AFAIK 它们是做同一件事的两种方式——但 ansible 确实有更好的语法和功能。在 Dockerfile 中调用你的 ansible playbook 以获取“配置任务”。在为“部署任务”构建容器之后,您还可以调用另一个 ansible playbook。 Chef 也是 ansible 的一个很好的替代品。
  • 要使用 ansible,您需要在非开发(qa/prod)环境中使用控制机器和一堆目标机器。 Ansible 将能够通过 SSH 连接到目标机器,并启动 docker 容器。如果您编写一个用于停止容器、提取最新图像并启动它的剧本 - 您将拥有一个很好的自动化部署过程。在本地开发箱上,您可以通过启动/停止本地运行的 docker 容器来测试您的 ansible 脚本。
  • 关于docker - 如何使用 Vagrant、ansible 和 docker 让 Linux 开发机器尽可能接近生产环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29559254/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com