使用 vagrant、docker 和 git 进行项目布局

2024-03-02

所以我最近发现了 docker 和 vagrant,并且我正在启动一个新的 Php 项目,我想在其中使用两者:

Vagrant 是为了拥有一个所有开发人员都可以使用的可互换环境。

Docker 用于生产,但也在 vagrant 机器内部,因此开发环境尽可能类似于生产环境。

第一种方法是将所有定义文件与源代码一起放置在具有以下布局的同一存储库中:

/docker
   /machine1-web_server
       /Dockerfile
   /machine2-db_server
       /Dockerfile
   /machineX
       /Dockerfile
/src
   /app
   /public
   /vendors
/vagrant
   /Vagrantfile

因此,vagrant 机器在配置时会运行所有 docker“机器”并正确设置数据库和源代码。

这是一个好方法吗?我仍在尝试弄清楚这在部署到生产方面将如何工作。


这是一个好方法吗?

是的,至少几个月以来它对我有用。

不同的是我还有一个docker-compose.yml https://docs.docker.com/compose/ file.

In my Vagrantfile第一个配置部分安装 docker、pip 和 docker-compose:

config.vm.provision "shell", inline: <<-SCRIPT
    if ! type docker >/dev/null; then
        echo -e "\n\n========= installing docker..."
        curl -sL https://get.docker.io/ | sh
        echo -e "\n\n========= installing docker bash completion..."
        curl -sL https://raw.githubusercontent.com/dotcloud/docker/master/contrib/completion/bash/docker > /etc/bash_completion.d/docker
        adduser vagrant docker
    fi
    if ! type pip >/dev/null; then
        echo -e "\n\n========= installing pip..."
        curl -sk https://bootstrap.pypa.io/get-pip.py | python  
    fi
    if ! type docker-compose >/dev/null; then
        echo -e "\n\n========= installing docker-compose..."
        pip install -U docker-compose
        echo -e "\n\n========= installing docker-compose command completion..."
        curl -sL https://raw.githubusercontent.com/docker/compose/$(docker-compose --version | awk 'NR==1{print $NF}')/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
    fi
SCRIPT

最后是触发 docker-compose 的配置部分:

config.vm.provision "shell", inline: <<-SCRIPT
    cd /vagrant 
    docker-compose up -d 
SCRIPT

其他方法 http://docs.vagrantup.com/v2/provisioning/docker.html从 vagrant 构建和启动 docker 容器,但使用 docker-compose 允许我从 Vagrantfile 中外部化任何 docker 特性。因此,这个 Vagrantfile 可以在其他项目中重用而无需更改;你只需要提供一个不同的docker-compose.yml file.

我做的另一件事不同的是把Vagrantfile在你的项目的根目录下(而不是在vagrant目录),因为这是人类和工具(某些 IDE)期望找到它的地方。 PyCharm 可以,PhpStorm 可能也可以。

我也把我的docker-compose.yml文件位于我的项目的根目录下。

最后,为了进行开发,我只需转到我的项目目录并启动 vagrant,它告诉 docker-compose(然后最终构建)运行 docker 容器。


我仍在尝试弄清楚这在部署到生产方面将如何工作。

为了部署到生产环境,常见的做法是通过将 Docker 镜像发布到private 码头工人注册表 https://github.com/docker/docker-registry。您可以在自己的基础设施上托管此类注册表,也可以使用提供此类注册表的在线服务,例如码头工人中心 https://hub.docker.com/.

还为运营团队提供docker-compose.yml https://docs.docker.com/compose/文件将定义如何运行容器并链接它们。请注意,该文件不应使用build: https://docs.docker.com/compose/yml/#build指令,而是依赖于image: https://docs.docker.com/compose/yml/#image操作说明。谁想在部署到生产时构建/编译东西?

This Docker 博客文章 https://blog.docker.com/2015/02/orchestrating-docker-with-machine-swarm-and-compose/可以帮助弄清楚如何使用 docker-compose 和 docker-swarm 在集群上进行部署。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 vagrant、docker 和 git 进行项目布局 的相关文章

  • Composer 文件中的 Docker 健康检查

    我尝试将新的健康检查集成到我的 docker 系统中 但我真的不知道如何以正确的方式进行 问题是 我的数据库容器需要比启动主应用程序的容器更多的时间来启动和初始化数据库 结果 主容器无法正确启动 导致数据库连接丢失 我编写了一个 healt
  • 尝试使用 php 发送 POST 请求,无论我做什么,我都会收到“HTTP ERROR 500”

    为了发出 HTTP 请求 有人建议我尝试使用 PHP 并给了我一段代码 url https example com dashboard api data array to gt PHONE NUMBER from gt SENDER ID
  • 将更改从一个分支复制到另一个分支

    我有一个分支名为BranchA from master 我有一些改变BranchA 我不会合并来自BranchA to master 现在我创建了另一个分支master named BranchB 我如何复制更改BranchA to Bra
  • get url 重定向时 File_get_contents() 不起作用

    我正在使用的功能是 function http post url data data url http build query data data len strlen data url date default timezone set
  • 如何对 SQL 进行多次查询

    我正在尝试创建一个表 并在 PHP 脚本的帮助下在数据库中插入一些值 虽然只插入 1 行 但效果很好 当我尝试输入更多行数时 出现错误 我需要为每个查询编写完整的插入语句 因为我正在使用在线 Excel 到 SQL 查询转换器
  • CodeIgniter 控制器 - JSON - AJAX

    我正在尝试通过 AJAX 使用 CodeIgniter 发送表单构建 并尝试使用 JSON 获取响应 但是 我只在打开开发人员选项卡时看到响应 我什至不确定这是否实际上是响应 因为它显示了两个 json 数据 它所显示的只是加载旋转器 然后
  • 在我的 index.php 中加载 CSS 和 JS 等资源时出现错误 403

    我使用的是 Linux Elementary OS 并在 opt 中安装了 lampp My CSS and JS won t load When I inspect my page through browser The console
  • docker容器大小远大于实际大小

    我正在尝试从中构建图像debian latest 构建后 报告的图像虚拟大小来自docker images命令为 1 917 GB 我登录查看尺寸 du sh 大小为 573 MB 我很确定这么大的尺寸通常是不可能的 这里发生了什么 如何获
  • PHP - 类外 use 关键字和类内 use 关键字的区别

    伙计们 美好的一天 只是想问一下有什么区别use之外的class and use在 的里面class 我也用谷歌搜索过 但我的问题与答案不匹配 Example namespace App Http Controllers Auth use
  • 检查 PHP 中的字符串长度

    我有一个长度为 141 个字符的字符串 使用下面的代码我有一个if如果字符串大于或小于 140 则语句返回一条消息 libxml use internal errors TRUE dom new DOMDocument dom gt loa
  • 如何纠正这个非法字符串偏移?

    我收到此错误 警告 第 32 行 home mysite public html wp content themes evento lib php extra class php 中的非法字符串偏移 type 我意识到文件中的这部分代码是错
  • Mysqli 更新抛出 Call to a member function bind_param() 错误[重复]

    这个问题在这里已经有答案了 我有一个 70 80 字段表单 需要插入到表中 因此我首先根据表单中的输入名称在数据库中创建了一个表 而不是手动创建一个巨大的插入语句 这是我使用的代码创建 更改表 function createTable ar
  • git 是否有任何静态接口?

    我一直在寻找一个宁静的 git api 但似乎没有找到 我得到的最接近的是 Github 的 api 来访问一些存储库信息 还有其他的实施吗 Orion Git API http wiki eclipse org Orion Server
  • 使用 json_encode() 函数在 PHP 数组中生成 JSON 键值对

    我正在尝试以特定语法获取 JSON 输出 这是我的代码 ss array 1 jpg 2 jpg dates array eu gt 59 99 us gt 39 99 array1 array name gt game1 publishe
  • Windows10上打开/创建内网Vagrant失败

    我昨天将 Windows 10 升级到了最新更新 现在启动时vagrant up命令 我收到此错误 gt default Booting VM gt default Waiting for machine to boot This may
  • 部分共享git仓库

    我是 git 新手 我想知道是否支持以下场景 如果支持的话如何支持 即用于设置和更新的 git 命令 可以从三个不同的地方获取存储库 本地 镜像 和 github mirror 完全镜像 local github 镜像 local 但 受版
  • 我可以在 PHP 会话变量中安全地存储用户名和密码吗?

    我想在 REST api 之上制作一个轻量级的 web 应用程序 用户只需进行一次身份验证 从那时起 所有针对 web api 的请求都希望通过以某种方式保持用户名和密码有效来完成 我已经做了一个工作原型我在哪里将用户名和密码存储在会话变量
  • 反向引用在 PHP 中不起作用

    最近我一直在研究 更多的是在实践中说实话 正则表达式 我注意到他的力量 我提出的这个要求 link https stackoverflow com questions 30380397 take the text up to a speci
  • phpActiveRecord 日期时间格式不正确

    当尝试使用 phpActiveRecord 在表中创建记录时 出现以下错误 Invalid datetime format 1292 Incorrect datetime value 2013 06 20 11 59 08 PDT for
  • 如何使用 php 将 *.xlsb 转换为数组或 *.csv

    我正在尝试转换 xlsb文件到php array or csv文件 或至少 xls 我尝试使用PHPExcel 但看起来它无法识别该文件中的内容 我注意到 你可以重命名 xlsb文件到 zip文件 然后使用命令行解压缩unzip zip 之

随机推荐

  • FabricJS 文本框 - 某些字体的光标位置设置不正确

    在上图中 光标应该位于末尾 但由于某种原因 它被放置在最后一个字符之前 这只发生在某些字体上 我认为这与自定义字体的加载方式无关 该图像取自http fabricjs com loadfonts http fabricjs com load
  • 聚类和贝叶斯分类器 Matlab

    因此 我正处于下一步该做什么的十字路口 我开始学习一些机器学习算法并将其应用于复杂的数据集 现在我已经做到了 我从一开始的计划就是结合两种可能的分类器 试图建立一个多分类系统 但这就是我被困住的地方 我选择聚类算法 模糊 C 均值 在学习了
  • python yaml.dump 错误缩进

    我正在执行以下 python 代码 import yaml foo name foo my list foo test bar test2 foo test3 bar test4 hello world print yaml dump fo
  • 如何从 C# 显示文件属性对话框安全选项卡

    这个帖子 如何从 C 显示文件的 属性 对话框 https stackoverflow com questions 1936682 how do i display a files properties dialog from c描述了如何
  • 如何在 Angular 中使用 *ngFor 设置 formControlNames?

    我正在尝试使用设置表单控件 ngFor数组中的对象 根据用户的不同 有时我的数组中会有 1 个对象 但有时会有多个对象 我的问题是我想创建一个formControlName使用我可以但不确定如何在组件中设置表单组验证器的循环 只需像下面这样
  • 如何通过抽象活动记录向子类添加范围

    我想要一些子类 它们都应该有一个范围 同名 尽管我知道直接继承不可能做到这一点 但基本思想如下 class MySuperClass lt lt ActiveRecord Base abstract class true scope sco
  • 如何将文件添加到以前的提交?

    在过去的一个小时左右我修改了文件 A ATest B BTest 为了确保我的提交消息与实际更改一致 已提交A并附有说明 不幸的是我没有包括在内ATest进入该提交 与此同时 尚未承诺的是B and BTest 此时最好的方法是什么 我想要
  • 为什么这条线没有被覆盖? Xcode 代码覆盖率

    我在 Xcode 中的代码覆盖率报告中遇到问题 从这个截图中你可以看到 在左侧选项卡上 第 58 行从断点 触及 在右侧选项卡上 测试通过 在右侧选项卡上 我仅运行第 37 行的测试 为什么 Xcode 将第 58 行标记为红色 因为未覆盖
  • Xcode C++ omp.h 文件未找到

    我正在尝试将 openmp 包含到我的 Xcode C 项目中 我已将 Xcode 中的编译器更改为 LLVM GCC 4 2 添加 fopenmp 作为 CFlag 并在 xcode 中启用了 OpenMP 支持 但它仍然显示 omp h
  • 最大活动数量!

    是否有关于应用程序可以拥有的活动数量的设计指南 如果有限制 那么可以在 Android 应用程序中捆绑的理想活动数量是多少 IMO 没有这样的限制 典型的应用程序将有
  • 如何检查一个对象是否具有属性?

    如何检查一个对象是否具有某些属性 例如 gt gt gt a SomeClass gt gt gt a property Traceback most recent call last File
  • SEO 和在 url 中使用 !#

    我在某处读到过如何创建一个网站 该网站使用 AJAX 加载页面的每个部分 同时仍然提供 SEO 这与 url 中使用 有关 类似于推特的做法 我似乎在任何地方都找不到任何有关它的信息 有人知道我在说什么吗 Is this http goog
  • 使用 Microsoft Teams 的 REST API 访问用户状态

    我想查询我自己和其他用户在 Teams 中的状态 理想情况下 我希望在它们发生变化时收到通知 以便我可以更改我的内部状态 目前图形 API 似乎没有此功能 不幸的是 这尚不可用 我们确实计划将其添加到 Microsoft Graph 但我们
  • 是否有一个 Java 库可以收集 UI 使用情况统计信息?

    是否有一个 Java 库可以收集 UI 使用情况统计信息 感觉像 log4j 的东西吗 如果您正在使用 Eclipse 平台 您可能会查看使用数据收集器项目 http www eclipse org epp usagedata http w
  • Magento 发票 Excel 导出 - 如何更改字段?

    我想将一些发票导出到 Microsoft Excel XML 标准格式效果不太好 因为我需要一些额外的列 我的问题是 文件在哪里生成 我在哪里设置这些特殊列 提前致谢 导出到 Excel 时执行InvoiceController calls
  • 如何确定平衡或完全平衡的二叉搜索树(仅从图片中)

    我不知道如何确定一棵树是否平衡 完全平衡 或者如果我将它作为图片而不是代码来确定它是否平衡 例如 如果我有这棵树 如何检查它是平衡 完美平衡还是不平衡 有人能给我一个完美平衡树的例子吗 o b p d m r 显然 如果是这样的话 我可以判
  • catch forEach 最后一次迭代

    arr 1 2 3 arr forEach function i last iteration 如何捕获循环结束的时间 我可以if i 3 但我可能不知道我的数组的编号是多少 另请参阅ES6 的更新答案 https stackoverflo
  • Outlook 超链接上下文菜单

    我正在尝试为超链接制作上下文菜单 似乎有几个上下文可以拦截超链接事件 目前我对 idMso ContextMenuReadOnlyMailHyperlink 的上下文菜单感兴趣 有两种不同的方式可以执行此菜单中新按钮的回调 如果在 Outl
  • 如何给用户添加角色?

    我们使用 Yii2 框架的最后一个 alpha 版 用户的角色已经创建 但问题是如何分配给用户 缺少文档 对于 RBAC 的数据库版本 请使用 DbManager 引用自 Alexufo use yii rbac DbManager r n
  • 使用 vagrant、docker 和 git 进行项目布局

    所以我最近发现了 docker 和 vagrant 并且我正在启动一个新的 Php 项目 我想在其中使用两者 Vagrant 是为了拥有一个所有开发人员都可以使用的可互换环境 Docker 用于生产 但也在 vagrant 机器内部 因此开