IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> Docker 官方镜像构建 LNMP 测试环境 -> 正文阅读

[PHP知识库]Docker 官方镜像构建 LNMP 测试环境

概述

因为需要测试一些环境,在虚拟机里跑或者单个镜像又不方便,在宿主机又不安全,所以搭建一个通用的lnmp环境,把www目录与数据库需要导入的目录通过数据卷映射出来,方便源码导入修改。

环境:

  • mysql@v5.7
  • php@v7.4
  • nginx@v1.21

在这里插入图片描述

一. Network and Volumes

创建自定义网络,将lnmp的网络都放在一个自定义网络中,利于管理与容器组件之间的通信。

docker network create lnmp

创建数据卷,用于存储源码与数据库数据,数据卷不会受容器的影响,容器删除数据卷依然存在。 后面踩坑了,mac下的数据卷不好用,windows平台可以尝试使用,或者用后面的 -v 参数进行映射
https://docs.docker.com/storage/volumes/
根据官方文档, -v 不能带上服务配置文件,如果使用-v 会把宿主机的配置文件应用到容器,所以,带出一个问题,如果我没有默认的配置文件,就需要手动去download一份放本地,如果是项目迁移,使用-v就很合适。
在这里插入图片描述

docker volume create www
docker volume create sqldata

在这里插入图片描述

二. image

pull 官方镜像

docker pull mysql:5.7.37
docker pull nginx:1.21.6
docker pull php:7.4.29-fpm

在这里插入图片描述

三. LNMP

创建LNMP容器,把它们放在我们之前创建的网络中,把数据库目录跟www目录放在指定的宿主机目录下。

docker container run -itd -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --network lnmp --name mysql_lnmp --mount src=sqldata,dst=/var/lib/mysql 82d2d47667cf

想法是好的,但是现实是残酷的,mac下的volumes 数据卷一点也不好用,不知道是bug还是什么,mac下的docker使用 volumes没有这个目录,网上有可以访问的方法,但是不好用。最后我选择使用-v 直接映射目录不使用数据卷。

在这里插入图片描述
我没有docker目录,但是我的docker desktop 有且能看到文件,这很难受。

在这里插入图片描述

3.1 重新跑容器

mysql

https://hub.docker.com/_/mysql

在这里插入图片描述
mysql 不知道什么原因,可以将数据库文件通过 -v 映射到宿主机,且宿主机不需要原数据文件,可能是在mysql跑到时候会生成数据库文件

docker container run -itd -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --network lnmp --name mysql_lnmp -v /Users/wp_mac/home/docker/lnmp/sqldata:/var/lib/mysql/ 82d2d47667cf

在这里插入图片描述

php

https://hub.docker.com/layers/php/library/php/7.4.29-fpm/images/sha256-26ec7f68fdbd644692cd99b22f566b39ec7026f2bb0feec8d442dfc273af9114?context=explore
在这里插入图片描述
php.ini 默认配置文件
https://download.csdn.net/download/qq_38626043/85197220

带入原始配置文件至容器

docker container run -itd -p 9000:9000 --network lnmp -v /Users/wp_mac/home/docker/lnmp/php/php.ini:/usr/local/etc/php/php.ini -v /Users/wp_mac/home/docker/lnmp/www:/var/www/html --name php_lnmp eb029ced96bd

nginx

https://hub.docker.com/_/nginx

在这里插入图片描述
default.conf 默认配置文件

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #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;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

带入原始配置文件进入容器,官方镜像的默认路径是/usr/share/nginx/html,但是php的www路径又是/var/www/html,所以在跑的时候,需要统一路径,不然nginx不能自动路由index.php文件。每次都需要手动输入index.php才能正常。这也算是个坑

docker container run -itd -p 80:80 --network lnmp --name nginx_lnmp -v /Users/wp_mac/home/docker/lnmp/www:/var/www/html -v /Users/wp_mac/home/docker/lnmp/nginx/default.conf:/etc/nginx/conf.d/default.conf fa5269854a5e

我们现在有三个容器,切它们在一个网络中

在这里插入图片描述

修改nginx配置文件,解析php

修改所有块 运行 目录 /var/www/html
修改fastcgi_pass 为 php容器名:9000
修改fastcgi_param 解析路径 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

重启nginx

在这里插入图片描述

在这里插入图片描述

3.2 php 扩展问题

php可能需要安装一些三方扩展,这需要用到一些docker为php封装的命令

docker-php-source

初始化,并生成 /usr/src/php目录,用于存放php扩展的目录。

docker-php-source extract | delete

docker-php-ext-enable

启用 php 扩展,使用此命令可以不用到php.ini中去开启。

docker-php-ext-enable mysqli

docker-php-ext-install

安装并启用扩展

docker-php-ext-install 源码包目录名
  • 源码包需要放在 /usr/src/php/ext 下
  • 默认情况下,PHP容器没有 /usr/src/php这个目录,需要使用 docker-- php-source extract来生成。
  • docker-php-ext-install 安装的扩展在安装完成后,会自动调用docker-php-ext-enable来启动安装的扩展。
  • 卸载扩展,直接删除/usr/local/etc/php/conf.d 对应的配置文件即可。
  • 如果是github或者内部的扩展包需要下载或者挂载到ext目录下才能安装

docker-php-ext-configure

docker-php-ext-configure 一般都是需要跟 docker-php-ext-install搭配使用的,有一些扩展可能需要自定义配置,就需要docker-php-ext-configure命令来实现。

可以先配置在install

docker-php-ext-configure 库名 配置

四. 打包docker-compose

我将此基于官方镜像构建的lnmp环境打包至github,欢迎各位师傅star

https://github.com/wpsec/docker_lnmp

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章           查看所有文章
加:2022-04-27 11:08:36  更:2022-04-27 11:09:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 18:16:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码