为何用docker?
在电脑还是window系统的时候,经常需要基于vm服务搭建一套环境才能更好地(应该是更贴近线上环境)进行开发,而现在在docker的神秘光环底下已经能实现用最小的资源搭建本地开发环境,同时能更好地迁移到其他地方。
前置知识
- 了解docker安装及使用
- 了解docker-compose命令行的使用
- 了解laravel安装及使用
本文主要使用laradock
进行本地的docker配置。laradock
已经集成laravel需要使用的环境,只需要简单修改配置就能搭建环境提供开发,对开发及管理来说真是一味良方。
简单说明一下,在docker
环境下我们需要运行laravel
项目,实际会建立下几个容器(container):
- workspace (开发环境)
- php-fpm (php支持)
- nginx (web服务)
- mysql (数据库)
这些都是基于laradock
再处理后的生成的容器,可参考laradock
目录下相应名字的目录,里面包含Dockerfile
及相关配置,感兴趣的同学可以尽情阅读学习 :)
更加深入的内容建议移步至laradock官方文档。
准备
在window系统下先安装docker
等多次重启后运行docker
命令测试一下。
然后在你项目的平级目录使用git
拉取https://github.com/laradock/laradock.git
这个包。
1 | # 平级目录 |
这样准备就绪进入下一步。
配置
这里配置的环境按常用环境进行配置
- nginx
- php-fpm 5.6
- mysql 5.6
接着需要修改laradock/.env
文件
1 | /www/laradock |
进入laradock
目录会发现并不存在.env
文件,这里需要我们从env-example
复制一份进行修改。
1 | # /www/laradock |
修改PHP版本
进入.env
文件找到 PHP_VERSION
修改php版本为56(默认71,可选71, 70, 56)。
1 | # /www/laradock/.env |
修改Mysql版本及配置
进入.env
文件找到 MYSQL
修改mysql版本为56(默认8,可选8, 5, 5.6, 5.5)。
其他的设置根据个人需要填写,一般情况下需要修改MYSQL_USER
, MYSQL_PASSWORD
, MYSQL_ROOT_PASSWORD
来确保链接。
1 | # /www/laradock/.env |
关于Mysql版本选择
mysql使用的是官方镜像,所以我们可以使用hub.docker.com查询mysql
官方镜像包含哪些版本。具体如何选择得看各自的需求。
修改nginx配置
一般情况下并不需要修改什么,使用默认的便可。关于网站的配置需要进入laradock/nginx/sites
。
如需要修改端口可以进入
.env
文件找到NGINX
进行修改。
1 | # /www/laradock/.env |
关于Nginx的配置
nginx
的配置文件存放在laradock/nginx/sites
下,需要新建网站的可通过复制对应的.example
并重命名为.conf
进行修改。注:只用.conf
文件才会在nginx
下加载。
这里我复制laravel.conf.example
作为例子重命名为my-project.conf
:
1 | # laradock/nginx/sites/my-project.conf |
同时修改宿主机(就是window本地机子)的hosts
1 | # C:\Windows\System32\drivers\etc\hosts |
尝试运行
到这步准备工作差不多完成了。
运行以下命令进行安装及使用,因为是国外源拉取时间比较慢请耐心等待。
1 | docker-compose up -d nginx mysql |
完成后输入docker ps
参看容器运行情况。一切正常!!!
尝试访问http://my-project.com
看看效果。目前能正常访问php
文件。
运行laravel
这里就不得说workspace
这个容器,它作为工作区提供各类工具使用(包含:PHP CLI, Composer, Git, Linuxbrew, Node, V8JS, Gulp, SQLite, xDebug, Envoy, Deployer, Vim, Yarn等)。
那如何使用这些功能呢?
首先进入workspace
容器
1 | # /www/laradock |
composer换国内源
进到容器后默认就是项目目录/var/www
,由于composer用的是国外源比较慢,这里需要切换成国内源。
1 | composer config -g repo.packagist composer https://packagist.phpcomposer.com |
安装laravel
这里我们需要在my-project
目录安装laravel。
*注:需要提前把my-project里的所有内容清空
1 | composer create-project laravel/laravel my-project2 "5.2.*" && \ |
配置并重启nginx
安装完成后,把laradock/nginx/sites/my-project.conf
文件下的网站目录地址稍微改一下
1 | server { |
重启nginx
容器
1 | # /www/laradock |
关于数据库服务
1 | # .env |
一些问题:
Q:运行失败,提示ERROR: for laradock_mysql_1 Cannot create container for service mysql: Drive sharing seems blocked by a firewall
A:先暂停你本机杀毒程序的防御进程。
Q:运行失败,提示ERROR: for laradock_nginx_1 Cannot start service nginx: driver failed programming external connectivity on endpoint laradock_nginx_1 (6e4f4761d30f4cd80c44c6b0fddfbd4ef0324529099aace02bee6a6653ce453a): Error starting userland proxy: Bind for 0.0.0.0:443 failed: port is already allocated
A:建议你切换端口,我已尝试改为1443能正常运行,目前只能以这种方式处理。
1 | # .env |
Q:为何网站目录必须以/var/www
开头?
A:网站访问进入的是nginx
容器,/var/www
目录就是容器内网站目录存放的位置。由于配置在创建容器时,会将本地目录挂载至/var/www
目录,所以就能访问到本地的代码。这块设置在laradock/.env
中找到APPLICATION
可自行设置。