• Docker-用LaraDock搭建PHP环境


    简介

    LaraDock 致力于简化创建开发环境过程,能够帮助我们在 Docker 上快速搭建 PHP 开发环境。 它预装了 Docker 镜像,为我们提供了一站式的开发环境,而不需要再去在本地机器安装 PHP、Nginx、MySQL 以及其他很多开发过程中需要的软件。

    特点:

    • 在 PHP 版本:7.0,5.6.5.5...之中可以简单切换。
    • 可选择你最喜欢的数据库引擎,比如:MySQL, Postgres, MariaDB...
    • 可运行自己的软件组合,比如:Memcached, HHVM, Beanstalkd...
    • 所有软件运行在不同的容器之中,比如:PHP-FPM, NGINX, PHP-CLI...
    • 通过简单的编写 Dockerfile 容易定制任何容器。
    • 所有镜像继承自一个官方基础镜像(Trusted base Images)
    • 可预配置Laravel的Nginx环境
    • 容易应用容器中的配置 配置文件(Dockerfile)
    • 最新的 Docker Compose 版本(docker-compose)
    • 所有的都是可视化和可编辑的
    • 快速的镜像构建
    • 每周都会有更新...

    相关资料:

    LaraDock 官网:http://laradock.io

    LaraDock Github:https://github.com/LaraDock/laradock 国内下载速度有些慢,可以使用Gitee:https://gitee.com/mirrors/Laradock

    Docker扫盲:

    安装

    请确保已安装Docker,LaraDock 镜像的原理先不介绍,直接进入安装步骤。

    1. 建立工作目录

    新建 webroot 目录,laradock 和项目的代码都将放在该目录下(也可以直接使用以前的 web 根目录):

    $ mkdir webroot && cd webroot
    

    2. 克隆 LaraDock 代码

    进入 webroot 目录,执行以下命令:

    $ git clone https://github.com/Laradock/laradock.git
    // 或 git clone https://gitee.com/mirrors/Laradock.git
    

    3. 生成 LaraDock 配置文件

    进入 laradock 目录,执行以下命令:

    $ cp env-example .env
    

    如需配置 Nginx 端口、Mysql 密码等,均在 .env 文件中设置即可。

    # 本机项目存放的目录,默认是和laradock同级,视个人情况修改
    APP_CODE_PATH_HOST=../
    
    # 容器中存放项目的目录,是会和本机项目的目录建立起软链接
    APP_CODE_PATH_CONTAINER=/var/www
    
    # 存放数据的目录
    DATA_PATH_HOST=~/.laradock/data
    

    4. 开启容器

    更改完自己的项目配置后,运行docker-compose构建容器。
    在 laradock 目录下执行以下命令,可以选择自己需要启动的容器:

    $ docker-compose up -d nginx mysql redis
    

    由于Laradock中的软件源并没有为国内做优化,都是默认在国外的。所以构造速度视网络情况,如果比较慢可以只构建基本的nginx和mysql,它们会自动构建php-fpm 和 workspace这两个两个容器,后续需要什么服务等要用到时候再去构建。如果特别的慢可以去找下Laradock国内修改版的。

    默认情况下,创建的容器具有当前目录名称作为后缀(例如laradock_workspace_1

    注:所有Web服务器容器nginxapache..依赖于php-fpm,这意味着如果您运行其中任何一个,它们将自动php-fpm为您启动容器,因此无需在 up 命令中明确指定它。

    创建项目(这里我们用Laravel为例)

    构建完成后,在laradock同级目录下创建一个laravel的项目叫myproject

    $ composer create-project --prefer-dist laravel/laravel myproject
    

    如果composer安装速度太慢请更换composer源为国内镜像。

    laravel install :

    composer install
    cp .env.example .env
    php artisan key:generate
    chmod -R 777 storage
    chmod -R 777 bootstrap/cache
    // DB的配置根据之前的配置修改,多个 Docker 容器间的关系类似于依赖网络进行连接的主机
    

    现在打开http://localhost 项目返回404,需要配置nginx。

    进去laradock下的nginx/sites下复制出laravel.conf来更改配置:

    $ cd laradock/nginx/sites
    $ cp laravel.conf.example laravel.conf
    $ vim laravel.conf
    

    将域名和路径改下:

    .
    .
    server_name myproject.test;
    root /var/www/myproject/public;
    .
    .
    

    修改完后重启laradock_nginx,也就是重启nginx

    $ docker restart laradock_nginx_1
    

    重启成功后,编辑hosts

    $ sudo vim /etc/hosts
    

    新增需要解析的网站,将0.0.0.0和之前设定的域名关联

    .
    .
    0.0.0.0 myproject.test
    .
    .
    

    修改完后浏览器打开http://myproject.test就可以访问了

    补充

    数据库配置

    基本配置

    然后进入数据库容器:

    docker exec -it $database_container_name bash
    

    根据 docker-compose.yml 中的设置,通过 root 进入数据库服务:

    mysql -udefault -psecret
    

    由于多个 Docker 容器间的关系类似于依赖网络进行连接的主机,要想通过 PHP 容器中的脚本访问 MySQL 容器的数据库服务,需要具有远程连接的数据库用户,执行以下命令进行创建:

    GRANT ALL PRIVILEGES ON *.* TO username@'%' IDENTIFIED BY 'password';
    

    注意以下几点:

    1. . 表示对所有数据库的所有表都具有权限;

    2. % 表示不限制连接的主机 IP,为了安全起见,这里可以把 % 改为 php。注意,这里的 php 其实相当于一个域名,Docker 的内置 DNS 会将其解析为 PHP 容器的地址;

    3. 修改 username 和 password 为自定义的用户名和密码。

    远程连接

    若想要在本地(非 Docker 宿主机)连接到数据库容器,需要利用端口映射,将数据库 Docker 的 3306 端口映射到主机的某个端口(如:12345),然后在本地通过访问服务器的 $server_ip:12345 并附带具有远程访问权限的用户名和密码进行远程连接(注意 % 的问题)。

    在本文所用的 docker-compose.yml 中已经默认打开了 3306:3306 的端口映射,大家可以根据需要进行设置。

    创建数据库

    通过以下方式创建一个数据库并设置字符集:

    CREATE DATABASE `database_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
    

    执行 SQL 文件

    我们可以把本地的数据库导出为 .sql 文件,然后在上传到数据库容器中并执行,首先在本地将 SQL 文件上传到宿主服务器:

    scp xxx.sql root@your_server_ip:/
    

    然后在宿主服务器中将该文件转移到数据库容器中的共享数据卷中,执行:

    mv /xxx.sql path/to/docker-compose.yml/database
    

    最后进入数据库容器并进入 MySQL 数据库服务,执行:

    source /path/to/xxx.sql
    

    参考资料:

  • 相关阅读:
    ubuntu18.04LTS服务器用vituralenv安装和配置pytorch和tensorflow
    ubuntu18.04安装Anaconda
    XeLaTeX下如何以原大小显示PNG
    JS黑魔法之this, setTimeout/setInterval, arguments
    sicily 1198. Substring (递归全排列+排序)
    sicily 1046. Plane Spotting(排序求topN)
    sicily 1051. Biker's Trip Odomete
    sicily 1176. Two Ends (Top-down 动态规划+记忆化搜索 v.s. Bottom-up 动态规划)
    sicily 1035. DNA matching
    关于组织自定义皮肤/主题的一点思考
  • 原文地址:https://www.cnblogs.com/stringarray/p/12900430.html
Copyright © 2020-2023  润新知