”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 使用 Docker 在本地运行 WordPress!

使用 Docker 在本地运行 WordPress!

发布于2024-11-02
浏览:457

在本地系统上安装 WordPress 有很多步骤。您需要安装 PHP、MySQL、服务器等。值得庆幸的是,有一种更简单的本地安装 WordPress 的方法,这一切都归功于 Docker!方法如下!

步骤

⚠️ 在继续之前,请确保您已经安装了 Docker。

第1步:创建一个新目录

首先,我们需要为您的项目创建一个新的文件夹/目录。在您希望的任何位置创建它并从终端打开/指向它。

mkdir my-wordpress-blog
cd my-wordpress-blog

第 2 步:打开代码编辑器

接下来我们将创建一些文件和文件夹。最简单的方法是打开您最喜欢的代码编辑器。我的是 Visual Studio Code,可以从终端这样打开:

code .

第 3 步:创建 Dockerfile

使用代码编辑器创建第一个名为 Dockerfile 的文件。在文件内,粘贴以下行:

FROM php:7.4-apache

RUN docker-php-ext-install mysqli

但这有什么作用?

嗯,Dockerfile 基本上是一个文件,它提供了如何创建“图像”(基本上是一个蓝图)的说明,该“图像”将用于创建容器,在本例中,该容器将容纳我们的 WordPress 网站。

这个特定的 Dockerfile 的作用基本上是:

  • 使用 Apache 和 PHP 映像作为基础。这意味着我们的容器将安装 Apache 服务器和 PHP。

  • 安装 PHP 扩展 mysqli。这是 WordPress 连接到 MySQL 数据库所需的扩展。

步骤 4:创建 Docker Compose 文件

接下来,我们将创建一个名为 docker-compose.yml 的新文件。将以下内容粘贴到该文件中:

services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - ./wordpress:/var/www/html
    ports:
      - "8080:80"

  db:
    image: mysql
    container_name: my-db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: password1
      MYSQL_DATABASE: wordpress

那么,这是做什么的?

docker-compose 文件是一个向 Docker 提供有关如何同时创建和运行多个容器的说明的文件。

在我们的例子中,我们的文件将创建并运行 2 个容器:

  1. “网络”容器:这将是我们的 WordPress 网站所在的位置。它将根据我们之前创建的 Dockerfile 创建一个容器。它还将复制我们网站的内容,我们将在下一步中下载这些内容。

  2. MySQL 服务器。这就是我们的数据所在的地方。如果您想使用 MariaDB,请将 image: mysql 替换为 image: mariadb.

第5步:下载WordPress

现在我们已经有了完整堆栈的蓝图,是时候添加一些内容了。我们将前往 WordPress 官方网站并下载 WordPress 文件。

下载应该需要几秒钟,然后它将下载一个 ZIP 文件。

zip 文件应包含一个名为“wordpress”的文件夹。继续将其提取到您的驱动器上。

第 6 步:将 Wordpress 目录移至您的项目

从 ZIP 文件中提取 WordPress 文件夹后,继续将该文件夹移至您的项目。

完成此操作后,项目根目录下的文件应如下所示:

? WordPress
? docker-compose.yml
? Dockerfile

如果 WordPress 文件夹不是“wordpress”,您可以继续重命名它。

第 7 步:构建容器

现在一切准备就绪,我们可以运行我们的网站了。首先,我们需要从 Dockerfile 构建“web”容器的镜像。为此,请从 Docker Compose 运行构建命令:

docker compose build

这应该需要几秒钟才能完成,并且在您的终端中应该如下所示:

Run WordPress locally using Docker!

第 8 步:运行容器

构建成功完成后,您现在可以运行网站。为此,我们使用 Docker Compose 中的 up 命令:

docker compose up -d

运行时,您的终端应如下所示:

Run WordPress locally using Docker!

那么刚才发生了什么?让我们讨论一些技术细节:

我们刚刚所做的是运行两个容器:一个名为“web”,用于我们的 WordPress 网站,另一个名为“db”,其中包含我们的 MySQL 数据库。然后我们使用 Docker Compose 中的命令来方便地同时运行两个容器。

因为这两个容器运行在同一个Compose文件下,所以它们运行在同一个“网络”下。这意味着它们是相互连接的。因此,例如,当您需要从Web容器连接到数据库时,执行此操作的URL是http://db:3306(因为数据库容器的名称是db)。我们在设置网站时需要这个。

第 9 步:设置您的网站

几秒钟后,您的网站应该启动并运行。您可以通过在浏览器中打开此网址来访问它:

http://localhost:8080

打开后,您应该看到以下屏幕:

Run WordPress locally using Docker!

选择语言并单击继续。

系统会要求您提供数据库凭据。添加这些:

  • 数据库名称:wordpress
  • 用户名:root
  • 密码:密码1
  • 数据库主机:db

添加这些后,您可以继续运行安装:

Run WordPress locally using Docker!

现在添加您的网站详细信息。在这里,系统会询问您网站的详细信息,例如网站名称、用户名、密码等。在此添加您喜欢的内容:

Run WordPress locally using Docker!

单击“安装 WordPress”。

完成后,您就可以开始了! ?

Run WordPress locally using Docker!

单击“登录”。您将看到一个登录屏幕:

Run WordPress locally using Docker!

添加您在设置过程中指定的凭据。

田田!就是这样! ?

登录后,您将看到仪表板:

Run WordPress locally using Docker!

您可以在这里撰写文章、创建新页面、根据自己的喜好自定义您的网站等等。这就是 WordPress 如此伟大的原因!

点击右上角您的网站名称即可转到实际网站:

Run WordPress locally using Docker!

这是您在本地启动和运行的网站,配有方便的仪表板,可以在此处访问:

http://localhost:8080/wp-admin/

成功!

享受编辑您的新 WordPress 博客的乐趣!

版本声明 本文转载于:https://dev.to/savvasstephnds/run-wordpress-locally-using-docker-5bk2?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 编译器报错“usr/bin/ld: cannot find -l”解决方法
    编译器报错“usr/bin/ld: cannot find -l”解决方法
    错误:“ usr/bin/ld:找不到-l “ 此错误表明链接器在链接您的可执行文件时无法找到指定的库。为了解决此问题,我们将深入研究如何指定库路径并将链接引导到正确位置的详细信息。添加库搜索路径的一个可能的原因是,此错误是您的makefile中缺少库搜索路径。要解决它,您可以在链接器命令中添加...
    编程 发布于2025-05-22
  • 如何使用组在MySQL中旋转数据?
    如何使用组在MySQL中旋转数据?
    在关系数据库中使用mySQL组使用mySQL组进行查询结果,在关系数据库中使用MySQL组,转移数据的数据是指重新排列的行和列的重排以增强数据可视化。在这里,我们面对一个共同的挑战:使用组的组将数据从基于行的基于列的转换为基于列。 Let's consider the following ...
    编程 发布于2025-05-22
  • 如何使用Python的请求和假用户代理绕过网站块?
    如何使用Python的请求和假用户代理绕过网站块?
    如何使用Python的请求模拟浏览器行为,以及伪造的用户代理提供了一个用户 - 代理标头一个有效方法是提供有效的用户式header,以提供有效的用户 - 设置,该标题可以通过browser和Acterner Systems the equestersystermery和操作系统。通过模仿像Chro...
    编程 发布于2025-05-22
  • eval()vs. ast.literal_eval():对于用户输入,哪个Python函数更安全?
    eval()vs. ast.literal_eval():对于用户输入,哪个Python函数更安全?
    称量()和ast.literal_eval()中的Python Security 在使用用户输入时,必须优先确保安全性。强大的Python功能Eval()通常是作为潜在解决方案而出现的,但担心其潜在风险。 This article delves into the differences betwee...
    编程 发布于2025-05-22
  • 如何在Java字符串中有效替换多个子字符串?
    如何在Java字符串中有效替换多个子字符串?
    在java 中有效地替换多个substring,需要在需要替换一个字符串中的多个substring的情况下,很容易求助于重复应用字符串的刺激力量。但是,对于大字符串或使用许多字符串时,这可能是降低的。 利用正则表达式Example UsageConsider a scenario where y...
    编程 发布于2025-05-22
  • `console.log`显示修改后对象值异常的原因
    `console.log`显示修改后对象值异常的原因
    foo = [{id:1},{id:2},{id:3},{id:4},{id:id:5},],]; console.log('foo1',foo,foo.length); foo.splice(2,1); console.log('foo2', foo, foo....
    编程 发布于2025-05-22
  • 如何使用Depimal.parse()中的指数表示法中的数字?
    如何使用Depimal.parse()中的指数表示法中的数字?
    在尝试使用Decimal.parse(“ 1.2345e-02”中的指数符号表示法表示的字符串时,您可能会遇到错误。这是因为默认解析方法无法识别指数符号。 成功解析这样的字符串,您需要明确指定它代表浮点数。您可以使用numbersTyles.Float样式进行此操作,如下所示:[&& && && ...
    编程 发布于2025-05-22
  • 如何解决由于Android的内容安全策略而拒绝加载脚本... \”错误?
    如何解决由于Android的内容安全策略而拒绝加载脚本... \”错误?
    Unveiling the Mystery: Content Security Policy Directive ErrorsEncountering the enigmatic error "Refused to load the script..." when deployi...
    编程 发布于2025-05-22
  • 为什么HTML无法打印页码及解决方案
    为什么HTML无法打印页码及解决方案
    无法在html页面上打印页码? @page规则在@Media内部和外部都无济于事。 HTML:Customization:@page { margin: 10%; @top-center { font-family: sans-serif; font-weight: bo...
    编程 发布于2025-05-22
  • \“(1)vs.(;;):编译器优化是否消除了性能差异?\”
    \“(1)vs.(;;):编译器优化是否消除了性能差异?\”
    答案: 在大多数现代编译器中,while(1)和(1)和(;;)之间没有性能差异。编译器: perl: 1 输入 - > 2 2 NextState(Main 2 -E:1)V-> 3 9 Leaveloop VK/2-> A 3 toterloop(next-> 8 last-> 9 ...
    编程 发布于2025-05-22
  • 如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    从python import codecs import codecs import codecs 导入 text = codecs.decode('这狗\ u0001f602'.encode('utf-8'),'utf-8') 印刷(文字)#带有...
    编程 发布于2025-05-22
  • 您如何在Laravel Blade模板中定义变量?
    您如何在Laravel Blade模板中定义变量?
    在Laravel Blade模板中使用Elegance 在blade模板中如何分配变量对于存储以后使用的数据至关重要。在使用“ {{}}”分配变量的同时,它可能并不总是最优雅的解决方案。幸运的是,Blade通过@php Directive提供了更优雅的方法: $ old_section =“...
    编程 发布于2025-05-22
  • Python元类工作原理及类创建与定制
    Python元类工作原理及类创建与定制
    python中的metaclasses是什么? Metaclasses负责在Python中创建类对象。就像类创建实例一样,元类也创建类。他们提供了对类创建过程的控制层,允许自定义类行为和属性。在Python中理解类作为对象的概念,类是描述用于创建新实例或对象的蓝图的对象。这意味着类本身是使用类关...
    编程 发布于2025-05-22
  • 如何在GO编译器中自定义编译优化?
    如何在GO编译器中自定义编译优化?
    在GO编译器中自定义编译优化 GO中的默认编译过程遵循特定的优化策略。 However, users may need to adjust these optimizations for specific requirements.Optimization Control in Go Compi...
    编程 发布于2025-05-22
  • Go语言垃圾回收如何处理切片内存?
    Go语言垃圾回收如何处理切片内存?
    在Go Slices中的垃圾收集:详细的分析在GO中,Slice是一个动态数组,引用了基础阵列。使用切片时,了解垃圾收集行为至关重要,以避免潜在的内存泄漏。考虑使用slice使用slice的以下实现:字符串{ R:=(*Q)[0] *q =(*q)[1:len(*q)] 返回...
    编程 发布于2025-05-22

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3