0

0

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

不言

不言

发布时间:2019-01-28 09:44:40

|

4914人浏览过

|

来源于segmentfault

转载

本篇文章给大家带来的内容是关于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




    
    
    
    Document


    Hello, Docker!

添加构建时的环境变量

编辑.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版本

DeepL
DeepL

DeepL是一款强大的在线AI翻译工具,可以翻译31种不同语言的文本,并可以处理PDF、Word、PowerPoint等文档文件

下载
#...其它代码

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

启动预览

如果之前没有终止进程的, 可以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的扩展

构建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工作环境已经做好了。

相关专题

更多
Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

37

2026.01.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

37

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 文件上传
PHP 文件上传

本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

16

2026.01.13

PHP缓存策略教程大全
PHP缓存策略教程大全

本专题整合了PHP缓存相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.13

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

交互式图表和动态图表教程汇总
交互式图表和动态图表教程汇总

本专题整合了交互式图表和动态图表的相关内容,阅读专题下面的文章了解更多详细内容。

45

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

9

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8.7万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 7万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号