美文网首页Docker容器php
Ubuntu18.10中使用Docker搭建LNMP环境-doc

Ubuntu18.10中使用Docker搭建LNMP环境-doc

作者: 南瓜方糖 | 来源:发表于2018-12-18 17:41 被阅读6次
    docker

    在上一篇在中,已经完成了手工搭建的多容器 LNMP 开发环境,但是在实际使用起来还是存在一些问题。例如:composer 命令太长;无法使用 laravel 框架的 artisan 功能以及环境迁移非常不便等。

    为了解决这些麻烦,这次就学习下使用 docker-compose 来定制和管理自己的环境。
    [ 点我跳转上一篇 ]


    简介

    dockerfile :

    用来构建镜像的工具,记录和包含安装运行的环境和程序代码等。docker 官方的镜像也是基于 dockerfile 文件构建的。详情可见 [ docker-library ]

    docker-compose :

    是 docker 多容器管理器,可以把已有容器编排为服务并提供更便捷的操作方式。

    有了这两个工具后,我们就可以对环境实现快速重置或迁移了。


    准备工作

    创建一下结构的文件夹,当然也可以根据自己的喜好来。
    这里把 php 换成了 7.2 版本,然后 mysql 也换成了 8.0,然后本地的配置文件修改后,需要重启服务才能生效。

    
    docker-compose-lnmp/
    ├── docker-compose.yml  #docker-compose 文件
    ├── service    #存放相关容器的配置
    │   ├── mysql
    │   │   ├── config
    │   │   │   └── mysqld.cnf
    │   │   ├── data
    │   │   └── log
    │   ├── nginx
    │   │   ├── config
    │   │   │   └── default.conf
    │   │   └── log
    │   ├── php7.2
    │   │   ├── config
    │   │   │   └── php7.2
    │   │   │       ├── php-fpm.d
    │   │   │       │   └── www.conf
    │   │   │       ├── php.ini
    │   │   └── log
    │   │   └── Dockerfile
    └── www
        └── index.php
    
    

    php 和 nginx 的配置文件可以从之前的环境中复制出来,mysql 的配置文件内容如下:

    
    [client]
    port                    = 3306
    default-character-set   = utf8mb4
    
    [mysqld]
    user                    = mysql
    port                    = 3306
    sql_mode                = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
    default-storage-engine  = InnoDB
    default-authentication-plugin   = mysql_native_password
    character-set-server    = utf8mb4
    collation-server        = utf8mb4_unicode_ci
    init_connect            = 'SET NAMES utf8mb4'
    disable-log-bin
    skip-character-set-client-handshake
    explicit_defaults_for_timestamp
    slow_query_log
    long_query_time         = 3
    slow-query-log-file     = /var/lib/mysql/mysql.slow.log
    log-error               = /var/lib/mysql/mysql.error.log
    default-time-zone       = '+8:00'
    
    [mysql]
    default-character-set   = utf8mb4
    
    

    Dockerfile 文件编写

    这里就先只有 php 用了dockerfile,而且只安装了 pdo_mysql 和 swoole,如果需要 redis 或其他扩展再加上去就可以了。

    FROM php:7.2-fpm
    
    MAINTAINER yf-wu@qq.com
    
    
    RUN apt-get update && apt-get install -y wget libfreetype6 libfreetype6-dev libmcrypt-dev libmcrypt4 libcurl3-dev \
    && apt install  -y build-essential libprotobuf-dev libboost-dev openssl protobuf-compiler \
    && docker-php-ext-install pdo pdo_mysql
    
    # 安装 swoole
    RUN wget https://github.com/swoole/swoole-src/archive/v4.2.2.tar.gz -O swoole.tar.gz \
        && mkdir -p swoole \
        && tar -xf swoole.tar.gz -C swoole --strip-components=1 \
        && rm swoole.tar.gz \
        && cd swoole \
        && phpize \
        && ./configure \
        && make -j$(nproc) \
        && make install \
        && cd ..  \
        && rm -r swoole \
        && docker-php-ext-enable swoole
    
    
    

    docker-compose 文件编写

    version说明
    这个东西其实挺容易看明白的,有哪些定义看不懂也比较容易查到资料,可以参考这里
    [ 点我 ]

    
    version: '3.7'
    services:
      mysql:
        image: mysql:8.0
        volumes:
          - ./service/mysql/config/mysqld.cnf:/etc/mysql/conf.d/mysql.cnf:ro
          - ./service/mysql/data:/var/lib/mysql/:rw
          - ./service/mysql/log/:/var/log/mysql/:rw
        ports:
          - "3306:3306"
        environment:
          MYSQL_ROOT_PASSWORD: root
      php-fpm-7-2:
        #image: php:7.2-fpm
        build: ./service/php7.2/
        volumes:
          - ./www/:/var/www/html/
          - ./service/php7.2/config/php.ini:/usr/local/etc/php/php.ini:rw
          - ./service/php7.2/php-fpm.d/www.conf:/usr/local/etc/php-fpm.d/www.conf:rw
        environment:
          - TZ=Asia/Shanghai
        depends_on:
          - mysql
        links:
          - mysql:mysql
      nginx:
        image: nginx:latest
        ports:
          - "80:80"
          - "443:443"
        volumes:
          - ./www/:/usr/share/nginx/html/:rw
          - ./service/nginx/config:/etc/nginx/conf.d/
          - ./service/nginx/log/:/var/log/nginx/:rw
        depends_on:
          - php-fpm-7-2
        links:
          - php-fpm-7-2:php-fpm-7-2
      composer:
        image: composer
        volumes:
          - ./www/:/app
        depends_on:
          - php-fpm-7-2
    
    
    

    启动服务

    文件编写完成后,在 docker-compose-lnmp 文件夹下执行 docker-compose up 即可,该命令不会在后台执行,当命令行中断或终端关闭的时候,服务也就停了,另外也可以用 docker-compose stop 来停止,docker-compose down 停止并删除。

    运行 docker-compose run --rm composer -v 查看 composer 版本,虽然命令还是有点长,但比之前简洁了很多。

    docker-compose run --rm composer create-project laravel/laravel laravel 创建一个新的 laravel 项目,然后就是和上一篇一样的流程,new db -> make:auth -> migrate -> make:seeder -> dump-autoload -> db:seed。这里就不再详细写了,有需要的可以看上一篇。
    [ 点我跳转 ]

    切到浏览器,登录下试试,可以看到已经能够登录了。

    然后 phpinfo 中也已经有了 swoole,那么,大功告成。


    logged in swoole

    结尾

    基于 docker-compose 搭建管理 lnmp 环境到此结束,接下来再用现在的环境搞点事情,好好研究下 laravel 和 swoole。

    然后有个问题,既然在这里可以单独运行一个容器来处理 artisan , 那么在上一篇手动搭建的版本中是不是也可以这样处理呢?

    源文件放在了 [ github ]

    相关文章

      网友评论

        本文标题:Ubuntu18.10中使用Docker搭建LNMP环境-doc

        本文链接:https://www.haomeiwen.com/subject/lshqkqtx.html