使用Docker Dockerfile构建php LNMP集成开发环境,并运行Thinkphp5

宿主机环境

系统:MAC、Windows10

Docker版本:Docker version 23.0.5

Docker Desktop:Dockerdesktop官方地址

前言

这篇主要介绍如何在Mac、Windows10使用docker搭建LNMP集成开发环境。下面我会写Dockerfile编译安装Nginx+php基础环境。mysql、redis基于官方Docker hub,分别构建我们自己的镜像。

目录结构

  1.  code目录存放工程代码,会映射到docker容器web目录
  2. docker-data目录存放容器数据
  3. fileinfo是php的扩展
  4. fricc2是php源码加密扩展

构建PHP+Nginx镜像

Dockerfile文件

# 从官方基础版本构建
FROM centos:7
MAINTAINER ityun

ENV TIME_ZONE Asia/Shanghai
#基础依赖
RUN yum install -y install epel-release && \
    yum -y install gcc gcc-c++  autoconf wget libxml2 libxml2-devel openssl openssl-devel curl curl-devel libjpeg-turbo libjpeg-turbo-devel libpng-devel libpng freetype-devel freetype icu libicu-devel libicu libmcrypt libmcrypt-devel libxslt libxslt-devel php-mysql oniguruma oniguruma-devel libtidy-devel openldap openldap-devel sqlite-devel zlib-static zlib-devel && \
    yum clean all && \
    groupadd www && \
    useradd -g www www  

RUN cat .pwd.txt | chpasswd

#拷贝源码包到环境中
ADD php-8.0.10.tar.gz /usr/local/src/
ADD redis-5.3.4.tgz /usr/local/src/
ADD nginx-1.21.1.tar.gz /usr/local/src/
ADD libzip-1.2.0.tar.gz /usr/local/src/
COPY fricc2 /usr/local/src/php-fricc2/
COPY nginx.conf /usr/local/src/nginx.conf
COPY cas.ityun.com_80.conf /usr/local/src/cas.ityun.com_80.conf
COPY php.ini /usr/local/src/php.ini
COPY fileinfo /usr/local/src/fileinfo/

#编译安装nginx及php
RUN cd /usr/local/src/nginx-1.21.1 && \
    ./configure --prefix=/usr/local/nginx --user=www --group=www --with-stream --with-http_ssl_module --with-http_stub_status_module && \
    make -j 4 && \
    make install && \
    mkdir -p /web && \
    cd /usr/local/nginx/conf/ && \
    mkdir vhosts && \
    cp /usr/local/src/cas.ityun.com_80.conf /usr/local/nginx/conf/vhosts/ &&\
    cp /usr/local/src/nginx.conf /usr/local/nginx/conf/ &&\
    cp -frp /usr/lib64/libldap* /usr/lib/ &&\
    #安装libzip依赖,方便gd开启
    cd /usr/local/src/libzip-1.2.0 && \
    ./configure && make && make install && \
    export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig/" &&\
    #安装php
    cd /usr/local/src/php-8.0.10 && \
    ./configure --prefix=/usr/local/php8 --with-config-file-path=/usr/local/php8/etc \
    --with-config-file-scan-dir=/usr/local/php8/conf.d \
    --enable-fpm --with-fpm-user=www \
    --with-fpm-group=www --enable-static --enable-sockets \
    --enable-mysqlnd --enable-opcache --enable-pcntl --enable-gd \
    --enable-mbstring --enable-soap  --enable-calendar \
    --enable-bcmath --enable-exif --enable-ftp --enable-intl --with-mysqli --with-pdo-mysql  --without-sqlite3 \
    --with-openssl --with-curl --with-gettext  --with-zip --with-zlib \
    --with-mhash  --with-tidy  \
    --disable-fileinfo \
    --with-freetype \
    --with-jpeg && \
    make && \
    make install && \
    ln -s /usr/local/php8/bin/php /usr/bin/php && \
    #配置相关
    cp /usr/local/php8/etc/php-fpm.d/www.conf.default /usr/local/php8/etc/php-fpm.d/www.conf && \
    cp /usr/local/php8/etc/php-fpm.conf.default /usr/local/php8/etc/php-fpm.conf && \
    sed -i "90a \daemonize = no" /usr/local/php8/etc/php-fpm.conf && \
    cp /usr/local/src/php-8.0.10/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm && \
    chmod +x /etc/init.d/php-fpm && \
    echo "${TIME_ZONE}" > /etc/timezone && \
	ln -sf /usr/share/zoneinfo/${TIME_ZONE} /etc/localtime && \
    #安装redis扩展
    cd /usr/local/src/redis-5.3.4 && \
    /usr/local/php8/bin/phpize &&\
    ./configure --with-php-config=/usr/local/php8/bin/php-config &&\
    make -j 4 && make install &&\
    #安装ldap扩展
    cd /usr/local/src/php-8.0.10/ext/ldap/ &&\
    /usr/local/php8/bin/phpize && ./configure --with-php-config=/usr/local/php8/bin/php-config  --with-ldap &&\
    make && make install &&\
    #安装fileinfo扩展#
    cd /usr/local/src/php-8.0.10/ext/fileinfo/ &&\
    /usr/local/php8/bin/phpize && ./configure --with-php-config=/usr/local/php8/bin/php-config &&\
    cp -rf /usr/local/src/fileinfo/Makefile /usr/local/src/php-8.0.10/ext/fileinfo/ &&\
    make && make install &&\
    #安装fricc2扩展
    cd /usr/local/src/php-fricc2/fricc2load/ &&\
    /usr/local/php8/bin/phpize && ./configure --with-php-config=/usr/local/php8/bin/php-config &&\
    make && make install &&\
    cd /usr/local/src/php-fricc2/fricc2/ && make &&\
    cp fricc2 /usr/bin &&\
    cp /usr/local/src/php.ini /usr/local/php8/etc/php.ini &&\
    rm -rf /usr/local/src/*


WORKDIR /usr/local/nginx
EXPOSE 9000
EXPOSE 80
EXPOSE 443

CMD /etc/init.d/php-fpm start && /usr/local/nginx/sbin/nginx -g "daemon off;"

nginx配置文件

user  www;
worker_processes  4;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    #keepalive_timeout  0;
    keepalive_timeout  200;
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;

    gzip  on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 9;
    gzip_types       text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php application/javascript application/json;
    gzip_disable "MSIE [1-6]\.";
    gzip_vary on;


    include vhosts/*.conf;

}

cas.ityun.com_80.conf配置文件

server {
    listen       80;
    server_name cas.ityun.com;

    client_max_body_size 2048M;
    root   "/web/cas.ityun.com/public/";
    location / {
        index  index.php index.html;
        #主要是这一段一定要确保存在
        if (!-e $request_filename) {
            rewrite  ^(.*)$  /index.php?s=/$1  last;
            break;
        }
    }

    location ~ \.php(.*)$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param  PATH_INFO  $fastcgi_path_info;
        fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
        include        fastcgi_params;
    }
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Frame-Options SAMEORIGIN;
    error_page 403 =404 /404.html;
}

开始构建

进入Dockefile所在目录,执行以下命令。PS:构建过程比较慢,大概需要20分钟左右。

docker build -t ityun/centos7-php8 .

拉取Mysql、Redis镜像

docker pull redis
docker pull mysql:5.7

执行完成后执行docker images命令,可以看到本地镜像列表。

 运行镜像

# 启动Docker容器
## 启动redis容器
docker run -it -d -p 8379:6379 --name redis  redis:latest
## 启动mysql容器 
docker run -it -d -p 8306:3306 -e MYSQL_ROOT_PASSWORD=root --name mysqldb  -v ~/Documents/mysql57:/var/lib/mysql mysql:5.7

## 通过上面步骤下面这个对应的link名称自己改一下
docker run -it -p 8472:80 -p 8473:443 --name ityun --link mysqldb:mysqldb --link redis:redis --link -d -v ~/Documents/code:/web ityun/centos7-php8


### ps:以下是windows系统的启动 可忽略
docker run -it -d -p 8379:6379 --name redis  redis:latest
docker run -it -d -p 8306:3306 -e MYSQL_ROOT_PASSWORD=root --name mysqldb  -v E://project/docker/docker-data/mysql57:/var/lib/mysql mysql:5.7

docker run -it -p 8472:80 -p 8473:443 --name ityun --link mysqldb:mysqldb --link redis:redis -d -v E://project/docker/code:/web ityun/centos7-php8

运行完成后 通过docker ps可以查看正在运行的docker容器。

 运行thinkphp5

在code目录创建一个文件夹cas.ityun.com,目录中放置thinkphp5框架代码

在浏览器访问一下http://cas.ityun.com:8472内容显示正常即可:

 构建时需要的源文件:PS:期待给点个星。。。lnmp: 使用Dockerfile部署LNMP集成环境。centos+php+nginx+mysql+redis.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/21492.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pynvme操作流程

如下操作pynvme运行在fedora上,在其他操作系统尚未做尝试。 步骤一:检查本地windows是否安装ssh 检查方式:windows本地打开windows powershell,输入ssh,若打印usage :ssh等一些信息,则已安装s…

8.防火墙

文章目录 防火墙iptables防火墙介绍基础操作高级操作通用匹配隐含匹配端口匹配:--sport 源端口、--dport 目的端口 TCP标志位匹配:--tcp-flags TCP标志位ICMP类型匹配:--icmp-type ICMP类型 显式匹配多端口匹配IP范围匹配:-m ipra…

基于αβ剪枝算法的五子棋

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 五子棋是世界智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏,是世界智力运动会竞技项目之一,通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上&#xf…

记录:自回归 模型在记忆 全随机序列 的潜变量 统计量爆炸现象

只是一个记录 8层12头512维度的 GPT 模型,使用它来记忆 10000 条 512长度 的无序序列,vocab_size 为100。 模型要自回归生成这些序列,不可能依赖局部推理,必须依赖全局视野,即记住前面的序列。 然后统计 最后一个no…

EasyRecovery16电脑硬盘数据恢复软件功能讲解

硬盘是很常见的存储数据的设备,硬盘中很多重要的数据一旦丢失会很麻烦,不过现在有硬盘数据恢复软件可以自行在家恢复数据。今天的文章就带大家来看看硬盘恢复数据的软件EasyRecovery。 EasyRecovery 是一款专业的数据恢复软件,支持恢复不同存…

nginx实现正向代理

1.下载nginx nginx: download 选择自己需要的版版本下载下来 2.解压文件修改ngixn.conf配置文件 events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout…

VSAN 7 安装部署指南(一)

本文使用三台服务器安装ESXI 7.0 ,并在其中一台ESXI中安装vCenter 7.0。本环境中最终在VMware Workstation虚拟机中做的嵌套虚拟化。每台虚拟机配置两块网卡,一块网卡桥接,一块NAT。三块硬盘,一块100GB作为系统盘,一块…

重新定义新增长,从百果园看ESG如何可持续

当下,企业的增长亟待重新定义。 中国已基本告别人口红利时代,不少行业和企业当前陷入增长困境。原来以规模定义的增长很难实现,一些企业在日常运营中找不到方向和方式,因此需要重新定义“增长”。 最终,在环境恶化、…

Android RecyclerView实现吸顶动态效果,附详细效果图

文章目录 一、ItemDecoration二、实现RecyclerView吸顶效果1、实现一个简单的RecyclerView2、通过ItemDecoration画分割线3、画出每个分组的组名4、实现吸顶效果 完整demo 链接:https://download.csdn.net/download/JasonXu94/87786702 一、ItemDecoration [外链图片转存失败…

猜谜游戏、彩云词典爬虫、SOCKS5代理的 Go(Golang) 小实践,附带全代码解释

猜谜游戏在编程语言实践都已经和 HelloWord 程序成为必不可少的新手实践环节,毕竟,它能够让我们基本熟悉 for 循环、变量定义、打印、if else 语句等等的使用,当我们基本熟悉该语言基础之后,就要学会其优势方面的程序实践&#xf…

软考算法-算法篇

软考算法 一:故事背景二:分治法2.1 概念2.2 题目描述2.3 代码实现2.4 总结提升 三:回溯法3.1 概念3.2 题目描述3.3 代码实现3.3.1 TreeNode 类3.3.2 将数组处理成二叉树结构并且返回根节点3.3.3 进行搜索 3.4 总结提升 四:回溯法-…

头歌计算机组成原理实验—运算器设计(7) 第7关:6位有符号补码阵列乘法器

第7关:6位有符号补码阵列乘法器 实验目的 帮助学生掌握补码阵列乘法器的实现原理。 视频讲解 实验内容 在 Logisim 中打开 alu.circ 文件,在6位补码阵列乘法器中利用5位阵列乘法器以及求补器等部件实现补码阵列乘法器,实验框架如图所示&a…

【Linux】进程信号

目录 一、信号概念 二、信号捕捉预备知识 三、产生信号 1、通过终端按键 Core Dump 概念 Core Dump 用法 2、系统调用 2.1、kill 2.2、raise 2.3、abort 3、软件条件 4、硬件异常 4.1、除0 4.2、野指针 四、保存信号 1、信号其他相关概念 2、内核中的表示 3、…

【全网首测】5G随身Wi-Fi —— 中兴U50 Pro

说到随身Wi-Fi,大家应该都不陌生。 它是一个专门将移动信号转换成Wi-Fi信号的设备,经常被用于旅行和出差场景,也被人们亲切地称为“上网宝”。 现在,我们已经全面进入了5G时代,随身Wi-Fi也升级迭代,出现了支…

一个有趣的avs编码器(注意,是avs,而不是avs2噢)

本章附件是一个清华大学写的关于avs编解码器: https://download.csdn.net/download/weixin_43360707/87793302 该编码器遵循了stuffing bit: 打开文件夹后,如下: 可以看出这个是个跨平台的工程,提供了windows vs2015的工程文件sln&#x…

【最新可用】chatGPT镜像网站国内使用,免费稳定!

新建了一个网站 https://ai.weoknow.com/ 每天给大家更新可用的国内可用chatGPT 2023.5.8新增一个 ChatGPT 国内免翻版 【网站名称】:Chat GPT Ai 【使用环境】:移动端/电脑网页端 ChatGPT是一款功能强大的免费在线聊天机器人,具有人工智能…

网络编程(TCP与UDP协议)

文章目录 1. 网络编程1.1 软件架构1.2 网络基础 2. 网络通信要素2.1 如何实现网络中的主机互相通信2.2 通信要素一:IP地址和域名2.2.1 IP地址2.2.2 域名 2.3 通信要素二:端口号2.4 通信要素三:网络通信协议 3. 传输层协议:TCP与UD…

机器人工程学习和研究的结构性失衡

结论:无解,谁是那屈指可数的幸运者/(ㄒoㄒ)/~~ 供给:培养的机器人工程专业人才 需求:市场企业主体招聘的相关人才 不匹配,错配,导致供给无效。 机器人工程学习和研究的结构性失衡可能是由多种原因导致的…

Qt6之万能数据类型QVariant详解

QVariant,被称为万能数据类型,实际上它是类似C的联合union类型。简单的说自定义性能强就像一个盒子几乎可以让你放任意的qt类型,同时可以轻松构造任意类型的任意复杂数据结构,但请注意复杂类型意味着性能和效率的让步。 qt6在文档…

自然语言处理与其Mix-up数据增强方法报告

自然语言处理与其Mix-up数据增强方法 1绪论1.课题背景与意义1.2国内外研究现状 2 自然语言经典知识简介2.1 贝叶斯算法2.2 最大熵模型2.3神经网络模型 3 Data Augmentation for Neural Machine Translation with Mix-up3.1 数据增强3.2 对于神经机器翻译的软上下文的数据增强3.…