🎬 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环境搭建

结论


img

Dockerfile制作镜像与搭建LAMP环境

LAMP环境(Linux + Apache + MySQL + PHP)是Web开发中常用的环境组合。使用Docker可以快速、一致地搭建LAMP环境,避免了传统手动安装的繁琐过程和环境差异问题。下面详细介绍如何使用Dockerfile制作镜像并搭建LAMP环境。

一、LAMP环境概述

LAMP代表:

  • Linux(操作系统)
  • Apache(Web服务器)
  • MySQL(数据库)
  • PHP(脚本语言)

二、搭建LAMP环境的两种主要方式

1. 单容器方案(Dockerfile实现)

步骤
  1. 创建项目目录结构

    mkdir lamp-docker && cd lamp-docker
    mkdir src  # 存放PHP网站代码
    
  2. 编写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"]
    
  3. 构建镜像

    docker build -t my-lamp-app .
    
  4. 运行容器

    docker run -d -p 80:80 --name my-lamp my-lamp-app
    

2. 多容器方案(Docker Compose实现)

步骤
  1. 编写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:
    
  2. 修改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
    
  3. 创建Apache虚拟主机配置(可选)

    # config/vhost.conf
    <VirtualHost *:80>
        DocumentRoot /var/www/html/public
        <Directory /var/www/html/public>
            AllowOverride All
            Require all granted
        </Directory>
    </VirtualHost>
    
  4. 构建并启动

    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数据库备份

五、生产环境优化建议

  1. 架构优化:使用php:fpm + nginx镜像分离Web服务器
  2. 性能提升:配置opcacheAPCu提升PHP性能
  3. 安全加固:实现HTTPS支持(Let's Encrypt)
  4. 资源管理:设置CPU/Memory资源限制
  5. 文件排除:使用.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 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐