neam/vagrant-docker-local-dev-vm

.

安装: 107

依赖: 0

建议者: 0

安全: 0

星星: 3

关注者: 1

分支: 1

开放问题: 0

语言:Shell

类型:项目

1.0.0 2015-02-09 22:08 UTC

This package is not auto-updated.

Last update: 2024-09-14 16:50:11 UTC


README

已弃用

注意:该项目创建是为了能够在本地开发工作流程中使用 Docker pre-1.2.0。自从 Docker 1.5.0 开始,Docker 的所有原始限制(最初需要通过 Vagrant 和基于 shell 脚本的工作来解决问题)都已解决。因此,该项目现在已被 https://github.com/neam/docker-stack 取代,它使得开发工作流程更快,首次设置和维护(它也处理部署)。

原始 README

使用 Vagrant 来配置 Docker 容器以用于本地开发。

功能

  • 在 OS X 上正确安装 docker(通过 Vagrant 的 docker 提供者通过主机虚拟机)
  • 每个项目只使用 1 个虚拟机,但允许安装尽可能多的必要 docker 容器来设置本地服务(LAMP 栈、LEMP 栈、MEAN 栈、任何数据库、SMTP、RabbitMQ 等 - https://registry.hub.docker.com/ 上的任何内容都适用)
  • 包括设置本地 MariaDB docker 容器并具有持久数据的脚本
  • 配置了 iptables,使开发机器上运行在端口 14444 上的 selenium 服务器在 docker 容器内可访问(这样可以在容器内运行验收测试)
  • 预配置了运行 4 个容器:web、db、mailcatcher 和代理
  • 在容器启动时安装 Xdebug

要求

  • OSX(欢迎对 Windows 和 Linux 的支持进行拉取请求)
  • Dokku 构建的 Docker 镜像
  • 特定的项目结构(见下文)

项目配置

注意:项目根目录 与安装此扩展的 vendor 目录相同的目录。

默认容器的说明

  • web - 运行你的 web 应用程序(s)的容器,使用在 项目根目录 中可用的源代码。
  • db - 运行具有持久数据的本地 MariaDB docker 容器
  • mailcatcher - 运行一个 mailcatcher SMTP 服务器
  • proxy - 运行一个使用在 项目根目录 中找到的配置的 nginx 反向代理。

生产中的对应服务

  • web - Appfog、Heroku、Scalingo、Dokku 等上的 PaaS 应用程序
  • db - Amazon RDS、Rackspace Cloud DB、ClearDB 等云数据库服务
  • mailcatcher - Gmail、Amazon Simple Mail Service、Foo 等SMTP 服务
  • proxy - 与你的公共 DNS 相连的服务器(s)上的反向代理或其他路由层

构建你的项目以与通用本地开发 vm 脚本一起工作

  • 将此项目作为 项目根目录 中的 composer 依赖项添加
  • 如果你的项目需要在本地开发反向代理配置,请确保 项目根目录 中包含一个基于 Nginx 的测试应用程序。一个良好的起点是 GITLINKHERE。

注意:vagrant 配置默认会将 项目根目录 中的代码在虚拟机中可用。

  • 打开一个终端窗口,并将 cd 命令切换到与此 readme 文件相同的目录。然后,创建一个特定于项目的 .local-dev-vm-env 文件

    cp .local-dev-vm-env.dist ../../../.local-dev-vm-env

  • 将您的项目中的 .local-dev-vm-env 提交,因为它不应包含任何机密信息,并将与其他开发者共享。

自定义安装

为了使用这些脚本进行其他项目结构的配置

  1. 分叉此仓库
  2. 修改 composer 元数据以反映您的分叉
  3. 将您的分叉添加为子模块或将其添加为 composer 依赖项
  4. 修改脚本以适应您的项目结构

开发者机器本地设置

安装先决条件

http://www.vagrantup.com/ 安装 vagrant(v1.6.5)和从 https://virtualbox.ac.cn/ 安装 VirtualBox。

安装 VirtualBox 客户端插件

vagrant plugin install vagrant-vbguest

为 OSX 安装 docker 客户端

brew install docker

安装 docker 守护进程

打开一个终端窗口,并 cd 到与这个 readme 文件相同的目录。

源码项目的 .local-dev-vm-env 文件

source ../../../.local-dev-vm-env

运行以下脚本

scripts/setup/generate-host-vm-vagrant-config.sh # takes around 1 second
scripts/setup/install-docker-in-host-vm.sh # takes 1-3 minutes

(注意:上面的命令应该因为错误消息 Stderr: Unable to find image 'this-image-should/make-vagrant-fail-it-is-ok-and-expected' locally 而失败。这是正常且预期的。不存在的镜像名称只是暂时用于使 vagrant 在主机 vm 中安装 Docker。)

设置 docker 容器

登录到 docker 仓库(除非您之前已经登录过)

docker login

(注意:请确保您已在 https://registry.hub.docker.com 上注册,并且已经被邀请访问您项目使用到的任何私有 docker 镜像仓库)

拉取最新的 docker 镜像(因为 vagrant 无法运行,它需要登录 - https://github.com/mitchellh/vagrant/issues/4042

scripts/setup/pull-remote-docker-images.sh # around 1-2 gb is downloaded by this command

确保子模块已初始化

git submodule update --init --recursive

启动和配置 docker 容器

scripts/setup-containers.sh

提示:您可以在另一个终端中运行 watch docker ps 以查看启动容器的当前状态。当所有容器都启动时,输出应如下所示(注意:以下只显示前五行)

CONTAINER ID   IMAGE                                                                      COMMAND                CREATED         STATUS
cd7e51984d33   fooproject/proxy:feature_cms-1023-friends-base-url-proxy-2d2f560-clean-db  /bin/bash /vagrant/p   2 minutes ago   Up About a minute
af7300296836   fooproject/web:feature_foo-123-new-nginx-configuration-2d2f560             /bin/bash /vagrant/w   3 minutes ago   Up 2 minutes
ae24cb46f35c   nisenabe/mailcatcher:latest                                                mailcatcher -f --ver   3 minutes ago   Up 2 minutes
7d713175b2b9   mariadb/cms:latest                                                         /usr/bin/start_maria   4 minutes ago   Up 2 minutes

之后,入门说明应在主项目 readme 中继续。

更新到最新的 git 变更

在拉取最新的 git 变更后,运行以下命令以使用最新的配置启动容器

scripts/setup/generate-host-vm-vagrant-config.sh
scripts/vagrant-reload-host-vm.sh
scripts/setup-containers.sh

有用的命令

为了快速启动和配置 docker 容器而无需再次运行设置脚本(例如在重启笔记本电脑后,但未更改/拉取任何 vm 配置更改的情况下)

scripts/start-containers.sh

为了验证是否可以访问本地工作站上的数据库

scripts/verify-db-access.sh

为了 ssh 到 web 容器(注意:db 容器不支持 ssh)

scripts/ssh.sh web
# scripts/ssh.sh proxy # The proxy container should support ssh but it is not currently working

为了跟踪容器中的日志,运行

scripts/logs.sh

为了跟踪特定容器中的日志,运行以下命令之一

scripts/logs.sh db
scripts/logs.sh web
scripts/logs.sh mailcatcher
scripts/logs.sh proxy

为了 ssh 到主机 vm,cd 到 host-vm 并运行 vagrant ssh

使用 Xdebug

Xdebug 在 "web" 容器启动时安装。它默认未启用,但可以通过触发器激活。例如,使用 Xdebug Helper Chrome 扩展程序 从浏览器启用 Xdebug 分析。

故障排除

有时 scripts/setup-containers.sh 命令似乎因为一个 vagrant 缺陷(padding error, need 3037648479 block 16)而失败,但这很可能是误报,容器应该正在运行。如果不这样做,请重新运行脚本,直到所有容器都启动并运行。

如果在PATH中遇到警告:不安全的全局可写目录 /usr,模式 040777,请尝试从 /usr 及其子目录中移除全局写入权限

sudo chmod -R o-w /usr/

如果您无法连接到数据库并且无法找出原因,请从头开始运行以下命令

rm -r build/cms-virtualbox/.mariadb
scripts/setup-containers.sh

如果您根本无法连接到本地任何端口,vagrant 或 virtualbox 可能遇到了一些网络问题。重启您的机器(真的,这实际上有帮助)。如果这没有帮助 - 或者重新启动或从 virtualbox 中移除虚拟机,然后再次运行设置程序。

虚拟机需要大量的空闲磁盘空间(>10 Gb),因为主机虚拟机在每次 vagrant rsync 时都会增大。

更新LEMP和PROXY的Docker基础镜像

这使得nginx配置、系统文件、供应商库等由构建包构建的内容可用于本地开发虚拟机使用。

在dokku主机上

设置基于更新而设置的Docker镜像(用适当的已部署应用程序名称替换,以基于未来的本地开发容器镜像)

export LEMP_APP=feature_cmsint-155-produce-pages-pu-cms-clean-db
export PROXY_APP=feature_cms-1023-friends-base-url-proxy-abc1234-clean-db

确保容器正在当前dokku主机上运行

docker ps | grep ${LEMP_APP}
docker ps | grep ${PROXY_APP}

标记并推送web docker lemp应用程序

export CONTAINER_ID=`docker ps | grep dokku/${LEMP_APP}:latest | awk '{print $1}'`

docker commit $CONTAINER_ID fooproject/web:${LEMP_APP}
# todo - strip away existing config since it contains secrets
docker push fooproject/web

标记并推送web docker proxy应用程序

export PROXY_CONTAINER_ID=`docker ps | grep dokku/${PROXY_APP}:latest | awk '{print $1}'`

docker commit $PROXY_CONTAINER_ID fooproject/proxy:${PROXY_APP}
docker push fooproject/proxy

在本地开发虚拟机配置中

.local-dev-vm-env 中的Docker镜像标签更新为刚才推送的标签。

使用vagrant配置在远程主机上部署容器

待办事项:此部分尚未完成也未经过测试,欢迎提交拉取请求。

数字海洋

要使用数字海洋提供程序,您需要vagrant数字海洋插件

vagrant plugin install vagrant-digitalocean

在配置实例之前,一些一般配置变量对于配置是必要的

export DIGITAL_OCEAN_CLIENT_ID="replaceme"
export DIGITAL_OCEAN_API_KEY="replaceme"
export DIGITAL_OCEAN_REGION="Amsterdam 2"

根据性能要求设置配置

示例 1

export HOSTNAME=foo.example.com
export SIZE=8GB

示例 2

export HOSTNAME=foo.example.com
export SIZE=4GB

第一次运行

vagrant up --provider=digital_ocean

Amazon EC2

要使用数字海洋提供程序,您需要vagrant数字海洋插件

vagrant plugin install vagrant-aws

在配置实例之前,一些一般配置变量对于配置是必要的

export FOO="bar"