(2024)docker-compose实战 (8)部署LAMP项目(最终版)

 前言

  1. 在前一篇文章中, 我们已经搭建LAMP环境, 但php没有安装扩展, 这篇文章将安装PHP扩展, 实现正常的PHP项目部署
  2. 我在git中查找到一个简易安装PHP扩展的方法(GitHub - mlocati/docker-php-extension-installer: Easily install PHP extensions in Docker containers).
  3. 通过这个方法, 安装PHP扩展, 优点是编辑Dockerfile文件时简单快捷, 填写要用的扩展名即可. 缺点是安装的时间较长, 需耐心等待. 另说明下, 这种方法构建完镜像后, 会自动清除镜像中无用的文件, 这个很赞.

支持的PHP扩展列表

ExtensionPHP 5.5PHP 5.6PHP 7.0PHP 7.1PHP 7.2PHP 7.3PHP 7.4PHP 8.0PHP 8.1PHP 8.2PHP 8.3
amqp
apcu
apcu_bc
ast
bcmath
bitset
blackfire
bz2
calendar
cassandra*
cmark
csv
dba
ddtrace*
decimal
ds
ecma_intl*
enchant
ev
event
excimer
exif
ffi
ftp
gd
gearman
geoip
geos*
geospatial
gettext
gmagick
gmp
gnupg
grpc
http
igbinary
imagick
imap
inotify
interbase
intl
ion
ioncube_loader
jsmin
json_post
jsonpath
ldap
luasandbox
lz4*
lzf
mailparse
maxminddb
mcrypt
memcache
memcached
memprof*
mongo
mongodb
mosquitto
msgpack
mssql
mysql
mysqli
newrelic
oauth
oci8
odbc
opcache
opencensus
openswoole
opentelemetry
parallel*
parle*
pcntl
pcov
pdo_dblib
pdo_firebird
pdo_mysql
pdo_oci
pdo_odbc
pdo_pgsql
pdo_sqlsrv*
pgsql
php_trie
pkcs11
pq
propro
protobuf
pspell
pthreads*
raphf
rdkafka
recode
redis
relay
saxon*
seasclick
seaslog
shmop
simdjson*
smbclient
snappy
snmp
snuffleupagus
soap
sockets
sodium*
solr
sourceguardian
spx
sqlsrv*
ssh2
stomp
swoole
sybase_ct
sync
sysvmsg
sysvsem
sysvshm
tensor
tideways
tidy
timezonedb
uopz
uploadprogress
uuid
uv
vips*
vld
wddx
wikidiff2*
xdebug
xdiff
xhprof
xlswriter
xmldiff
xmlrpc
xsl
yac
yaml
yar
zephir_parser
zip
zmq
zookeeper
zstd

目录结构

web/									/web/目录
|
├─ mysql/								mysql目录
|  ├─ conf/ 							配置文件目录
|  |  └─  my.cnf						配置文件
|  ├─ log/ 								日志目录
|  └─ data/								数据目录
|
├─ redis/								redis目录
|  ├─ conf/ 							配置文件目录
|  |  └─  my.cnf						配置文件
|  ├─ log/ 								日志目录
|  └─ data/								数据目录
|
├─ laoliu_pro/							项目目录
|  ├─ conf/ 							nginx配置文件目录
|  |  ├─  php.ini 						php.ini
|  |  └─  000-default.conf				apache配置文件
|  ├─ html/ 							项目目录
|  |  └─  index.html					项目文件, 这里是一个文件, 正常情况下可能会有多个文件
|  ├─ log/ 								日志目录
|  └─ Dockerfile 						Dockerfile文件
|
└─ docker-compose.yaml					docker-composer的配置文件

docker-compose.yaml配置文件说明

对照上一篇文章, 只是修改了build字段. 如果有已经构建好的镜像, 可以使用image字段直接指定镜像.

version: '3'services:      laoliu_pro:build:# dockerfile所在的目录context: ./laoliu_pro# dockerfile的文件名dockerfile: Dockerfileports:- "80:80"- "443:443"volumes:- /etc/localtime:/etc/localtime:ro- ./laoliu_pro/log:/var/log/apache2:rw - ./laoliu_pro/html:/var/www/html:rw # apache配置目录- ./laoliu_pro/conf/000-default.conf:/etc/apache2/sites-available/000-default.conf:ro# php.ini- ./laoliu_pro/conf/php.ini:/usr/local/etc/php/php.inicontainer_name: laoliu_pro# 服务名mysql:restart: always# mysql镜像, 可选5.7或8image: mysql:5.7environment:# root密码MYSQL_ROOT_PASSWORD: 1234@5678# 允许远程连接MYSQL_ROOT_HOST: '%'# 挂载卷 <宿主机路径>:<容器路径>volumes:# docker时间同步- /etc/localtime:/etc/localtime:ro# 映射日志目录- ./mysql/log:/var/log/mysql# 映射配置目录- ./mysql/conf:/etc/mysql/mysql.conf.d:rw# 映射数据目录- ./mysql/data:/var/lib/mysql:rw# 容器名称container_name: mysql# 端口映射 <宿主机端口>:<容器端口>ports:- 3306:3306# 服务名redis:restart: always# redis镜像image: redis:5-alpine# 挂载卷 <宿主机路径>:<容器路径>volumes:# docker时间同步- /etc/localtime:/etc/localtime:ro# 映射配置目录- ./redis/conf:/etc/redis:ro# 映射数据目录- ./redis/data:/data:rw# 容器名称container_name: redis# 端口映射 <宿主机端口>:<容器端口>ports:- 6379:6379hostname: redis# 在容器启动后执行的命令command: redis-server /etc/redis/redis.conf

Dockerfile说明

# 这里使用的是php:5.6-apache镜像
FROM php:5.6-apacheADD --chmod=0755 https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/# apache开启伪静态
RUN a2enmod rewrite# 安装扩展
RUN install-php-extensions gd \&& install-php-extensions iconv \&& install-php-extensions opcache \&& install-php-extensions zip \&& install-php-extensions pdo_mysql \&& install-php-extensions bcmath pcntl \&& install-php-extensions sockets \&& install-php-extensions sysvmsg \&& install-php-extensions mysqli \&& install-php-extensions redis \&& install-php-extensions gettext \&& install-php-extensions intl \&& install-php-extensions mcrypt \&& install-php-extensions mysql \&& install-php-extensions shmop \&& install-php-extensions soap \&& install-php-extensions xmlrpc

启动容器

# 启动容器
docker-compose up -d

构建镜像

# 构建镜像
docker build -t laoliu_pro/php56_apache:v1 /web/laoliu_pro

apache配置文件(同上一篇文章)

文件路径: /web/laoliu_pro/conf/000-default.conf

<VirtualHost *:80>ServerName laoliu.proServerAlias laoliu.proDocumentRoot /var/www/html/public<Directory /var/www/html/public>DirectoryIndex index.php index.html index.htmOptions Indexes FollowSymLinksAllowOverride AllOrder allow,denyallow from allRequire all granted</Directory>ErrorLog ${APACHE_LOG_DIR}/error.logCustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

PHP项目(同上一篇文章)

PHP项目直接部署到/web/laoliu_pro/html中即可. 记得修改数据库配置文件

php.ini(同上一篇文章)

如果需要修改运行内存, 上传设置, 超时时间等, 则需要补充/web/laoliu_pro/conf/php.ini文件. 若只是使用默认设置, 则可以在docker-compose.yaml中去掉php.ini的映射.

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

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

相关文章

MySQL 忘记了密码怎么办?

如果 MySQL 普通账户忘记了密码&#xff0c;很容易解决&#xff0c;可以通过登录 root 账户来重置普通账户密码。然而&#xff0c;如果 root 账户的密码也忘记或丢失了&#xff0c;该怎么办呢&#xff1f; 这篇文章将教你如何重置 root 账户密码&#xff0c;亲测有效。 版本&…

【Python机器学习】模型评估与改进——二分类指标

目录 1、错误类型 2、不平衡数据集 3、混淆矩阵 与精度的关系。 准确率、召回率与f-分数 分类报告 4、考虑不确定性 5、准确率-召回率曲线 6、受试者工作特征&#xff08;ROC&#xff09;与AUC 二分类可能是实践中最常见的机器学习应用&#xff0c;也是概念最简单的应…

云原生之容器编排实践-OpenEuler23.09在线安装Kubernetes与KubeSphere

背景 前几篇文章中介绍了如何将 ruoyi-cloud 项目部署到 Kubernetes 集群中&#xff0c;包括网关服务、认证服务和系统服务并且对全部服务采用 YAML 文件的方式来进行部署&#xff0c;这虽然有助于理解 K8S 组织管理资源的风格与底层机制&#xff0c;但是对于团队中不太熟悉命…

代码随想录算法训练营第21天|LeetCode 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

1.LeetCode 669. 修剪二叉搜索树 题目链接&#xff1a;https://leetcode.cn/problems/trim-a-binary-search-tree/description/ 文章链接&#xff1a;https://programmercarl.com/0669.修剪二叉搜索树.html 视频链接&#xff1a;https://www.bilibili.com/video/BV17P41177ud?…

【网络】网络基础(一)

网络基础&#xff08;一&#xff09; 文章目录 一、计算机网络背景1.1网络发展1.2认识“协议” 二、网络协议初识2.1OSI七层模型2.2OSI五层模型 三、网络传输基本流程3.1局域网通信3.2网络传输流程不跨子网的网络传输跨子网的网络传输 3.3网络中的地址管理IP地址MAC地址 一、计…

Kotlin中的数据类型

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

算法训练 | 图论Part1 | 98.所有可达路径

目录 98.所有可达路径 深度搜索法 98.所有可达路径 题目链接&#xff1a;98. 所有可达路径 文章讲解&#xff1a;代码随想录 深度搜索法 代码一&#xff1a;邻接矩阵写法 #include <iostream> #include <vector> using namespace std; vector<vector<…

冒泡排序写法

正宗的冒泡排序写法&#xff1a; public class BubbleSort {public static void main(String[] args) {int[] a {4,6,5,24,3,7,1};//初始化一个最大角标变量int n a.length-1;//循环轮次for (int i0;i<n;i){//从后向前开始&#xff0c;相邻元素比较大小&#xff0c;小的元…

Batch Size 不同对evaluation performance的影响

目录 问题描述如果是bugbatch size的设置问题尝试使用GroupNorm解决batchsize不同带来的问题归一化的分类 参考文章 问题描述 深度学习网络训练时&#xff0c;使用较小的batch size训练网络后&#xff0c;如果换用较大的batch size进行evaluation&#xff0c;网络的预测能力会…

Python基础001

Python输出语句 print输出字符串 print("中国四大名著&#xff1a;","西游记|","三国演义|","红楼梦|","水浒传") print(6) print(1 1)Python输入语句 input函数 input() input("我的名字是&#xff1a;") p…

efficient evolution 抗体进化模型笔记

使用到的六个esm模型&#xff1a; python bin/recommend.py --model-names, default[ esm1b, esm1v1, esm1v2, esm1v3, esm1v4, esm1v5, ] 计算概率分布&#xff1a; logits model.predict_sequence_prob(seq): 通过模型对输入序列 seq 进行预测&#xff0c;…

2023年下半年软考网络规划设计师论文真题

论文一 论虚拟化网络架构的规划与建设 随着信息技术的发展,网络以及软件厂商的产品、企业网络的规划按照NaaS模型进行演进已经成为一种共识。在NaaS的理念下,企业的IT专业人员将能够从选项菜单中订购网络基础设施组件,根据业务需求进行设计,并在短时间内交付和运行整个网…

RK3568驱动指南|第十五篇 I2C-第182章 使用Linux中默认的模拟I2C驱动程序

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

线性代数笔记

行列式 求高阶行列式 可以划上三角 上三角 余子式 范德蒙行列式 拉普拉斯公式 行列式行列对换值不变 矩阵 矩阵的运算 同型矩阵加减 对应位置相加减 矩阵的乘法 左边第 i 行 一次 相乘求和 右边 第 j 列 eg 中间相等 两边规模 矩阵的幂运算 解题思路 找规律 数学归纳…

用C语言做一个web站,富文本写入与展示,用户登录,文本目录划分

目录 1. 基础准备必备工具&#xff1a; 2. 目录结构3. 用户登录&#xff08;使用简单的文件系统管理&#xff09;4. 富文本编辑器和展示5. 样式文件6. 配置 Web 服务器7. 运行和测试 构建一个简单的 Web 站点实现富文本写入和展示、用户登录以及文本目录划分需要结合多个技术&a…

CVE-2024-6387 分析

文章目录 1. 漏洞成因2. 漏洞利用前置知识2.1 相关 SSH 协议报文格式2.2 Glibc 内存分配相关规则 3. POC3.1 堆内存布局3.2 服务端解析数据时间测量3.3 条件竞争3.4 FSOP 4. 相关挑战 原文链接&#xff1a;个人博客 近几天&#xff0c;OpenSSH爆出了一个非常严重的安全漏洞&am…

重生奇迹mu精灵之心怎么搭配

玩家可以通过召唤来召唤多种精灵之心&#xff0c;每种精灵之心增加的属性也不同。精灵之心的作用是为了提升各种各样的属性。我们可以通过召唤获得精灵之心&#xff0c;前面的解锁费用较低&#xff0c;而后面的解锁需要大量的金币来解锁。 召唤精灵之心后&#xff0c;我们可以…

OpenResty Nginx:详细对比与部署指南

简介 Nginx 和 OpenResty 都是高性能的 Web 服务器和反向代理服务器&#xff0c;但它们有着不同的特性和应用场景。Nginx 是一个轻量级的、高性能的 HTTP 和反向代理服务器&#xff0c;而 OpenResty 是基于 Nginx 的集成软件平台&#xff0c;增强了 Nginx 的功能&#xff0c;特…

数据结构(JAVA)—代码题

01-数据结构—判断题 02-数据结构—选择题 03 数据结构—多选填空程序填空 ​ 01-顺序表的建立及遍历 import java.util.Iterator; import java.util.LinkedList; import java.util.ListIterator; import java.util.Scanner;public class Main {public static void main(St…