Docker搭建LNMP环境并部署wordpress
本文最后更新于0 天前,其中的信息可能已经过时,如有错误请发送邮件到d535048@foxmail.com

系统环境Centos7

一、前置环境

#1.替换为阿里云CentOS 7 vault源(适配EOL)
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

#2.清理并重建yum缓存
yum clean all && yum makecache

#3.关闭防火墙和SElinux(生成环境中按需开发端口)
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

二、安装Docker

#1.卸载旧版Docker
yum remove -y docker docker-common docker-selinux docker-engine

#2.安装Docker依赖
yum install -y yum-utils device-mapper-persistent-data lvm2

#3.配置阿里云Docker源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#4.安装Docker-ce
yum install -y docker-ce docker-ce-cli containerd.io

#5.配置Docker加速器
cd /etc/docker
vim daemon.json
#写入以下内容
{
"registry-mirrors" : [
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com",
    "https://ccr.ccs.tencentyun.com",
    "https://docker.1panelproxy.com",
    "https://5e96702d4787418295070cded678a7b6.mirror.swr.myhuaweicloud.com",
    "https://docker.m.daocloud.io",
    "https://docker.imgdb.de",
    "https://docker.wanpeng.life",
    "https://docker.1panel.live",
    "https://hk11.606166.xyz",
    "https://docker.1ms.run",
    "https://docker.domys.cc",
    "https://docker-0.unsee.tech",
    "https://docker.hlmirror.com",
    "https://cjie.eu.org",
    "https://hub.rat.dev",
    "https://docker.rainbond.cc"
    ]
}

#6.保存文件并重启Docker服务
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
#或
systemctl restart docker.service
systemctl enable docker.service

#7.验证Docker安装
docker --verison

三、安装Docker Compose

因为网络问题,使用curl命令下载时间过长,这里选择去github下载对应版本二进制文件

#这里下载的是2.20.3版本,将下载完的二进制文件保存至/usr/local/bin/docker-compose

#下载完成后,为二进制文件赋予执行权限
chmod +x /usr/local/bin/docker-compose

#验证安装,成功安装显示Docker Compose版本信息
docker-compose --version

四、创建LNMP目录结构

为了方便管理,在宿主机上创建相应的目录结构

#创建核心目录(配置/数据/代码分离)
mkdir -p /opt/lnmp/{nginx/conf.d,nginx/logs,mysql/data,php/conf,wordpress}

#赋予权限(避免容器读写权限问题)
chmod -R 777 /opt/lnmp/mysql/data /opt/lnmp/nginx/logs /opt/lnmp/wordpress

五、编写自定义PHP镜像(采用自定义镜像时有问题,暂未解决)

因为拉取的是php:7.4-fpm的官方镜像,其中没有mysql扩展,所以采用自定义镜像

FROM php:7.4-fpm
 
# 安装mysqli扩展(用新包名default-libmysqlclient-dev)
RUN apt update && \
    apt install -y default-libmysqlclient-dev gcc make -y && \
    docker-php-ext-install mysqli 

六、编写Docker Compose配置文件(yml)

#在/opt/lnmp目录下创建docker-compose.yml
vim /opt/lnmp/docker-compose.yml

#写入以下内容

version: '1.0'
services:
  # 1. MySQL服务(WordPress依赖)
  mysql:
    image: mysql:5.7  # 推荐5.7版本(兼容WordPress)
    container_name: lnmp-mysql
    restart: always  # 容器异常自动重启
    environment:
      MYSQL_ROOT_PASSWORD: 123456  # 根密码(自行修改)
      MYSQL_DATABASE: wordpress    # 预创建WordPress数据库
      MYSQL_USER: wpuser           # WordPress专用用户
      MYSQL_PASSWORD: wppass       # 专用用户密码(自行修改)
      TZ: Asia/Shanghai            # 时区
    volumes:
      - /opt/lnmp/mysql/data:/var/lib/mysql  # 数据持久化
    networks:
      - lnmp-network
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci  # 字符集(支持emoji)
 
  # 2. PHP-FPM服务(处理PHP脚本)
  php:
    image: php:7.4-fpm  # 官方镜像中不含mysqli扩展,更换为自定义镜像
    # buiid:
    #     context: .
    #     dockerfile: Dockerfile-php
    container_name: lnmp-php
    restart: always
    volumes:
      - /opt/lnmp/wordpress:/var/www/html  # WordPress代码挂载
      - /opt/lnmp/php/conf:/usr/local/etc/php/conf.d  # PHP自定义配置
    networks:
      - lnmp-network
    depends_on:
      - mysql  # 依赖MySQL,先启动MySQL
 
  # 3. Nginx服务(反向代理+静态资源)
  nginx:
    image: nginx:latest
    container_name: lnmp-nginx
    restart: always
    ports:
      - "80:80"  # 映射宿主机80端口到容器80
    volumes:
      - /opt/lnmp/nginx/conf.d:/etc/nginx/conf.d  # Nginx虚拟主机配置
      - /opt/lnmp/nginx/logs:/var/log/nginx       # 日志持久化
      - /opt/lnmp/wordpress:/var/www/html         # 挂载WordPress代码
    networks:
      - lnmp-network
    depends_on:
      - php  # 依赖PHP,先启动PHP
 
# 自定义网络(容器间通信)
networks:
  lnmp-network:
    driver: bridge

这里在后面重复的时候发现通过Dockerfile文件构建镜像时会因网络连接超时导致无法正常拉取php镜像(网上给出的方法也没有解决问题,怀疑是网络原因,暂未解决),因此这里选择拉取php官方镜像后进入容器内部安装mysql扩展

# 进入lnmp-php容器
docker exec -it lnmp-php bash

# 1. 更新apt源(确保能找到最新包)
apt update

# 2. 安装替代包+编译依赖(替换libmysqlclient-dev为default-libmysqlclient-dev)
apt install -y default-libmysqlclient-dev gcc make -y

# 3. 安装并启用mysqli扩展(核心步骤)
docker-php-ext-install mysqli

#4. 退出容器
exit

# 宿主机执行,重启PHP容器
docker restart lnmp-php

# 验证mysqli扩展是否生效(输出mysqli即成功)
docker exec -it lnmp-php php -m | grep mysqli

七、配置Nginx反向代理

#在/opt/lnmp/nginx/conf.d目录下创建wordpress.conf
vim /opt/lnmp/nginx/conf.d/wordpress.conf

#写入以下内容
server {
	listen 80;
	server_name _;		#匹配所有域名(生产环境填写实际域名)
	root /var/www/html;	#对应PHP容器的代码目录
	index index.php index.html index.htm;

	#日志配置
	access_log /var/log/nginx/wordpress_access.log;
	error_log /var/log/nginx/wordpress_error.log;

	#wordpress伪静态规则??
	location / {
		try_files $uri $uri/ /index.php$args;
	}

	#PHP脚本转发到PHP-FPM
	location ~\.php$ {
		fastcgi_pass php:9000;	#服务名+PHP-FPM端口(容器内通信)
		fastcgi_index index.php;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;	
		include fastcgi_params;
	}

	#禁止访问隐藏文件
	location ~ /\.ht {
		deny all;
	}
}

八、启动LNMP容器集群

#进入lnmp目录
cd /opt/lnmp

#启动容器(--build强制构建自定义PHP镜像,首次启动会下载镜像,需要一段时间)
docker-compose up -d --build

#查看容器状态,所有容器应为UP状态
docker-compose ps

九、部署WordPress

#进入WordPress目录
cd /opt/lnmp/wordpress

#下载WordPress
wget https://cn.wordpress.org/latest-zh_CN.tar.gz

#解压并整理文件
tar -zxvf latest-zh_CN.tar.gz
mv wordpress/* ./
rm -rf wordpress latest-zh_CN.tar.gz

#确保权限正确
chmod -R 777 /opt/lnmp/wordpress

十、Web界面完成WordPress配置安装

1.打开浏览器,访问服务器IP
2.选择 “简体中文”,点击 “继续”;

  • 填写数据库信息(以下为默认配置,若修改过 docker-compose.yml 请对应调整):
    • 数据库名:wordpress
    • 用户名:wpuser
    • 密码:wppass
    • 数据库主机:mysql(服务名,Docker 内部通信)
    • 表前缀:wp_
  • 点击 “提交”→“运行安装程序”;
  • 设置站点标题、管理员账号 / 密码 / 邮箱,完成安装后即可登录。

十一、常用命令

# 重启所有容器 
docker-compose restart 

# 查看容器日志(排查问题) 
docker-compose logs -f nginx # 查看Nginx日志 
docker-compose logs -f mysql # 查看MySQL日志 
docker-compose logs -f php # 查看PHP日志 

# 修改MySQL root密码(宿主机执行) 
docker exec -it lnmp-mysql mysql -uroot -p123456 -e "ALTER USER 'root'@'%' IDENTIFIED BY '新密码'; FLUSH PRIVILEGES;" 

# 停止容器(保留数据) 
docker-compose stop 

# 停止并删除容器(数据卷仍保留) 
docker-compose down

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇