• 技术文章 >后端开发 >php教程

    Docker下部署LNMP工作环境的教程(详细步骤)

    不言不言2019-01-28 09:44:40转载2816
    本篇文章给大家带来的内容是关于Docker下部署LNMP工作环境的教程(详细步骤),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

    普通PC环境也可以用以下配置,只是MYSQL那里换回mysql官方版本就可以。

    Docker 安装

    $ curl -sSL get.docker.com | sudo sh

    工作目录

    /lnmp/conf 存放虚拟主机配置
    /lnmp/data/mysql 存放mysql数据库数据
    /lnmp/log 存放nginx、mysql日志
    /lnmp/workspace 存放各种项目文件

    /lnmp/.env 启动docker时的环境变量配置
    /lnmp/docker-compose.yml 构建时的配置文件
    /lnmp/php/Dockerfile 编译PHP配置文件

    构建Nginx

    创建项目

    先创建一个静态文件index.html
    /lnmp/workspace/default/index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>
    <body>
        Hello, Docker!
    </body>
    </html>

    添加构建时的环境变量

    编辑.env文件

    SOURCE_DIR=./workspace
    HTTP_HOST=80
    
    NGINX_VERSION=alpine
    NGINX_CONFD_DIR=./conf/conf.d
    NGINX_CONF_FILE=./conf/nginx.conf
    NGINX_LOG_DIR=./log
    
    SOURCE_DIR=./workspace workspace文件夹挂载到nginx下的 /var/www/html
    HTTP_HOST=80           宿主机的80端口映射到nginx下的80端口
    NGINX_VERSION=alpine   nginx镜像使用alpine版本
    NGINX_CONFD_DIR=./conf/conf.d   conf.d文件夹挂载到nginx下的/etc/nginx/conf.d
    NGINX_CONF_FILE=./conf/nginx.conf   nginx.conf挂载nginx的 /etc/nginx/nginx.conf
    NGINX_LOG_DIR=./log


    Nginx.conf

    创建/lnmp/conf/nginx.conf文件

    user  nginx;
    worker_processes  1;
    
    pid        /var/run/nginx.pid;
    error_log  /var/log/nginx/nginx.error.log warn;
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
    
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /var/log/nginx/nginx.access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        keepalive_timeout  65;
    
        #gzip  on;
    
        include /etc/nginx/conf.d/*.conf;
    }

    配置虚拟主机

    创建/lnmp/conf/conf.d/default.conf文件
    注意: root下的路径必须是以/var/www/html开头,default是我们本地workspace下的一个文件夹

    server {
        listen       80;
        server_name  localhost default-server;
        root   /var/www/html/default;
        index  index.php index.html index.htm;
    
        access_log  /var/log/nginx/nginx.localhost.access.log  main;
        error_log  /var/log/nginx/nginx.localhost.error.log  warn;
    
        #error_page  404              /404.html;
    
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }

    构建Nginx配置

    编辑 docker-composer.yml
    以下的${}都是上面.env文件里配置的变量

    version: "3"
    services:
      nginx:
        image: nginx:${NGINX_VERSION}
        ports:
          - ${HTTP_HOST}:80
        volumes:
          - ${SOURCE_DIR}:/var/www/html/:rw
          - ${NGINX_CONFD_DIR}:/etc/nginx/conf.d/:rw
          - ${NGINX_CONF_FILE}:/etc/nginx/nginx.conf:ro
          - ${NGINX_LOG_DIR}:/var/log/nginx/:rw
        restart: always

    启动Nginx

    运行命令之后,访问树莓派的IP,正常的话会显示 Hello, Docker!

    $ docker-compose up

    构建PHP

    编辑/lnmp/.env添加PHP构建变量

    PHP_CONFIG_FILE=./conf/php.ini
    PHP_FPM_CONFIG_FILE=./conf/php-fpm.conf

    因php.ini配置有点长,可以在下面地址复制
    php.ini
    php-fpm.conf

    添加Dockerfile

    /lnmp/php/Dockerfile

    ARG PHP_VERSION
    FROM php:${PHP_VERSION}-fpm
    RUN apt update
    RUN apt-get install -y \
            libfreetype6-dev \
            libjpeg62-turbo-dev \
            libmcrypt-dev \
            libpng-dev \
            unixodbc-dev \
            gcc g++ make autoconf libc-dev pkg-config

    添加构建PHP

    编辑 /lnmp/docker-compose.yml文件

    version: "3"
    services:
      nginx:
        image: nginx:${NGINX_VERSION}
        ports:
          - ${HTTP_HOST}:80
        volumes:
          - ${SOURCE_DIR}:/var/www/html/:rw
          - ${NGINX_CONFD_DIR}:/etc/nginx/conf.d/:rw
          - ${NGINX_CONF_FILE}:/etc/nginx/nginx.conf:ro
          - ${NGINX_LOG_DIR}:/var/log/nginx/:rw
        restart: always
      php:
        build: 
          context: ./php
          args:
            PHP_VERSION: 7.2
        volumes:
          - ${SOURCE_DIR}:/var/www/html/:rw
          - ${PHP_PHP_CONFIG_FILE}:/usr/local/etc/php/php.ini:ro
          - ${PHP_FPM_CONFIG_FILE}:/usr/local/etc/php-fpm.d/www.conf:rw
        cap_add:
          - SYS_PTRACE
        restart: always
        networks:
          - default

    虚拟主机支持PHP解析

    /lnmp/conf/conf.d/default.conf
    下面fastcgi_pass php:9000的php,是指上面docker-compose.yml的一个service名称,可以用来针对某个项目指定PHP版本

    #...其它代码
    
    location ~ \.php$ {
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }

    添加文件

    /lnmp/workspace/default/index.php

    <?php
    
    echo ‘Hello, PHP!’;

    启动预览

    如果之前没有终止进程的, 可以ctrl + c终止之后再运行下面的命令。
    如无意外,访问树莓派的IP会显示 Hello, PHP!.

    $ docker-compose up

    添加PHP扩展

    /lnmp/.env 添加变量,下面以swoole扩展演示,其它的扩展参考下面的操作就可以

    PHP_SWOOLE_VERSION=4.2.10

    /lnmp/docker-compose.yml 添加变量

    php:
        build: 
          context: ./php
          args:
            PHP_VERSION: 7.2
            PHP_SWOOLE: ${PHP_SWOOLE_VERSION}

    /lnmp/php/Dockerfile 下载并编译swoole

    # ...其它代码
    ARG PHP_SWOOLE=false
    RUN if [ ${PHP_SWOOLE} != false ]; then \
        curl -O http://pecl.php.net/get/swoole-${PHP_SWOOLE}.tgz -L \
        && pecl install swoole-${PHP_SWOOLE}.tgz \
        && docker-php-ext-enable swoole \
    ;fi

    重新编译

    注意:Dockerfile有改动的话,必须加--build重新编译一次, 不然docker-compose up的时候不会生效

    $ docker-compose up --build

    预览

    编辑/lnmp/workspace/default/index.php保存,访问树莓派的IP,不出意外你可以找到swoole的扩展

    <?php
    
    phpinfo();

    构建MYSQL

    MYSQL持久化

    Docker容器服务删除了,保证数据不会丢失
    创建/lnmp/data/mysql文件夹

    构建时变量

    编辑/lnmp/.env文件,添加mysql服务端口、登录密码与数据持久化文件夹。

    MYSQL_HOST_PORT=3306
    MYSQL_PASSWORD=1234
    MYSQL_DATA_DIR=./data/mysql

    构建配置

    version: "3"
    services:
        #... 其它代码
        mysql:
          image: tobi312/rpi-mysql
          ports:
            - ${MYSQL_HOST_PORT}:3306
          volumes:
            - ${MYSQL_DATA_DIR}:/var/lib/mysql:rw
          environment:
            MYSQL_ROOT_PASSWORD: "${MYSQL_PASSWORD}"

    启动

    启动后,用数据连接工具测试,链接地址:树莓派IP 端口:3306 用户名:root 密码:1234

    $ docker-compose up

    到此为止,属于你自己的LNMP工作环境已经做好了。

    以上就是Docker下部署LNMP工作环境的教程(详细步骤)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:segmentfault,如有侵犯,请联系admin@php.cn删除
    专题推荐:php docker raspberry-pi
    上一篇:php如何实现一个轻量级容器(代码示例) 下一篇:php爬取图片并保存到本地的代码示例
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• 再Docker中架设完整的WordPress站点全攻略_php技巧• 搭建基于Docker的PHP开发环境的详细教程_php技巧• 搭建基于Docker的PHP开发环境的详细教程_PHP• 什么是Docker?_MySQL• Installing Percona XtraDB Cluster 5.6 with the Docker open-s_MySQL
    1/1

    PHP中文网