Docker - Apache 设置



Apache,也称为 Apache HTTP 服务器,是全球最常用的 Web 服务器之一。它是开源的、非常强大的,并且可以根据用户的需求进行调整,这就是为什么它被数百万个网站使用的原因。但是,在不同的环境中设置和管理 Apache 可能是一个挑战,尤其是在依赖项和系统配置方面。

Docker 通过提供一个标准化的环境来容器化 Apache,从而解决了这个问题,该环境可以轻松地在各种平台上部署、管理和扩展!本章将引导您完成 Apache HTTP 容器化的过程,以便您可以在一个更隔离的环境中运行它。

Apache HTTP 服务器容器化的前提条件

在开始本教程之前,请确保您拥有以下内容:

  • Docker 基础知识 - 如果你已经了解镜像、容器和 Dockerfile,那么理解本章会更容易。
  • Apache HTTP 服务器基础知识 - 您至少应该了解一些关于 Apache 配置和如何管理简单服务器的信息。
  • 已安装 Docker - 您的 Docker 是否正在运行?您可以从 Docker 官方网站 下载它。
  • 文本编辑器 - 任何文本编辑器,如 VSCode、Sublime Text,甚至 Notepad++ 都可以使用。
  • 命令行界面 (CLI) - 您应该能够在命令行界面中输入命令。

设置 Apache 项目

在您可以将 Apache HTTPD 容器化之前,您需要在本地机器上运行一个简单的 Apache 项目。此项目将用作服务器 Docker 镜像的基础。

步骤 1. 创建项目目录

首先创建一个文件夹,用于保存与您的 Apache 项目相关的所有文件。这些文件可能包括配置设置以及 Web 内容。

$ mkdir apache-docker
$ cd apache-docker
Setting up an Apache Project

步骤 2. 添加基本的 HTML 文件

在项目目录中,创建一个 Apache 可以使用的HTML 文件,如下所示。有了此文件,一旦启动服务器,我们就可以检查服务器是否正常运行。

$ touch index.html

在您的文本编辑器中打开index.html文件并添加一些基本的 HTML 内容:

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Welcome to Apache</title>
   </head>
   <body>
      <h1>Hello, World! Welcome to your Apache server.</h1>
   </body>
</html>

添加内容后保存文件。

步骤 3. 添加 Apache 配置文件

为了 Apache 对内容进行自定义服务,您可以包含一个配置文件。在您的项目文件夹中创建一个名为“conf”的目录,您将在其中保存此配置。

$ mkdir conf

在 conf 目录中,创建一个名为httpd.conf的新文件:

$ touch conf/httpd.conf
Add an Apache Configuration File

httpd.conf文件将用于配置 Apache 服务器。现在,您可以添加以下基本配置:

ServerName localhost

<VirtualHost *:80>
   DocumentRoot "/usr/local/apache2/htdocs"
   <Directory "/usr/local/apache2/htdocs">
      AllowOverride None
      Require all granted
   </Directory>

</VirtualHost>

此配置在端口 80 上设置虚拟主机,指定将提供 HTML 文件的文档根目录。

步骤 4. 目录结构概述

您的项目目录应如下所示:

apache-docker/

├── conf/

│   └── httpd.conf

└── index.html

这就是您为 Apache 项目设置基础结构的方式。稍后,我们将使用它来创建一个 Dockerfile,构建一个 Docker 镜像,然后在一个容器化环境中运行 Apache 服务器。

在本地运行 Apache 服务器

在将本地 Apache HTTPD 服务器容器化之前,我们希望运行它,以便确保一切设置正确。我们只是想测试一下我们的 Apache 配置和项目文件是否按预期工作,独立于 Docker。

步骤 1. 安装 Apache HTTP 服务器

您可以在您的机器上安装 Apache。根据操作系统,您可以使用以下命令之一。

在 Ubuntu / Debian 上

$ sudo apt-get update

$ sudo apt-get install apache2

在 CentOS / RHEL 上

$ sudo yum install httpd

在 macOS 上(使用 Homebrew)

$ brew install httpd
Install Apache HTTP Server

步骤 2. 启动 Apache 服务器

安装 Apache 后,您可以启动服务器,以便它可以提供项目目录中的内容。

在 Ubuntu / Debian 上

$ sudo systemctl start apache2

在 CentOS/RHEL 上

$ sudo systemctl start httpd

在 macOS 上

$ sudo apachectl start

步骤 3. 配置文档根目录

默认情况下,它会从预定义的文档根目录提供文件。现在,让我们讨论如何配置 Apache 以从我们的项目目录 apache-docker 提供内容,以测试我们项目的设置。

使用文本编辑器打开 Apache 配置文件。默认配置通常是httpd.confapache2.conf。在 Ubuntu/Debian 上,它可以是/etc/apache2/apache2.conf,而在 CentOS/RHEL 上,它可能位于/etc/httpd/conf/httpd.conf。找到 DocumentRoot 指令,并将其更新为指向您的项目目录。例如:

DocumentRoot "/path/to/apache-docker"

<Directory "/path/to/apache-docker">

   AllowOverride None
   Require all granted

</Directory>

/path/to/apache-docker替换为您的项目目录的实际路径。

步骤 4. 重启 Apache

更新配置后,您需要重新启动 Apache 以应用更改。

在 Ubuntu/Debian 上

$ sudo systemctl restart apache2

在 CentOS/RHEL 上

$ sudo systemctl restart httpd

在 macOS 上

$ sudo apachectl restart
Restart Apache

步骤 5. 访问 Apache 服务器

您现在可以打开您的 Web 浏览器并访问https://127.0.0.1。您应该会看到您之前创建的 HTML 页面,其中显示“Hello, World!”消息。

Display Hello, World

创建 Dockerfile

现在我们已经运行了本地 Apache HTTPD 服务器,让我们尝试将此服务器 Docker 化,以便它可以在容器上运行。为此,我们需要构建一个包含应用程序及其依赖项的 Docker 镜像。要构建 Docker 镜像,我们需要一个包含所有相关指令的 Dockerfile。

Dockerfile只是一个文本文件,其中包含Docker守护程序用于构建镜像的一组指令。Dockerfile中的每个指令都会在镜像中创建一个可重用的层。然后,我们可以使用Docker build命令使用此Dockerfile构建镜像。

步骤 1. 创建 Dockerfile

在您的项目目录中创建一个名为Dockerfile的新文件。

$ touch Dockerfile

步骤 2. 定义基础镜像

Dockerfile中的第一条指令是定义基础镜像。由于我们的目标是在Docker容器上运行Apache HTTPD服务器,因此我们可以使用Dockerhub提供的官方Apache镜像,使用以下指令:

FROM httpd:latest

这将拉取官方 httpd 镜像的最新版本,其中已经包含预配置的 Apache HTTP 服务器。

步骤 3. 将项目文件复制到容器中

现在,让我们将所有项目文件复制到 Docker 容器中。在 Docker 容器中,Apache Web 服务器希望 HTML 文件位于/usr/local/apache2/htdocs/目录中。我们可以使用COPY指令将index.html文件复制到此目录。

COPY ./index.html /usr/local/apache2/htdocs/

步骤 4. 复制 Apache 配置文件

接下来,您还可以复制包含自定义配置的httpd.conf文件。Apache Web 服务器希望配置文件位于/usr/local/apache2/conf/目录中。

COPY ./conf/httpd.conf /usr/local/apache2/conf/httpd.conf

步骤 5. 公开必要的端口

Apache Web 服务器默认情况下监听端口 80 以接收所有 HTTP 请求。我们可以在 Dockerfile 中编写一条指令,以便从容器外部访问此端口。

EXPOSE 80

请注意,此指令实际上并没有将端口发布到您的主机机器,但它允许公开端口。

步骤 6. 最终 Dockerfile

最终的 Dockerfile 如下所示:

# Use the official Apache HTTPD image as the base

FROM httpd:latest

# Copy the HTML files into the Apache document root

COPY ./index.html /usr/local/apache2/htdocs/

# Copy the custom Apache configuration file

COPY ./conf/httpd.conf /usr/local/apache2/conf/httpd.conf

# Expose port 80 to allow external access

EXPOSE 80

步骤 7. 目录结构概述

现在您的项目目录应如下所示:

apache-docker/

├── conf/

│   └── httpd.conf

├── Dockerfile

└── index.html

构建 Apache 镜像

现在我们已经创建了 Dockerfile,我们可以继续构建 Docker 镜像。

步骤 1. 构建 Docker 镜像

在终端中导航到您的项目目录 (apache-docker) 并运行以下命令:

$ docker build -t my-apache-image .
Building the Apache Image

在上面的命令中,docker build告诉 Docker 守护程序从 Dockerfile 创建一个镜像。接下来,-t my-apache-image使用名称my-apache-image标记镜像。最后的. 指定构建上下文。

步骤 2. 验证镜像

您可以通过列出主机机器上的所有 Docker 镜像来验证镜像构建。

$ docker images
Verify the Image

运行 Apache Docker 容器

让我们运行与该 Docker 镜像关联的 Docker 容器。Docker run 命令将创建一个具有隔离环境的容器,其中 Apache 服务器将在独立于本地机器配置的环境中运行。

步骤 1. 运行 Docker 容器

您可以使用以下命令启动容器。

$ docker run -d -p 8080:80 --name my-apache-container my-apache-image
Run the Docker Container

以下是命令的各个部分的作用:

  • docker run从镜像创建并启动一个新容器。
  • -d在分离模式下运行容器,这意味着它在后台运行。
  • -p 8080:80将容器内部的端口 80(Apache 正在监听的端口)映射到主机机器上的端口 8080。如果端口 8080 已经在使用中,您可以选择不同的主机端口。
  • --name my-apache-container为正在运行的容器分配一个名称,使其更容易管理。
  • my-apache-image指定要用于容器的镜像。

步骤 2. 访问 Apache 服务器

现在您的容器正在运行,您可以打开网页浏览器并导航到https://127.0.0.1:8080,查看您之前创建的“Hello, World!”页面。

结论

您已成功将 Apache HTTP 服务器容器化,创建了 Docker 镜像,并在 Docker 容器内运行它。这种方法为跨不同环境的服务器提供了可移植性、一致性和易于部署的优势。您可以轻松扩展您的设置或与他人共享,也可以将其集成到更大的基于 Docker 的基础架构中。

关于 Apache HTTP 服务器容器化的常见问题 (FAQ)

关于 Apache HTTP 服务器容器化,有一些非常常见的疑问 (FAQ),本节将简要解答这些问题。

1. 如何在 Docker 中配置 Apache HTTPD 进行反向代理?

通过定义虚拟主机并使用 ProxyPass 指令将请求转发到后端服务器,从而在反向代理模式下配置 Apache HTTPD。正确映射后端应用程序的端口和网络配置。

2. 如何在 Docker 中的 Apache HTTPD 中处理 SSL/TLS 证书?

将 SSL/TLS 证书放置到挂载到容器中的卷中。设置 Apache HTTPD 以使用这些证书。在讨论如何在 Docker 设置中处理证书以实现自动证书管理时,像 Let's Encrypt 这样的工具是个不错的选择。

3. 使用 Docker 中的 Apache HTTPD 的最佳实践是什么?

使用精简的 Apache HTTPD 镜像,优化配置文件,并利用 Docker 的网络功能。提供通过环境变量重新配置的能力。添加适当的错误处理和日志记录。确保 Apache HTTPD 及其依赖项保持最新。

广告