使用 Docker 搭建 PHP 开发环境

Docker 是十分优秀的软件容器化平台。它提供的容器技术将各种软件和它们所依赖的运行环境打包成标准的可移植的 container(容器)/image(镜像), 进而发布到不同的平台上运行,并且能保证项目开发和生产环境的一致性。

Why Docker ?#

作为 Web 开发者,在 Docker 流行之前,要搭建开发环境通常有两种选择:一种是使用 wamp、xampp、mamp 等集成开发环境安装包,另外一种就是使用普通虚拟机来安装 linux 服务器,然后通过下载一键安装包(如:lnmp)或者逐个安装做需要的软件。前者虽然简单,但太不灵活,想要安装额外的软件或者版本会很麻烦或者干脆不知道如何下手;后者除了费时费力,占用本机资源过多,可能会导致系统运行缓慢,而且如果你忘了及时生成快照,一旦失误,追悔莫及。

幸好,Docker 来了!它简单易用,灵活多变,方便迅捷,扫除了以上种种弊端。如果你想稍微详细的认识下这位虚拟化界的明星,传送门(快速理解 Docker)。

安装 Docker#

平时开发的环境一般都是 Mac 或者 Windows,Linux 暂时没有研究,所以接下来只针对前两者写下步骤,这两个平台,官方都推荐了两种安装方式:app 和 toolbox。注:app 方式对系统版本和配置会有一定要求,Mac 版本会自动为你安装好 VM(虚拟机),但 Windows 版本需要你安装微软虚拟化产品 Hyper-V,而 toolbox 方式则需要你额外安装 virtualbox 来作为 docker 的 VM。

App

Toolbox

以上方式本质上都会在你的系统中安装 docker-engine、docker-machine、docker-compose 和 VM。因为 docker 高度依赖 linux 内核提供的 cgroup,namespace 等特性和接口,所以 mac 和 windows 平台需要使用 docker-machine 和虚拟机在后台创建运行一个 linux 内核。

我之前的的安装方式就是直接在 Mac 上使用 brew,但目前看来这种方式已经不再推荐,强烈推荐使用原生的 app 方式!

Compose 你的应用#

docker-compose 是用于定义和运行复杂 Docker 应用的工具。你可以在 docker-compose.yml 文件中定义一个多容器的应用,然后使用一条命令来启动,然后所有预先定义好的操作都会被自动完成。

为了不重复造轮子,直接使用 github 上的第三方包。当然你也可以亲自构建每一个你所需要的容器镜像,然后用 docker-compose.yml 将所有容器组织起来运行,但这需要你具备一定的 linux 基础和 docker 的运行机制和相关语法。

本人正在学习 laradock 这个基于 Docker 的开发环境包,然后根据自己的需要删除了一些我认为不常用的部分、修改了部分配置以及增加了 Elasticsearch 容器,最终新开了自己的仓库 DevDock。当然,也推荐使用 laradock。

我的仓库目前支持的容器组合:
nginx, php-fpm, mysql, redis, memcached, elasticsearch, workspace.
注:workspace 和 php-fpm 一般会被其他容器所依赖,所以会自动运行,启动时不必指定。

  • 进入到你的应用的上级目录:

    git clone https://github.com/RystLee/DevDock.git
  • 修改 hosts
    如果直接安装启动,是可以通过 127.0.0.1,就能直接访问 nginx 的,但一般而言为了方便记忆,我们会去修改 hosts 文件,增加一条:

    127.0.0.1 laravel.dev
  • 修改你的 nginx 中的站点配置文件:
    在 DevDock 目录下找到 nginx,修改 sites 目录下的站点配置文件,通过修改本地的 hosts 来自定义域名,并在 nginx 容器中的 sites 文件夹下,修改相应的域名映射。

    server_name  laravel.dev
  • 安装启动应用

    cd DevDock
    docker-compose up -d nginx mysql ... # 后面跟上你想使用的容器即可

然后,耐心地等待开发环境自动搭建完成即可,如果中途出现错误,一般是因为 GFW,网络会不太通畅,重新执行一两次就好,完成之后,打开浏览器,访问:http://laravel.dev 即可

关于该开发环境包详细使用,请直接查看 github 仓库的说明文档即可。

本文链接: https://macken.me/article/create-php-dev-e...

声明
在转载或修改本文后发布的文章中注明原文来源信息的前提下,允许进行转载该篇文章或经修改后发布且不用告知本文作者。

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由 Summer 于 8年前 加精
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 19
Summer

Laravel with Docker, 不错

8年前 评论

@Ryan 嗯啊,我文章里有提到,就是通过学习 laradock,然后自己实施了一下而已,严重推荐大家学习 laradock,我这只是做个笔记,供大家参考下。

8年前 评论

这是我一直在用的 Dockerfile,已经配置好了 crontab 了。不过一直想配置自动部署 let's encrypt 没有成功!
https://github.com/lijy91/daza-backend/blo...

8年前 评论

@nophp 参考 DaoCloud 的示例改的!

8年前 评论

@nophp 感谢分享!很棒很详细!

8年前 评论

@overtrue 久闻超哥大名,谢超哥支持!

8年前 评论

@nophp 大家互相学习:love_hotel:

8年前 评论

为什么没有 linux 版本的:blush:

8年前 评论

现在 docker for mac 应该有正式版了,不需要 virtualbox 了,更方便一些。

8年前 评论

@smilekung 恩啊,已修改,现在强烈推荐原生的 app 方式:thumbsup:

8年前 评论

我想知道这个东西在 Windows10 原生 docker 下运行情况怎么样。。
昨天刚删了原生 docker。。。

8年前 评论
Destiny

:punch:

8年前 评论

之前自己折腾过,没成功,试试这个 laradock

8年前 评论

之前也是自己折腾 docker ,结果半途而费了,好好看看这个

8年前 评论

好文章,一键部署的话,可以看看《Docker 搭建可一键部署的多域名 LNMP 环境

7年前 评论