neam / vagrant-docker-local-dev-vm
.
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
提交,因为它不应包含任何机密信息,并将与其他开发者共享。
自定义安装
为了使用这些脚本进行其他项目结构的配置
- 分叉此仓库
- 修改 composer 元数据以反映您的分叉
- 将您的分叉添加为子模块或将其添加为 composer 依赖项
- 修改脚本以适应您的项目结构
开发者机器本地设置
安装先决条件
从 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"