(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.rhkb.cn/news/369043.html

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

相关文章

震惊!张宇25版高数18讲发布,656页惹争议!

这个张宇老师在微博已经解释过了&#xff01; 我觉得张宇老师本意是好的&#xff0c;在考研数学教学创新这方面&#xff0c;他真的有自己的思考。 他为什么要这么做&#xff1f; 其实作为一个考研高数老师&#xff0c;他完全可以像其他老师一样&#xff0c;什么都不做&#x…

武汉免费 【FPGA实战训练】 Vivado入门与设计师资课程

一&#xff0e;背景介绍 当今高度数字化和智能化的工业领域&#xff0c;对高效、灵活且可靠的技术解决方案的需求日益迫切。随着工业 4.0 时代的到来&#xff0c;工业生产过程正经历着前所未有的变革&#xff0c;从传统的机械化、自动化逐步迈向智能化和信息化。在这一背景下&…

11 - matlab m_map地学绘图工具基础函数 - 绘制航迹、椭圆、风向玫瑰图和特定的圆形区域的有关函数及其用法

11 - matlab m_map地学绘图工具基础函数 - 绘制航迹、椭圆、风向玫瑰图和特定的圆形区域的有关函数及其用法 0. 引言1. 关于m_track2. 关于m_range_ring3. 关于m_ellipse4. 关于m_windrose5. 结语 0. 引言 本篇介绍下m_map中绘制航迹图函数&#xff08;m_track&#xff09;、绘…

Redis深度解析:核心数据类型与键操作全攻略

文章目录 前言redis数据类型string1. 设置单个字符串数据2.设置多个字符串类型的数据3.字符串拼接值4.根据键获取字符串的值5.根据多个键获取多个值6.自增自减7.获取字符串的长度8.比特流操作key操作a.查找键b.设置键值的过期时间c.查看键的有效期d.设置key的有效期e.判断键是否…

AI绘画Stable Diffusion 新手入门教程:万字长文解析Lora模型的使用,快速上手Lora模型!

大家好&#xff0c;我是设计师阿威 今天给大家讲解一下AI绘画Stable Diffusion 中的一个重要模型—Lora模型&#xff0c;如果还有小伙伴没有SD安装包的&#xff0c;可以看我往期入门教程2024最新超强AI绘画Stable Diffusion整合包安装教程&#xff0c;零基础入门必备&#xff…

项目基础知识

1.JDBC编程和MySQL数据库 数据库的连接&#xff08;以前写qq项目时的代码&#xff09; package com.wu.Util; import java.sql.*; public class JDBCUtil {private static JDBCUtil jdbcUtil null;private JDBCUtil() {}public static JDBCUtil getJdbcUtil() {if (jdbcUtil…

超融合服务器挂载硬盘--linux系统

项目中需要增加服务器的硬盘容量&#xff0c;通过超融合挂载了硬盘后&#xff0c;还需要添加到指定的路径下&#xff0c;这里记录一下操作步骤。 一&#xff1a;通过管理界面挂载硬盘 这一步都是界面操作&#xff0c;登录超融合控制云台后&#xff0c;找到对应的服务器&#…

Qt之Pdb生成及Dump崩溃文件生成与调试(含注释和源码)

文章目录 一、Pdb生成及Dump文件使用示例图1.Pdb文件生成2.Dump文件调试3.参数不全Pdb生成的Dump文件调试 二、个人理解1.生成Pdb文件的方式2.Dump文件不生产的情况 三、源码Pro文件mian.cppMainWindowUi文件 总结 一、Pdb生成及Dump文件使用示例图 1.Pdb文件生成 下图先通过…

Websocket通信实战项目(图片互传应用)+PyQt界面+python异步编程(async) (上)服务器端python实现

Rqtz : 个人主页 ​​ 共享IT之美&#xff0c;共创机器未来 ​ Sharing the Beauty of IT and Creating the Future of Machines Together 目录 项目背景 ​编辑​专有名词介绍 服务器GUI展示 功能(位置见上图序号) 客户端GUI展示&#xff08;h5cssjs&#xf…

固相提取铕和铀

固相萃取&#xff08;Solid Phase Extraction&#xff0c;SPE&#xff09;是一种常用的化学分离技术&#xff0c;它利用固体吸附剂&#xff08;固定相&#xff09;与样品中的目标化合物&#xff08;流动相&#xff09;之间的相互作用力&#xff0c;将目标化合物从样品中分离出来…

[Redis]哨兵机制

哨兵机制概念 在传统主从复制机制中&#xff0c;会存在一些问题&#xff1a; 1. 主节点发生故障时&#xff0c;进行主备切换的过程是复杂的&#xff0c;需要人工参与&#xff0c;导致故障恢复时间无法保障。 2. 主节点可以将读压力分散出去&#xff0c;但写压力/存储压力是无法…

python 发布应用程序包

文章目录 发布python包toml配置文件构建发布python包 官方文档参考 将自己的python项目发布成源码包或者wheel二进制包,供其他开发者使用。 方式: 使用py工具; distutils,该工具的使用已过时;setuptools,常用方式;wheel,在setuptools的基础上添加了 bdist_wheel, …

图形的搭建

例一&#xff1a; 输入描述&#xff1a; 多组输入&#xff0c;一个整数&#xff08;2~20&#xff09;&#xff0c;表示输出的行数&#xff0c;也表示组成“X”的反斜线和正斜线的长度。 输出描述&#xff1a; 针对每行输入&#xff0c;输出用“*”组成的X形图案。 示例一&…

智能合约与企业数字化转型:案例分析与未来展望

随着区块链技术的快速发展&#xff0c;智能合约作为其重要应用之一&#xff0c;正逐渐成为推动企业数字化转型的关键工具。智能合约不仅可以自动执行和验证合同&#xff0c;还能够增强数据安全性、优化业务流程&#xff0c;并提升企业间的信任和透明度。本文将深入探讨智能合约…

法国工程师IMT联盟 密码学及其应用 2023年期末考试补考题

1 JAVA 安全 1.1 问题1 1.1.1 问题 用 2 或 3 句话解释 Java 执行模型&#xff08;Java 虚拟机machine virtuelle Java)&#xff09;中引入introduit沙箱bac sable机制 mcanisme d’excution par isolation的目的。 1.1.2 问题解释 在 Java 执行模型&#xff08;Java 虚拟机…

【12321骚扰电话举报受理中心-短信验证安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

​埃文科技受邀出席2024 “数据要素×”生态大会​

2024“数据要素”生态大会&#xff08;以下简称“大会”&#xff09;于2024年6月30日在河南省郑州市举办&#xff0c;大会主题为“加快数据要素化进程 推动新质生产力发展”。 本次大会旨在搭建高水平交流合作平台、分享前沿观点、展示先进技术、交流实践经验&#xff0c;共同探…

开源模型应用落地-FastAPI-助力模型交互-WebSocket篇(五)

一、前言 使用 FastAPI 可以帮助我们更简单高效地部署 AI 交互业务。FastAPI 提供了快速构建 API 的能力,开发者可以轻松地定义模型需要的输入和输出格式,并编写好相应的业务逻辑。 FastAPI 的异步高性能架构,可以有效支持大量并发的预测请求,为用户提供流畅的交互体验。此外,F…

一个pdf分成,一个pdf分成两个,单个pdf分成多个

在数字化时代&#xff0c;pdf文件因其跨平台兼容性强、格式稳定等特点而成为工作与学习中的常用文件格式。然而&#xff0c;有时候我们可能只需要pdf文件中的某几个页面&#xff0c;而不是整个文档。这时&#xff0c;将一个pdf分成多个文件就变得尤为重要。本文将为你介绍几种简…

谷粒商城学习笔记-05-项目微服务划分图

文章目录 一&#xff0c;商城业务服务-前端服务二&#xff0c;商城业务服务-后端服务三&#xff0c;存储服务四&#xff0c;第三方服务五&#xff0c;服务治理六&#xff0c;日志七&#xff0c;监控预警系统1&#xff0c;Prometheus2&#xff0c;Grafana3&#xff0c;Prometheu…