Anjaxs

ubuntu16.04使用Laradock搭建基于Docker的PHP开发环境

简介

Laradock 是为 Docker 提供的完整 PHP 本地开发环境,和 Homestead 一样提供了一系列打包好(包括配置)的 Docker Image。Laradock 早期专注为 Laravel 打造 Docker 开发环境,因而最早在 Laravel 社区中出名,后来随着影响力的扩大,逐渐被 PHP 社区接纳和采用,目前支持的 PHP 项目除了 Laravel 之外,还有 Symfony、CodeIgniter、WordPress、Drupal 等等。

Docker 扫盲

在学习和使用 Laradock 之前,我们有必要先学习和了解 Docker,而在使用 Docker 之前,又有必要搞清楚下面两个问题:

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 环境。

安装使用

1.安装docker

#添加Docker源
sudo apt-get update
#增加CA证书
sudo apt-get install apt-transport-https ca-certificates
#添加GPG Key(一种加密手段)
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9

#创建docker.list文件
sudo vim /etc/apt/sources.list.d/docker.list
#在docker.list文件添加Ubuntu16.04LST的入口
deb https://apt.dockerproject.org/repo ubuntu-xenial main
#再次更新源
sudo apt-get update
#以防万一,清除过时的源
sudo apt-get purge lxc-docker
#验证下APT是从正确的库源下载应用的
apt-cache policy docker-engine
#安装 linux-image-extra
sudo apt-get install linux-image-extra-$(uname -r)
#通过apt命令在线安装docker
sudo apt-get install docker-engine
#开启docker的守护进程(Docker服务开启)
sudo service docker start
#国际惯例,用一个Hello world的来测试安装成功
sudo docker run hello-world

注意:我这里没有添加docker用户组,所以在接下来使用到docker相关命令都要加sudo

2.安装docker-compose

Ubuntu 16.04安装Docker-Compose

体会:curl不行,而安装完执行docker-compose命令出现错误,就重新卸载docker-compose再装,记得要加上sudo。

3.安装laradock并运行laravel

1、首先将 Laradock 项目代码克隆到本地:

git clone https://github.com/Laradock/laradock.git

2、进入 laradock 目录将 env-example 重命名为 .env

cp env-example .env

3、运行容器:

sudo docker-compose up -d nginx mysql redis beanstalkd

如果指定端口已经被占用,运行上述命令会报错,关闭相应的服务再重新运行上述命令即可。

4、打开项目的 .env 文件并添加如下配置:

DB_HOST=mysql
REDIS_HOST=redis
QUEUE_HOST=beanstalkd

5、要测试配置访问域名指向 Docker 环境目录,我们先在 laradock 父级目录下创建一个与 laradock 同级的 wwwroot 目录,然后在 wwwroot执行命令 sudo composer create-project --prefer-dist laravel/laravel blog(这里不使用laravel/installer,因为不可配置中国镜像下载慢)

在执行创建laravel项目这条命令时,我遇到一个错误:

[Symfony\Component\Process\Exception\RuntimeException]
The Process class relies on proc_open, which is not available on your PHP installation.

解决方法是:打开php.ini,并搜索disable_functions指令,找到类似如下内容:
disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server
将proc_open,proc_get_status并删除即可。

这个php.ini是我原本电脑下载php7.1里的。

然后我们需要到 laradock 下编辑 .env 中的 APPLICATION 配置项:

APPLICATION=../wwwroot/

这样就相当于为 wwwroot 与 Docker 的 /var/www 目录建立了软链接,然后我们修改 laradock/nginx/sites/default.conf 中的映射关系.

接下来,需要重启 Docker 的 Nginx:

sudo docker-compose up -d nginx 

这样,我们就可以在浏览器中通过 http://localhost 访问这个应用了,当然,如果需要的话,也可以将 localhost 换成任意你想要的域名,不过还需要配置 /etc/hostslaradock/nginx/sites/default.conf 里面的域名信息

 

以上就是 Laradock 的简单上手指南。这里我们设置的场景是新建一个应用,如果是多个应用的话要怎么办呢?也很简单,就是在上述 wwwroot 目录下创建多个应用目录,然后在 laradock/nginx/sites 下对应创建多个配置文件,最后不要忘记在系统 /etc/hosts 中配置相关域名绑定 IP 即可。

注:更多使用细节请参考官方文档:http://laradock.io/documentation/

 

以上大部分来自Ubuntu 16.04安装Docker1.12+开发实例+hello world+web应用容器

 

码字很辛苦,转载请注明来自Anjaxs博客《ubuntu16.04使用Laradock搭建基于Docker的PHP开发环境》

评论