首页 帮助中心 常见问题 如何docker搭建lnmp环境详细步骤
如何docker搭建lnmp环境详细步骤
时间 : 2024-08-01 14:33:57 编辑 : 华纳云 阅读量 : 226

  使用Docker搭建 LNMP(Linux、Nginx, MySQL, PHP)环境是一种高效且灵活的方法,能够快速部署并轻松管理。这份指南将详细介绍如何在 Docker中搭建LNMP环境详细步骤,感兴趣的可以了解下。
  环境准备安装Docker和Docker Compose
  安装 Docker
  在 Ubuntu 上,你可以使用以下命令安装 Docker:
  sudo apt update
  sudo apt install docker.io
  sudo systemctl start docker
  sudo systemctl enable docker
  在 CentOS 上:
  sudo yum update
  sudo yum install docker
  sudo systemctl start docker
  sudo systemctl enable docker
  macOS 你可以从Docker官网下载并安装 Docker Desktop。
  这个需要提前创建,因为如果直接使用docker命令创建容器会报错本地没有映射文件
  安装Docker Compose
  在 Ubuntu 上:
  sudo apt install docker-compose
  在 CentOS 上:
  sudo yum install epel-release
  sudo yum install python-pip
  sudo pip install docker-compose
  在 macOS 上,Docker Desktop 已经包含 Docker Compose。
  验证 Docker 和 Docker Compose 是否正确安装:
  docker --version
  docker-compose --version
  确保输出显示版本号,证明安装成功。
  创建项目目录结构,我们需要创建一个项目目录来组织配置文件和数据。
  mkdir lnmp-docker
  cd lnmp-docker
  在项目目录下,创建以下子目录:
  mkdir nginx mysql php www logs
  配置 Docker Compose 文件
  在 lnmp-docker 目录下创建一个名为 docker-compose.yml 的文件,定义 Nginx、MySQL 和 PHP 服务。
  yaml
  version: '3.8'
  services:
  nginx:
  image: nginx:latest
  container_name: nginx
  ports:
  - "80:80"
  - "443:443"
  volumes:
  - ./nginx/conf.d:/etc/nginx/conf.d
  - ./www:/var/www/html
  - ./logs/nginx:/var/log/nginx
  depends_on:
  - php
  php:
  image: php:8.2-fpm
  container_name: php
  volumes:
  - ./www:/var/www/html
  depends_on:
  - mysql
  mysql:
  image: mysql:latest
  container_name: mysql
  environment:
  MYSQL_ROOT_PASSWORD: root_password
  MYSQL_DATABASE: mydb
  MYSQL_USER: user
  MYSQL_PASSWORD: user_password
  volumes:
  - mysql_data:/var/lib/mysql
  volumes:
  mysql_data:
  docker-compose.yml 文件解析:
  本版本声明:version: '3.8' 表示使用 Docker Compose 的 3.8 版本语法。
  服务定义为:nginx:使用最新的 Nginx 镜像,暴露 80 和 443 端口,并挂载配置文件、网站文件和日志。
  使用 PHP 8.2-FPM 镜像,挂载网站文件。
  mysql:使用最新的 MySQL 镜像,设置数据库环境变量,并挂载数据卷以持久化数据。
  数据盘:mysql_data 用于持久化 MySQL 数据,以防止数据丢失。
  服务器配 Nginx创建 Nginx 配置文件
  在 nginx 目录下创建 conf.d 子目录:
  mkdir nginx/conf.d
  在 nginx/conf.d 目录下创建 default.conf 文件,添加以下内容:
  nginx
  server {
  listen 80;
  server_name localhost;
  root /var/www/html;
  index index.php index.html index.htm;
  location / {
  try_files $uri $uri/ =404;
  }
  location ~ \.php$ {
  include fastcgi_params;
  fastcgi_pass php:9000;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }
  location ~ /\.ht {
  deny all;
  }
  }
  重新创建Ngin 日志目录,在logs 目录下为 Nginx 创建日志子目录:
  mkdir logs/nginx
  配置PHP在php目录中,使用 PHP-FPM 镜像,它已经支持许多扩展。
  如果需要安装其他PHP扩展,可以创建自定义Dockerfile:
  创建 PHP Dockerfile
  php目录下创建 Dockerfile 文件,内容如下:
  dockerfile
  FROM php:8.2-fpm
  # 安装 PHP 扩展
  RUN docker-php-ext-install pdo pdo_mysql
  修改 Docker Compose 文件以使用自定义 PHP 镜像
  将docker-compose.yml 中的 PHP 服务改为使用 Dockerfile 构建:
  yaml
  php:
  build:
  context: ./php
  volumes:
  - ./www:/var/www/html
  depends_on:
  - mysql
  配置 MySQL
  MySQL 在 docker-compose.yml 中已经设置了环境变量来创建数据库和用户。可以根据需要更改这些值。
  yaml
  environment:
  MYSQL_ROOT_PASSWORD: root_password
  MYSQL_DATABASE: mydb
  MYSQL_USER: user
  MYSQL_PASSWORD: user_password
  创建网站目录
  在 lnmp-docker目录下创建 www 目录,并在里面创建一个简单的 PHP 文件用于测试:
  mkdir www
  在 www 目录下创建 index.php 文件,添加以下内容:
  php
  <?php
  phpinfo();
  ?>
  启动 LNMP 环境
  在 lnmp-docker 目录下,执行以下命令启动服务:
  docker-compose up -d
  启动过程解析:
  docker-compose up 命令启动所有在 docker-compose.yml 文件中定义的服务。
  -d 选项表示在后台运行容器。
  这将启动 Nginx、PHP 和 MySQL 容器。你可以通过访问 http://localhost 来查看 PHP 信息页面,确认环境是否成功搭建。
  验证与测试
  1. 访问 PHP 测试页面
  打开浏览器,访问 http://localhost,你应该能看到 PHP 信息页面。这表明 Nginx 和 PHP-FPM 配置正常。
  2. 检查 MySQL 连接
  通过 MySQL 客户端连接到数据库:
  docker exec -it mysql mysql -uuser -puser_password mydb
  输入密码后,可以执行 SQL 查询以验证连接:
  sql
  SHOW TABLES;
  3. 查看日志
  检查容器日志以诊断问题:
  Nginx 日志:位于 logs/nginx 目录中。
  MySQL 日志:通过 Docker 查看日志:
  docker logs mysql
  4. 检查容器状态
  使用 Docker 命令查看容器状态:
  docker ps
  这将显示所有正在运行的容器,确保 Nginx、PHP 和 MySQL 容器都在运行。
  自定义和扩展
  安装更多 PHP 扩展
  如果你需要其他 PHP 扩展,可以在 Dockerfile 中添加它们。例如,安装 gd 扩展:
  dockerfile
  RUN apt-get update && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev \
  && docker-php-ext-configure gd --with-freetype --with-jpeg \
  && docker-php-ext-install -j$(nproc) gd
  然后重建和启动容器:
  docker-compose up -d --build
  配置 HTTPS
  如果需要使用 HTTPS,可以在 Nginx 中添加 SSL 支持。以下是步骤:
  生成自签名证书或使用 Let's Encrypt。
  修改 Nginx 配置文件 nginx/conf.d/default.conf,添加 SSL 支持:
  nginx
  server {
  listen 443 ssl;
  server_name localhost;
  ssl_certificate /etc/nginx/ssl/nginx.crt;
  ssl_certificate_key /etc/nginx/ssl/nginx.key;
  root /var/www/html;
  index index.php index.html index.htm;
  location / {
  try_files $uri $uri/ =404;
  }
  location ~ \.php$ {
  include fastcgi_params;
  fastcgi_pass php:9000;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }
  location ~ /\.ht {
  deny all;
  }
  }
  将证书文件添加到 Nginx 容器中:
  创建 nginx/ssl 目录,并放置你的证书文件 nginx.crt 和 nginx.key。
  更新 Docker Compose 配置:
  将证书目录挂载到 Nginx 容器:
  yaml
  volumes:
  - ./nginx/conf.d:/etc/nginx/conf.d
  - ./nginx/ssl:/etc/nginx/ssl
  - ./www:/var/www/html
  - ./logs/nginx:/var/log/nginx
  添加 Redis 缓存
  如果你需要 Redis 缓存,可以在 docker-compose.yml 中添加 Redis 服务,并在 PHP 中配置 Redis 扩展。
  添加 Redis 服务:
  yaml
  redis:
  image: redis:latest
  container_name: redis
  安装 PHP Redis 扩展:
  在 php/Dockerfile 中添加:
  dockerfile
  RUN pecl install redis \
  && docker-php-ext-enable redis
  修改 PHP 配置以使用 Redis。
  数据备份
  使用 docker exec 或 cron 作业定期备份 MySQL 数据。
  创建一个备份目录:
  mkdir mysql_backup
  创建备份脚本 backup.sh:
  #!/bin/
  docker exec mysql /usr/bin/mysqldump -u user --password=user_password mydb > mysql_backup/backup.sql
  使脚本可执行:
  chmod +x backup.sh
  可以使用 cron 作业定期执行备份:
  crontab -e
  添加以下行,每天执行备份,具体备份时间自己设定,下面每天凌晨2点备份
  0 2 * * * /path/to/lnmp-docker/backup.sh
  监控和日志分析
  使用工具如 Prometheus、Grafana 和 ELK Stack 进行监控和分析日志。
  Prometheus 和 Grafana:用于实时监控和可视化。
  ELK Stack:用于日志分析(Elasticsearch, Logstash, Kibana)。
  在Docker中搭建LNMP 环境提供详细步骤。你可以根据项目需求对环境进行进一步的自定义和优化。通过Docker容器化,整个部署和管理过程将变得更加简洁和高效,需要了解更多相关技术问题,可以访问华纳云帮助中心。

华纳云 推荐文章
Nginx 启动成功访问网页错误怎么排查原因 Linux系统中网络连接超时如何处理 Windows 系统中安装 IIS详细步骤 Linux优化应用程序和服务的方法 nginx反向代理配置去除前缀的方法 Centos中如何实现Tomcat服务器的多台搭建 Ubuntu中apachectl status 如何查看Apache状态 ubuntu系统中Docker的安装和使用详细指南 Linux系统Wmware Esxi磁盘扩容步骤 ipv6服务器的定义和意义
客服咨询
7*24小时技术支持
技术支持
渠道支持