当前位置: 首页 > news >正文

使用docker在CentOS 7上安装php+mysql+nginx环境教程并运行WordPress

文章目录

  • 一、安装docker
    • 1、切换yum源并更新系统
    • 2、卸载旧版docker
    • 3、配置Docker的yum库
    • 4、安装Docker
    • 5、启动和校验Docker
    • 6、配置镜像加速
      • 6.1、注册阿里云账号
      • 6.2、开通镜像服务
      • 6.3、配置镜像加速
  • 二、部署php+mysql+nginx环境
    • 1、准备目录结构
    • 2、拉取镜像
    • 3、运行容器并从中拷贝出需要的配置文件
    • 4、修改配置文件
    • 5、启动容器
      • 5.1、使用docker compose方式启动(推荐)
        • 5.1.1、创建docker-compose.yml文件
        • 5.1.2、修改目录权限
      • 5.1.3、修改MySQL的root密码
        • 5.1.3、停止并删除容器
      • 5.2、使用docker run命令启动(不推荐)
        • 5.2.1、创建网络
        • 5.2.2、启动容器
      • 5.2.3、修改MySQL的root密码
      • 5.2.4、docker run命令和docker-compose.yml转换——Composerize
  • 三、安装WordPress
    • 1、创建数据库
    • 2、创建MySQL用户并授权
    • 3、导入数据库(初始安装不需要这一步)
    • 4、解压代码到工程目录
    • 5、修改WordPress配置文件
    • 6、增加nginx配置文件
    • 7、重启nginx容器
      • 7.1、方式一:使用docker命令重启
      • 7.2、方式二:使用docker compose命令重启
    • 8、访问WordPress
    • 9、使用Dockerfile构建安装了扩展的php镜像
  • 四、安装https证书
  • 参考资料

前言:为什么会写这篇文章,一切都是因为手欠。两周前,我准备在服务器上安装docker,就先更新了yum源,并执行了yum update命令,但由于嫌弃yum更新太慢就中断了命令,后来发现命令并没有中断,而是在后台运行,心太急,就不相等,就想重启服务器之后重新安装,然后就执行了reboot命令,然后我的服务器就挂了,无奈只能初始化重装了。之前一直采用的是本地化安装php+nginx+mysql的方式,这次正好重装,就想试试用docker安装这个环境,然后过程中自己也踩了一些坑,所以写一篇文章记录一下,避免过后就忘记了。

写在前面:本文适合有Linux和Docker基础的人,如果不了解基础的Linux命令和基础的docker命令看起来可能会有点困难~~

一、安装docker

1、切换yum源并更新系统

本案例是基于阿里云服务器CentOS 7操作系统为宿主机进行的,所以,第一步为切换宿主机的yum源,依次执行以下命令即可(以下命令需要以root权限执行,如果不是以root身份登录的,需要在每条命令前面加上sudo )。

# 进入yum源存放路径
cd /etc/yum.repos.d/
# 备份初始的yum源
cp CentOS-Base.repo CentOS-Base.repo.bak
# 下载阿里云的yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 清除YUM缓存
yum clean
# 生成新的缓存
yum makecache
# 更新系统
yum update

注意:尤其是最后一条yum update命令,一般会需要较长时间,中途不要中断!!!

2、卸载旧版docker

如果你的服务器或操作系统中已经安装有docker,需要先进行卸载,命令如下:

yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine \docker-selinux 

在安装docker这部分,可以参考这个链接进行:安装docker参考资料

3、配置Docker的yum库

配置过程依次执行以下命令:

# 首先需要安装yum工具
yum install -y yum-utils device-mapper-persistent-data lvm2
# 安装成功后,执行命令,配置Docker的yum源(更新为阿里云源,否则直连国外,如果你的服务器没有梯子,可能会导致拉取镜像失败):
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 更新yum,建立缓存
yum makecache fast

4、安装Docker

yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

5、启动和校验Docker

# 启动Docker
systemctl start docker# 停止Docker
systemctl stop docker# 重启
systemctl restart docker# 设置开机自启
systemctl enable docker# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps

6、配置镜像加速

这里以阿里云镜像加速为例。

6.1、注册阿里云账号

访问阿里云官网,并注册一个账号。阿里云官网:https://www.aliyun.com/

6.2、开通镜像服务

在阿里云的首页最上方,找到产品-容器-容器镜像服务 ACR,然后

在这里插入图片描述
点击后进入控制台:
在这里插入图片描述
首次可能需要选择立刻开通,然后进入控制台。

6.3、配置镜像加速

找到镜像工具下的镜像加速器:
在这里插入图片描述
页面向下滚动,即可找到配置的文档说明:
在这里插入图片描述
具体命令如下(如果不是以root身份登录的,则需要在每个命令前追加sudo ):

# 创建目录
mkdir -p /etc/docker# 复制内容,注意把其中的镜像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF# 重新加载配置
systemctl daemon-reload# 重启Docker
systemctl restart docker

二、部署php+mysql+nginx环境

先说一下大概的思路:先创建默认的容器,并从容器中拷贝出必要的配置文件,然后再根据实际需求将容器中相关的目录和文件映射到宿主机上,并安装对应的扩展,最后使用docker compose实现一键创建。

1、准备目录结构

为了使docker能够按照我们的需求运行,我们需要将docker容器中的一些特殊目录和文件映射到宿主机上,以便我们修改配置、拷贝工程等操作,这里按本人的习惯组织目录结构,具体目录结构如下:

/
|- alidata|- server|- mysql|- conf|- data|- init|- nginx|- cert|- conf.d|- php|- conf|- conf.d|- wwwroot|- logs|- mysql|- nginx|- php

对上述目录结构进行一个简短说明

  • 在根目录下创建/alidata目录,用于存放docker容器映射出来的各种目录和文件;
  • 所有的容器运行所需的目录和文件都存放在/alidata/server目录下;
  • 所有的日志文件都存放在/alidata/logs目录下;
  • 所有的工程运行代码都存放在/alidata/wwwroot目录下。
  • /alidata/server/mysql/conf目录存放mysql配置文件;
  • /alidata/server/mysql/data目录存放mysql数据文件;
  • /alidata/server/mysql/init目录存放mysql初始化脚本;
  • /alidata/server/nginx/cert目录存放https证书;
  • /alidata/server/nginx/conf.d目录存放nginx单个网站的配置文件(子配置文件);
  • /alidata/server/nginx/目录存放nginx.conf配置文件;
  • /alidata/server/php/conf目录存php配置文件;
  • /alidata/server/php/conf/conf.d目录存php的Sodium 扩展的配置文件。

按照上述目录结构常见文件夹:

mkdir -p /alidata/server/mysql/conf
mkdir -p /alidata/server/mysql/data
mkdir -p /alidata/server/mysql/initmkdir -p /alidata/server/nginx/cert
mkdir -p /alidata/server/nginx/conf.dmkdir -p /alidata/server/php/conf/conf.dmkdir -p /alidata/wwwrootmkdir -p /alidata/logs/mysql
mkdir -p /alidata/logs/nginx
mkdir -p /alidata/logs/php

2、拉取镜像

由于这个环境是准备跑WordPress的,所以php选的7.4.27-fpm版本,而mysql和nginx都是最新版。

# 拉取nginx镜像
docker pull nginx# 拉取mysql镜像
docker pull mysql# 拉取php镜像
docker pull php:7.4.27-fpm# 查看镜像下载情况
docker images

如果能够看到以下显示,则表示拉取成功
在这里插入图片描述

3、运行容器并从中拷贝出需要的配置文件

在阅读下面的内容时需要注意拷贝的到底是文件还是文件夹!!!

  • 运行PHP容器
# 启动php容器并在后台运行
docker run -d --name php-fpm -p 9000:9000  php:7.4.27-fpm# 查看运行情况
docker ps -a

如果能够看到以下效果代表php容器启动成功
在这里插入图片描述

# 通过docker cp命令将php配置文件拷贝到宿主机对应目录,注意,这里我使用的php容器的名称,如果在上面docker run命令指定的名称不是php-fpm需要替换成对应的容器名称
# 将php容器中的/usr/local/etc/php/conf.d/目录下的所有文件,拷贝到宿主机的/alidata/server/php/conf/conf.d/目录下
docker cp php-fpm:/usr/local/etc/php/conf.d/* /alidata/server/php/conf/conf.d
# 将php容器中的/usr/local/etc/php/php.ini-production文件,拷贝到宿主机的/alidata/server/php/conf/目录下,并改名为php.ini
docker cp php-fpm:/usr/local/etc/php/php.ini-production /alidata/server/php/conf/php.ini# 配置文件拷贝完毕,停止并移除php容器
docker stop php-fpm
docker rm php-fpm
  • 运行nginx容器
# 启动nginx容器并在后台运行
docker run 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • testRigor-基于人工智能驱动的无代码自动化测试平台
  • 漏洞复现-路由器TOTOLINK-A6000R-RCE
  • 【vue2+elementui】记录el-upload文件上传时调接口传参的几种情况
  • python爬取某财富网
  • windows go grpc
  • 深入浅出大模型:LangChain详解——打造你的自定义Chain与异步API
  • 使用安卓手机安装Kali Linux
  • 基于微信小程序的高校大学生信息服务平台设计与实现
  • 未来不会使用 AI 的人真的会被淘汰吗?
  • iptables和firewalld的区别以及用法
  • 【Golang 面试 - 基础题】每日 5 题(七)
  • Python实战——轻松实现动态网页爬虫(附详细源码)
  • Python 如何创建和操作矩阵?
  • ffmpeg将视频转换成图片
  • 【全面介绍下Gitea,什么是Gitea?】
  • 收藏网友的 源程序下载网
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • C++入门教程(10):for 语句
  • co.js - 让异步代码同步化
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • node和express搭建代理服务器(源码)
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • Vue.js源码(2):初探List Rendering
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 初探 Vue 生命周期和钩子函数
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (第30天)二叉树阶段总结
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (三)SvelteKit教程:layout 文件
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (转)jdk与jre的区别
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • *2 echo、printf、mkdir命令的应用
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .NET Core跨平台微服务学习资源
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .net mvc部分视图
  • .NET设计模式(11):组合模式(Composite Pattern)
  • .Net中间语言BeforeFieldInit
  • @html.ActionLink的几种参数格式
  • @PostConstruct 注解的方法用于资源的初始化
  • @SuppressWarnings(unchecked)代码的作用