ubuntu lamp中docker如何应用
导读:在 Ubuntu 上使用 Docker 部署与管理 LAMP 的可行方案 一 方案总览与选择 多容器编排:使用 Docker Compose 分别运行 Apache/PHP 与 MySQL,通过自定义网络和卷实现数据与配置的隔离与持久化...
在 Ubuntu 上使用 Docker 部署与管理 LAMP 的可行方案
一 方案总览与选择
- 多容器编排:使用 Docker Compose 分别运行 Apache/PHP 与 MySQL,通过自定义网络和卷实现数据与配置的隔离与持久化,适合开发、测试与生产的一致化管理。
- 单体镜像:在一个容器中安装 Apache + MySQL + PHP,快速上手,适合演示或极简环境,但耦合度高、升级与维护不便。
- 现成镜像:直接使用社区 LAMP 镜像(如 tutum/lamp、linode/lamp),开箱即用,便于快速验证与学习。
二 快速上手 多容器方式 Docker Compose
- 准备目录与代码
- 创建项目目录并放入代码,例如:
- 代码目录:~/lamp-app
- 示例文件:~/lamp-app/index.php
< ?php phpinfo();
- 创建项目目录并放入代码,例如:
- 编写 docker-compose.yml
version: "3.8" services: db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: rootpass MYSQL_DATABASE: myapp MYSQL_USER: app MYSQL_PASSWORD: apppass volumes: - mysql-data:/var/lib/mysql networks: - lamp web: build: . ports: - "80:80" volumes: - ./src:/var/www/html networks: - lamp depends_on: - db volumes: mysql-data: networks: lamp: - 构建并启动
cd ~/lamp-app docker compose up -d --build docker ps - 验证
- 浏览器访问 http://localhost,应看到 phpinfo 页面。
- 进入数据库容器验证库与用户:
docker exec -it lamp-app-db-1 mysql -uapp -papppass myapp -e "show tables; "
- 说明
- 上述示例使用官方 php:7.4-apache 作为基础镜像,需在自定义 Dockerfile 中安装 mysqli/pdo_mysql 扩展;Compose 负责编排、网络与数据卷管理,便于环境一致性与可移植性。
三 快速上手 单体镜像方式
- 一条命令启动(映射 8080→80、3306→3306)
docker run -d \ --name lamp \ -p 8080:80 \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=root \ tutum/lamp:latest curl http://localhost:8080 - 说明
- 适合快速验证或演示;如需持久化数据,可额外挂载卷到 /var/lib/mysql。生产环境建议使用多容器编排以获得更好的隔离与可维护性。
四 关键配置与最佳实践
- 数据与配置持久化
- 数据库使用 named volume(如示例中的 mysql-data)或绑定挂载,避免容器重建导致数据丢失。
- Web 代码使用卷挂载(如 ./src:/var/www/html),实现热更新与本地开发联动。
- 网络与服务发现
- 使用自定义网络(如 lamp),容器间通过服务名(如 db)互通,避免依赖 IP。
- 环境变量与初始化
- 通过 environment 设置数据库口令与库名;将 .sql 初始化脚本放入 /docker-entrypoint-initdb.d/ 实现首次建表与数据导入。
- 资源与稳定性
- 为容器设置 –restart=unless-stopped,并使用 -p 精准映射所需端口;必要时通过 –cpus、–memory 限制资源,避免单机过载。
- 安全建议
- 不在镜像中硬编码敏感信息,使用 .env 文件或 Docker Secrets 管理;数据库默认仅监听容器内网络,外网访问需显式发布端口并做好访问控制。
五 常见问题与排查
- 访问不到页面
- 确认 -p 80:80 或 -p 8080:80 已正确映射;使用 docker ps 检查端口映射;查看容器日志 docker logs lamp-app-web-1。
- 数据库连接失败
- 应用连接地址使用服务名 db 而非 localhost;确认 MYSQL_ROOT_PASSWORD 与 MYSQL_DATABASE 等环境变量正确;进入数据库容器验证用户权限。
- 权限与文件所有权
- 挂载卷时注意 UID/GID 一致性;必要时在容器内调整目录权限(如 chown -R www-data:www-data /var/www/html)。
- 升级与回滚
- 多容器方式建议通过 Compose 管理镜像标签与版本;变更前备份数据库卷;回滚时优先回退镜像标签并重启服务。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: ubuntu lamp中docker如何应用
本文地址: https://pptw.com/jishu/770791.html
