首页主机资讯ubuntu lamp中docker如何应用

ubuntu lamp中docker如何应用

时间2025-12-12 19:02:03发布访客分类主机资讯浏览831
导读:在 Ubuntu 上使用 Docker 部署与管理 LAMP 的可行方案 一 方案总览与选择 多容器编排:使用 Docker Compose 分别运行 Apache/PHP 与 MySQL,通过自定义网络和卷实现数据与配置的隔离与持久化...

在 Ubuntu 上使用 Docker 部署与管理 LAMP 的可行方案


一 方案总览与选择

  • 多容器编排:使用 Docker Compose 分别运行 Apache/PHPMySQL,通过自定义网络和卷实现数据与配置的隔离与持久化,适合开发、测试与生产的一致化管理。
  • 单体镜像:在一个容器中安装 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→803306→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_PASSWORDMYSQL_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
Linux系统中PHP如何进行版本控制 ubuntu lamp下git如何使用

游客 回复需填写必要信息