Laradock 搭建基于 Docker 的 PHP 开发环境
Docker 是什么
Docker 基于 Go 语言开发,是一个基于 LXC 技术之上构建的 Container 容器引擎。容器是一种以固定格式打包软件的方式,以便让软件可以在共享的操作系统中运行,不同于虚拟机,容器并不需要捆绑这个操作系统,只需要软件正常工作所必须的库和设置即可,这使得容器更加高效、轻量级、可以自成系统并且不管部署在什么地方都可以保证运行结果一致。
Docker提供了一种在安全、可重复的环境中自动部署软件的方式,它的出现拉开了基于云计算平台发布产品方式的变革序幕。开发者使用 Docker 可以解决当需要和同事共享代码时”只能在我的机器工作”的问题;操作者使用 Docker 可以在关联容器中边运行边管理以便获取更好的计算密度;企业使用 Docker 可以用来构建敏捷的软件分发管道以便可以更快处理新特性。
为什么要使用 Docker
Docker 的出现就是为了解决以下问题:
- 环境管理复杂: 从各种 OS 到各种中间件再到各种 App,一款产品能够成功发布,作为开发者需要关心的东西太多,且难于管理,这个问题在软件行业中普遍存在并需要直接面对。Docker 可以简化部署多种应用实例工作,比如Web应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个 Image 部署。
- 云计算时代的到来: AWS 的成功, 引导开发者将应用转移到云上, 解决了硬件管理的问题,然而软件配置和管理相关的问题依然存在。Docker 的出现正好能帮助软件开发者开阔思路,尝试新的软件管理方法来解决这个问题。
- 虚拟化手段的变化: 云时代采用标配硬件来降低成本,采用虚拟化手段来满足用户按需分配的资源需求以及保证可用性和隔离性。然而无论是 KVM 还是 Xen,在 Docker 看来都在浪费资源,因为用户需要的是高效运行环境而非 OS, GuestOS 既浪费资源又难于管理, 更加轻量级的 LXC 更加灵活和快速。
- LXC的便携性: LXC在 Linux 2.6 的 Kernel 里就已经存在了,但是其设计之初并非为云计算考虑的,缺少标准化的描述手段和容器的可便携性,决定其构建出的环境难于分发和标准化管理。Docker就在这个问题上做出了实质性的创新方法。
Docker 通常用于如下场景:
- Web 应用的自动化打包和发布;
- 自动化测试和持续集成、发布;
- 在服务型环境中部署和调整数据库或其他的后台应用;
- 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
本教程不将那么多高大上的东西了,我们专注于通过 Docker 构建一个可移植的本地开发环境
Docker 安装使用
首先我们需要在系统安装 Docker 的免费社区版,官方提供 Windows、Mac 及 Linux 等版本下载:
下载地址:https://www.docker.com/community-edition#/download
下载操作系统对应版本安装后,双击打开 Docker 应用,即可在命令行检查是否安装成功:
如何在 Laradock 中快速安装 Nginx、PHP、Composer、MySQL、Redis 等工具?
1、首先将 Laradock 项目代码克隆到本地:
git clone https://github.com/Laradock/laradock.git
2. 进入 laradock
目录将 env-example
重命名为 .env
:
cp env-example .env
3. 修改里面的参数
修改 MYSQL_VERSION=5.7 // 我用的是mysql5.7的版本
修改 DOCKER_HOST_IP=本地的IP地址
修改PHP_FPM_INSTALL_XDEBUG=true // 安装xdebug
修改WORKSPACE_INSTALL_XDEBUG=true
4. 安装需要的容器
docker-compose up -d nginx redis mysql
如果指定端口已经被占用,运行上述命令会报错,关闭相应的服务再重新运行上述命令即可。
5、要测试配置访问域名指向 Docker 环境目录,我们先在 laradock
父级目录下创建一个与 laradock
同级的 html 目录,然后在 html 目录下运行 拉取自己的项目代码 命令创建一个新的 Laravel 应用,相应的层级目录
然后我们需要到 laradock
下编辑 .env
中的 APP_CODE_PATH_HOST
配置项:
nginx配置:
重启nginx服务
docker-compose up -d nginx
我们就可以在浏览器中通过 http://localhost
访问这个应用了,当然,如果需要的话,也可以将 localhost
换成任意你想要的域名,不过 还需要配置 /etc/hosts
和 laradock/nginx/sites/default.conf
里.
注意:
执行如上命令报错
EORROR:No container found for mysql_1
执行命令查看错误日志:
docker logs laradock_mysql_1
日志文件如下
官方文档:http://laradock.io/documentation/#mysql-access-from-host
以上的就是我遇到的数据库的坑。目前怎么在vscode 配置xdebug尚未解决,有什么建议的小伙伴欢迎你的宝贵意见!