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

news2024/11/15 10:52:25

宿主机环境

系统: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.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多维时序 | MATLAB实现基于贝叶斯线性回归(Bayesian Regression)的多变量时间序列预测

多维时序 | MATLAB实现基于贝叶斯线性回归(Bayesian Regression)的多变量输入回归预测 目录 多维时序 | MATLAB实现基于贝叶斯线性回归(Bayesian Regression)的多变量输入回归预测预测效果基本介绍模型描述程序设计参考资料预测效果 基本介绍 多维时序 | MATLAB实现基于贝叶斯线…

Rocky Linux 8.8 发布 - CentOS 的权威替代

Rocky Linux 8.8 发布 - CentOS 的权威替代 Rocky Linux 由 CentOS 项目的创始人 Gregory Kurtzer 领导 请访问原文链接:https://sysin.org/blog/rocky-linux-8/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 以…

Linux-Shell编程

一,shell编程的概念 1.0Shell与内核的关系 内核是Linux系统的核心,它是操作系统的最底层部分,负责管理计算机的硬件资源,例如CPU、内存、磁盘等。内核还提供了许多系统调用,供应用程序使用,例如打开文件、…

数字员工IN淄博:淄博烧烤火出圈,政务服务很圈粉!

“小饼烤炉加蘸料,灵魂烧烤三件套”,淄博烧烤近期在各大社交媒体平台火爆出圈,不少人慕名前往亲身体验人间烟火气,让这座传统工业城市再度名声鹊起,焕活了淄博文旅市场的发展潜能。淄博人民的淳朴热情造就了这一次淄博…

STM32F401RET6 LQFP64 (Nucleo-F401RE) SPI通信(主从双机SPI通信)

STM32F401RET6 LQFP64 (Nucleo-F401RE) SPI通信(主从双机SPI通信) 1.1 SPI总线介绍 SPI 通讯使用 3 条总线及片选线,3 条总线分别为 SCK、MOSI、MISO,片选线为NSS(CS) NSS 信号线由高变低 ,是 SPI 通讯的起始信号 。…

Redis系列--redis集群

一、redis集群介绍 一、简介与注意事项 由于数据量过大,当单个master挂了再slave进行选举时,会有一定时间内无法进行写操作,会出现数据的丢失。也就数说单个master复制集难以承担,因此需要对多个复制集进行集群,形成水…

AcWing 243. 一个简单的整数问题2

题目描述 题目链接:AcWing 243. 一个简单的整数问题2 给定一个长度为 N 的数列 A,以及 M 条指令,每条指令可能是以下两种之一: C l r d,表示把 A[l],A[l1],…,A[r] 都加上 d。 Q l r,表示询问数列中第 l∼…

【5.20】五、安全测试——安全测试工具

目录 5.4 常见的安全测试工具 1. Web漏洞扫描工具——AppScan 2. 端口扫描工具——Nmap 3. 抓包工具——Fiddler 4. Web渗透测试工具——Metasploit 小提示:Kali Linux 5.4 常见的安全测试工具 安全测试是一个非常复杂的过程,测试所使用到的工具也…

自学网络安全/Web安全,一般人我还是劝你算了吧

由于我之前写了不少网络安全技术相关的文章,不少读者朋友知道我是从事网络安全相关的工作,于是经常有人私信问我: 我刚入门网络安全,该怎么学? 要学哪些东西? 有哪些方向? 怎么选&a…

【leetcode】1373. 二叉搜索子树的最大键值和

二叉搜索子树的最大键值和 问题描述问题简单分析提交之旅第一次提交-失败第二次提交-失败第三次提交-成功 问题描述 二叉搜索子树的最大键值和 给你一棵以 root 为根的 二叉树 ,请你返回 任意 二叉搜索子树的最大键值和。 二叉搜索树的定义如下: 任意节…

JVM学习(六)

1. JAVA 集合 1.1. 接口继承关系和实现 集合类存放于 Java.util 包中,主要有 3 种:set(集)、list(列表包含 Queue)和 map(映射)。 1. Collection:Collection 是集合 List、Set、Queue 的最基本的接口。 2. Iterato…

Apple Safari 16.5 发布- macOS 专属浏览器 (独立安装包下载)

Apple Safari 16.5 - macOS 专属浏览器 (独立安装包下载) Safari 浏览器 16 for macOS Montery, Big Sur 请访问原文链接:https://sysin.org/blog/apple-safari-16/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org…

DevOps系列文章-Kubernetes实现CI与CD配置

Kubernetes实现CI与CD配置 一、基本介绍 基于 Kubernetes 实现 CI/CD 配置,其实和往常那些 CI/CD 配置并没有太大区别。都是通过 提交代码,拉取代码,构建代码,发布代码来实现的。 只不过要是通过 K8s 来实现的话,则是…

HNU-计算机系统-讨论课7

选题三 、我们自己来写,太“库”啦 ~ ( 1 ) 在 Linux 里用 C 语言进行代码设计,能对某一个班级、某一门 课程、某一名学生的分数进行分析,比如分数段、最高分、最低 分、排名、优势课程等,具体涉及分析…

【计算机系统基础bomb lab】CSAPP实验:Bomb Lab

CSAPP 实验:Bomb Lab 实验内容简述 作为实验目标的二进制炸弹 “Bomb Lab” Linux可执行程序包含了多个阶段(或关卡),在每个阶段程序要求输入一-个特定字符串,如果输入满足程序代码所定义的要求,该阶段的炸弹就被拆除了&#xf…

基于Zynq的雷达10Gbps高速PCIE数据采集卡方案(二)硬件设计

3.1 引言 采集卡的硬件设计是实现采集功能的基础,良好的硬件设计可以使采集功能更容 易实现,方便软件开发。本章基于第二章的硬件设计方案来详细介绍采集卡硬件设计。 包括载卡和子卡的芯片的选型、配置和具体电路的设计。载卡和子卡的硬件设计总体 …

美联储内部分歧不断加大 妥协方案:6月“跳过”,7月再加

在周五举行的托马斯劳巴赫研究会议上,美联储主席鲍威尔、前主席伯南克一同出席,并对当前的热点政策问题发表了看法。货币政策,自然是备受关注的议题。 凭借研究“银行和金融危机”荣获2022年诺贝尔经济学奖的伯南克表示,银行业危机…

Linux文件与目录管理笔记1

鸟哥私房菜笔记 这里写目录标题 常用文件命令cd,pwd,mkdir,rmdir 执行文件的路径的变量:$PATHls,cp,rm,mv 文件内容查看指令(cat,tac,nl)可翻页查看(more,less)More(一页一页翻动)less 数据截取(head,tail)非纯文本文件:od 常用文件命令 cd…

lwIP:宏 LWIP_TCPIP_CORE_LOCKING(内核锁定)

从 lwIP-2.0.0 开始,在 opt.h 中多了一个宏开关 LWIP_TCPIP_CORE_LOCKING,默认使能。这个宏是启用内核锁定功能的。 本文探索这个宏的前世今生。 2007 年 5 月 24 日,Simon Goldschmid (以下简称 西蒙 )提交了一个任务…

DriveAct:用于自动驾驶汽车细粒度驾驶员行为识别的多模态数据集

Drive&Act:A Multi-modal Dataset for Fine-grained Driver Behavior Recognition in Autonomous Vehicles 摘要1. 简介2. 其它驾驶员动作数据集3. Drive&Act数据集3.1 数据采集3.2 记录的数据流传感器设置和视频流3D Body Pose3D Head PoseInterior ModelA…