🎬 HoRain云小助手:个人主页
🔥 个人专栏: 《Linux 系列教程》《c语言教程》
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
专栏介绍
专栏名称 | 专栏介绍 |
《C语言》 | 本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。 |
《网络协议》 | 本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制! |
《docker容器精解篇》 | 全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。 |
《linux系列》 | 本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。 |
《python 系列》 | 本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。 |
《试题库》 | 本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等) |
目录
⛳️ 推荐
专栏介绍
Dockerfile制作镜像与搭建LAMP环境
一、LAMP环境概述
二、搭建LAMP环境的两种主要方式
1. 单容器方案(Dockerfile实现)
步骤
2. 多容器方案(Docker Compose实现)
步骤
三、关键注意事项
1. 数据库分离原则
2. 数据持久化
3. PHP扩展选择
4. 环境变量管理
四、常用操作命令
五、生产环境优化建议
六、与传统方式对比
七、示例:完整LAMP环境搭建
结论
Dockerfile制作镜像与搭建LAMP环境
LAMP环境(Linux + Apache + MySQL + PHP)是Web开发中常用的环境组合。使用Docker可以快速、一致地搭建LAMP环境,避免了传统手动安装的繁琐过程和环境差异问题。下面详细介绍如何使用Dockerfile制作镜像并搭建LAMP环境。
一、LAMP环境概述
LAMP代表:
- Linux(操作系统)
- Apache(Web服务器)
- MySQL(数据库)
- PHP(脚本语言)
二、搭建LAMP环境的两种主要方式
1. 单容器方案(Dockerfile实现)
步骤
创建项目目录结构
mkdir lamp-docker && cd lamp-docker mkdir src # 存放PHP网站代码编写Dockerfile
# 使用官方PHP镜像(含Apache) FROM php:7.4-apache # 安装依赖和PHP扩展 RUN apt-get update && apt-get install -y \ libpng-dev \ libzip-dev \ mariadb-client \ && docker-php-ext-install mysqli pdo pdo_mysql gd zip # 启用Apache重写模块 RUN a2enmod rewrite # 复制网站代码到容器 COPY src/ /var/www/html/ # 调整目录权限(根据需求可选) RUN chown -R www-data:www-data /var/www/html # 暴露端口 EXPOSE 80 # 启动Apache服务 CMD ["apache2-foreground"]构建镜像
docker build -t my-lamp-app .运行容器
docker run -d -p 80:80 --name my-lamp my-lamp-app
2. 多容器方案(Docker Compose实现)
步骤
编写docker-compose.yml
version: '3' services: web: build: . ports: - "80:80" volumes: - ./src:/var/www/html # 挂载代码目录(开发环境) depends_on: - db environment: MYSQL_HOST: db MYSQL_USER: root MYSQL_PASSWORD: example db: image: mariadb:10.5 environment: MYSQL_ROOT_PASSWORD: example MYSQL_DATABASE: myapp volumes: - mysql_data:/var/lib/mysql # 持久化数据库 volumes: mysql_data:修改Dockerfile(优化版)
FROM php:8.2-apache RUN apt update && apt install -y \ git \ unzip \ libicu-dev \ libzip-dev \ && docker-php-ext-install intl pdo_mysql zip RUN a2enmod rewrite COPY ./config/vhost.conf /etc/apache2/sites-available/000-default.conf创建Apache虚拟主机配置(可选)
# config/vhost.conf <VirtualHost *:80> DocumentRoot /var/www/html/public <Directory /var/www/html/public> AllowOverride All Require all granted </Directory> </VirtualHost>构建并启动
docker-compose up -d --build
三、关键注意事项
1. 数据库分离原则
- MySQL应作为独立容器运行,通过环境变量配置连接
- 使用
depends_on确保启动顺序,但需处理服务就绪检测
2. 数据持久化
- 代码挂载:
volumes: - ./src:/var/www/html - 数据库持久化:
volumes: - mysql_data:/var/lib/mysql
3. PHP扩展选择
- 基础扩展:
pdo_mysql,mysqli - 常用扩展:
gd,zip,intl,opcache
4. 环境变量管理
在PHP代码中通过getenv()获取:
$db_host = getenv('MYSQL_HOST');四、常用操作命令
| 命令 | 说明 |
|---|---|
docker-compose up -d --build | 构建并启动 |
docker-compose logs -f web | 查看日志 |
docker exec -it my-lamp bash | 进入容器 |
docker exec db sh -c 'exec mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" myapp' > backup.sql | 数据库备份 |
五、生产环境优化建议
- 架构优化:使用
php:fpm+nginx镜像分离Web服务器 - 性能提升:配置
opcache和APCu提升PHP性能 - 安全加固:实现HTTPS支持(Let's Encrypt)
- 资源管理:设置CPU/Memory资源限制
- 文件排除:使用
.dockerignore排除无关文件
六、与传统方式对比
| 项目 | 传统方式 | Docker方式 |
|---|---|---|
| 环境一致性 | 依赖手动安装,易出错 | 通过Dockerfile定义,环境一致 |
| 部署速度 | 慢,需手动安装所有组件 | 快速,一键部署 |
| 版本管理 | 难以管理不同版本 | 通过Docker镜像标签轻松管理 |
| 依赖问题 | 易出现依赖冲突 | 容器化隔离,无依赖冲突 |
| 迁移性 | 难以迁移 | 任何支持Docker的环境均可运行 |
七、示例:完整LAMP环境搭建
# 创建项目结构 mkdir lamp-docker && cd lamp-docker mkdir src # 编写Dockerfile cat > Dockerfile << EOF FROM php:8.2-apache RUN apt update && apt install -y \ git \ unzip \ libicu-dev \ libzip-dev \ && docker-php-ext-install intl pdo_mysql zip RUN a2enmod rewrite COPY ./config/vhost.conf /etc/apache2/sites-available/000-default.conf COPY src/ /var/www/html/ EXPOSE 80 CMD ["apache2-foreground"] EOF # 创建虚拟主机配置 mkdir -p config cat > config/vhost.conf << EOF <VirtualHost *:80> DocumentRoot /var/www/html <Directory /var/www/html> AllowOverride All Require all granted </Directory> </VirtualHost> EOF # 创建测试文件 echo "<?php phpinfo(); ?>" > src/index.php # 构建和运行 docker build -t my-lamp . docker run -d -p 80:80 --name my-lamp my-lamp访问http://localhost即可看到PHP信息页面,表示LAMP环境已成功搭建。
结论
使用Dockerfile制作LAMP环境是现代Web开发的推荐方式,它简化了环境搭建过程,提高了环境一致性,并使开发、测试和生产环境更加一致。无论是单容器方案还是多容器方案,都能根据项目需求灵活选择。通过Docker,您可以轻松地将LAMP环境部署到任何支持Docker的平台上,实现"一次构建,处处运行"的目标。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙