新手也能用docker搭建PHP环境

虽然这篇叫Docker环境搭建,但是是用了一个别人写好的配置文件,为什么要用别人写好的呢?因为第一节省了我们学习的成本,类似一键安装环境的东西。二节省了我们的构造docker和测试docker的时间。三也省略了我们在去写额外的服务器配置。
这里我选用LaraDock,因为它的容器多,不仅仅用来作web服务器。LaraDock官网
以下,所说的文件夹和目录是同一个意思,只不过不同的操作系统叫法不一样而已。

1. 安装前的准备工作

  • GIT
  • Docker

这两个各自的官网上都有,这就不多介绍了。安装也比较方便,没什么难点

2. Docker镜像源更改

这里我们要更改下Docker源,不然会一直提示连接不了服务器,即便连接上也会下载巨慢。
这里我选择DaoCloud

  1. 首先注册DaoCloud号,只有注册以后,才能用它的加速服务,免费的。所以我们要感谢DaoCloud的免费。
  2. 访问网址http://www.daocloud.io/mirror#accelerator-doc,上面有根据系统如何更改镜像源,不复杂,很简单就完成了(PS:这个网址必须在登录的情况下才能访问到,免费的服务,为了以后大家都用着舒心就支持下,注册下)

(PS:如果你碰到提示
ERROR: Service 'mysql' failed to build: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on 192.168.65.1:53: too many redirects
这个错误提示就是没有连接上镜像的服务器,多试几次就好了)

3. 安装LaraDock

这里以新项目为例,如果是在已有的项目的情况下,请参考LaraDock官方文档

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

这里会下载一些docker配置文件,git下来后有个laradock目录,里面有很多容器,到时候需要什么容器就加载什么容器就可以了,非常方便。

4. 修改docker镜像配置文件

  1. 进入刚刚git下来的laradock目录
  2. 拷贝配置文件,并命名为.env
cp env-example .env

5. 修改配置文件

修改刚刚复制的配置文件,最上面有行Application的配置,是指你项目的位置所在,这里指的是你的项目要放在哪个文件夹下,把APPLICATION=../改为APPLICATION=../project-z/,当然这个后期也是可以更改的

虽然我把项目放在了project-z目录下,其实nginx真正访问到的位置为 project-z/public/

### Application Path
# Point to your application code, will be available at `/var/www`.

APPLICATION=../project-z/

这个目录的意思是project-z文件夹的父目录,是和project-z文件夹在同一级的project-z目录
如果目录不存在的话一般生成容器的时候会自动创建,如果生成的时候没创建或者生成容器的时候提示找不到目录的话,就新建好这个文件夹,因为linxu里会有权限的问题。

6. 生成容器并启动服务器

以后如果启动服务器的话,就执行这条命令就行了。注意,第一次执行这个命令会先从网上服务器里下载docker镜像,然后在用镜像生成容器,有了容器以后,下次启动就直接启动容器了。
第一次执行因为要下载镜像,随便一个镜像都很大,所以,如果不更改Docker源的话,基本上就无望了。好多人也都是在这步放弃的,即便你更改了Docker源有时候也会下载失败,多执行几次这条命令就,直到执行成功。

docker-compose up -d nginx mysql

(-d,表示后台启动。workspace 和 php-fpm 将运行在大部分实例中, 所以不需要在 up 命令中加上它们。)
安装完成,并且启动以后的效果,应该类似这样的

Starting laradock_mysql_1 ... 
Starting laradock_mysql_1
Recreating laradock_applications_1 ... 
Recreating laradock_applications_1 ... done
Recreating laradock_workspace_1 ... 
Recreating laradock_workspace_1 ... done
Recreating laradock_php-fpm_1 ... 
Recreating laradock_php-fpm_1 ... done
Recreating laradock_nginx_1 ... 
Recreating laradock_nginx_1 ... done

会发现启动的时候有些显示的是done的,这些不用管,我琢磨着应该是重复启动相同的容器,然后端口被占用所造成的失败。

7. 查看启动效果

在本地的浏览器上输入http://localhost/,会发现提示404,这是因为我们虽然创建了project-z,但是并没有在里面新建文件,在里面放入一个新建的index.php文件。
放入index.php文件后重新访问,发现还是提示404,其实,这是因为ngixn默认配置是在public目录下的。在project-z文件夹里面新建一个public目录,然后再在里面放入index.php发现就能访问到了。

8. 完成

到这里其实已经完成了,因为已经能访问到项目了,以后再次启动服务器的时候只需要运行docker-compose up -d nginx mysql就能直接启动服务了

9. 安装laravel项目

  1. 首先进入到项目容器里面
docker-compose exec --user=laradock workspace bash

执行完这条命令后,会发现你的用户已经变更了,说明你已经进入到容器里面了

  1. 安装laravel项目
composer create-project laravel/laravel coolapp

(PS:为什么要在容器里安装,而不直接在本地直接安装呢?这个我琢磨着应该是权限的问题,因为linxu和mac会有用户权限和文件夹权限这一说法)

  1. 按照安装laravel的要求,给一些目录设置写权限

8. 更改项目为laravel目录

  1. 输入exit,退出容器
  2. 输入docker-compose stop关闭所有容器。
  3. 然后更改.env文件。由原来的../project-z/目录改为../project-z/coolapp/。(PS:注意,这里默认就是进入的publi目录,所以不需要额外的在指定public目录了)
  4. 启动服务docker-compose up -d nginx mysql
  5. 在浏览器地址栏上输入http://localhost/,查看效果

9. 更改laravel的数据库连接

进入laravel项目目录下,更改coolapp目录里的.env的laravel配置文件为DB_HOST=mysql

那么问题来了,mysql的用户名密码以及数据库的名字是什么?这个可以查看laradock目录下的.env配置文件,然后在文件里搜索mysql关键字,你就会看到mysql的一些配置,数据库,密码,用户名等等。

其它问题

  1. 下载镜像的时候有的提示需要key之类的,意思是你需要登录你的docker,去到Docker官网上注册个号,然后在你本机的Docker服务上登录上你的号就可以了。
  2. 以上步骤是单项目下的服务器配置。即,只针对一个域名下的配置,多域名的请参考Laradock官方文档的多项目配置。
  3. 启动服务正常,访问一直是'404 Not Found',进入nginx容器里,查看nginx配置,发现里面多了一个public目录,所以需要在指定的项目目录下在新建一个public目录。
  4. 执行docker-compose up -d nginx mysql,会提示经常提示服务器错误,因为即便更换了Docker源,但是因为不稳定,所以还是经常下载失败。多执行几次这条命令
  5. 生成镜像的时候,有可能生成镜像的时候失败过,然后再次执行docker-compose up -d nginx mysql无法构建当前镜像。查看镜像发现有生成为none的镜像,删除掉即可
  6. 镜像有时候删除不掉,是因为还有依赖它生成的容器没有关闭,所以先停止所有容器,然后在删除镜像。

注意事项

  1. 各个端口一定不能被占用,不然服务会启动失败
  2. 切换Docker源,不然下载镜像的时候会非常慢
  3. 项目默认位置是在你设置目录的public目录下面的
  4. 服务器的配置都能在.env里找到,如果找不到,进入你的服务器容器里,然后直接查看配置
  5. 其它容器组合直接可以看laradock目录下有啥文件夹,就有啥服务。
  6. docker默认是挂载的方式(即类似于共享目录的方式),把你本地的目录挂载到容器里的,所以docker里有配置挂载目录的选项,如果找不到目录,可以到docker服务器里查看有没有把项目的目录挂载上去。

基本docker命令

  1. 关闭所有容器(停止所有服务)
docker-compose stop
  1. 删除所有容器
docker-compose down
  1. 删除所有镜像
docker rmi $(docker images -q)
  1. 后台启动容器(以后台的方式启动服务)
docker-compose up -d {容器名称}
  1. 查看所有容器
docker ps
  1. 查看所有镜像
docer images

原文链接:Dennis`s blog
参考链接:
基于 LaraDock 在 Docker 中快速构建 Laravel 应用系列教程 —— 搭建开发环境
laradock文档
开始使用Docker for Mac

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 230,563评论 6 544
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,694评论 3 429
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 178,672评论 0 383
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,965评论 1 318
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,690评论 6 413
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 56,019评论 1 329
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 44,013评论 3 449
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 43,188评论 0 290
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,718评论 1 336
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,438评论 3 360
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,667评论 1 374
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 39,149评论 5 365
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,845评论 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 35,252评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,590评论 1 295
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,384评论 3 400
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,635评论 2 380

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,830评论 18 139
  • Docker — 云时代的程序分发方式 要说最近一年云计算业界有什么大事件?Google Compute Engi...
    ahohoho阅读 15,591评论 15 147
  • 0. 前言 docker是什么?docker是用GO语言开发的应用容器引擎,基于容器化,沙箱机制的应用部署技术。可...
    sessionboy阅读 3,874评论 2 49
  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 10,524评论 0 120
  • 概念 HTML 表单用于搜集不同类型的用户输入。 HTML 表单元素 ** 元素**最重要的表单元素是 元...
    Chy18阅读 203评论 0 0