使用docker安装laravel运行环境

2017-09-13 14:54:29

    当然把docker安装完成还是远远不够的,我们需要使用docker创建一个lnmp的环境出来,以供laravel使用。

    在安装环境之前,我们需要安装一个docker利器,Docker Compose。

    Docker Composer是什么?

    Docker Composer允许用户通过一个单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project)。
    Compose中有两个重要的概念:
    1.服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
    2.项目(project):由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义。

    Compose的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。
    Compose项目由Python编写,实现上调用了Docker服务提供的API来对容器进行管理。因此,只要所操作的平台支持DockerAPI,就可以在其上利用Compose来进行编排管理。


    安装:

    sudo pip install -U docker-compose

    安装Laradock,什么时Laradock:

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

    

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

    进入laradock目录,将env-example重命名为 .env:

    cp env-example .env

    运行容器

    docker-compose up -d nginx mysql redis beanstalkd

    这一步希望你已经装了加速器...

    安装完以后,执行命令登陆终端

    docker-compose exec --user=laradock workspace bash

    看到熟悉的命令行,是否很是happy呢

    我们在/var/www目录下安装一个laravel

    composer create-project laravel/laravel blog

    

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

    APPLICATION=../wwwroot/

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

docker-compose up -d nginx

    

    我注意到使用此命令

docker-compose up -d nginx mysql redis beanstalkd

   然后执行

docker-compose ps

    发现mysql是没有启动起来的,查询日志发现报错信息:

    mysqld: Can't create/write to file '/var/lib/mysql/is_writable' (Errcode: 13 - Permission denied)

    去github反馈区发现,很多人都遇到过此问题,应该属于一个bug,临时解决:

    1.打开docker-compose.yml文件 

    2.在219行注释掉 user: "1000:50"

    3.重启

    

    然后我们需要登陆mysql建立相关数据库以及授权用户。默认的用户为root,密码也为root.

    docker-compose exec mysql bash

    创建laravel默认用户以及数据库,并授权

    mysql -uroot -proot
    create database homestead character set utf8;
    GRANT ALL ON *.* TO homestead@'localhost' IDENTIFIED BY 'secret';