1. 安装 Docker


在开始使用 Docker 安装 Apache 之前,你需要确保 Docker 已经安装在你的系统上。不同操作系统的安装方法不同,下面以常见的 Ubuntu 系统为例:


收起

bash

# 更新系统软件包列表
sudo apt update
# 安装 Docker 依赖包
sudo apt install apt-transport-https ca-certificates curl software-properties-common
# 添加 Docker 的官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加 Docker 软件源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 更新软件包列表以包含 Docker 软件源
sudo apt update
# 安装 Docker Engine
sudo apt install docker-ce docker-ce-cli containerd.io
# 验证 Docker 是否安装成功
sudo docker run hello-world

2. 拉取 Apache 镜像


你可以从 Docker Hub 上拉取官方的 Apache 镜像,执行以下命令:


收起

bash

sudo docker pull httpd:latest

3. 运行 Apache 容器并进行端口和文件夹映射


你可以使用 docker run 命令来启动一个新的 Apache 容器,同时完成端口和文件夹的映射。

端口映射


Apache 默认使用 80 端口提供服务,我们可以将容器内的 80 端口映射到宿主机的某个端口(例如 8080),这样就可以通过宿主机的 8080 端口访问 Apache 服务。

文件夹映射


将宿主机的某个文件夹(例如 /home/user/website)映射到容器内的 Apache 文档根目录 /usr/local/apache2/htdocs,这样就可以方便地在宿主机上修改网站文件。


运行以下命令启动容器:


收起

bash

sudo docker run -d \
  -p 8080:80 \
  -v /home/user/website:/usr/local/apache2/htdocs \
  --name my-apache-server \
  httpd:latest


参数解释:


  • -d:表示在后台以守护进程模式运行容器。

  • -p 8080:80:将宿主机的 8080 端口映射到容器内的 80 端口。

  • -v /home/user/website:/usr/local/apache2/htdocs:将宿主机的 /home/user/website 文件夹映射到容器内的 /usr/local/apache2/htdocs 文件夹。

  • --name my-apache-server:为容器指定一个名称,方便后续管理。

  • httpd:latest:指定要使用的 Docker 镜像。

4. 验证配置


  • 检查容器是否运行


收起

bash

sudo docker ps


如果看到 my-apache-server 容器正在运行,则表示容器启动成功。


  • 访问 Apache 服务
    在浏览器中输入 http://localhost:8080(如果你是在远程服务器上安装的 Apache,将 localhost 替换为服务器的 IP 地址),如果能看到 Apache 的默认页面,则说明端口映射配置成功。

  • 验证文件夹映射
    在宿主机的 /home/user/website 文件夹中创建一个 index.html 文件,例如:


收起

bash

echo "<h1>Hello, Docker Apache!</h1>" > /home/user/website/index.html


刷新浏览器页面,应该能看到新创建的页面内容,这表明文件夹映射配置成功。

5. 其他操作


  • 停止容器


收起

bash

sudo docker stop my-apache-server


  • 启动已停止的容器


收起

bash

sudo docker start my-apache-server


  • 删除容器


收起

bash

sudo docker rm my-apache-server

分享

在 Apache 配置文件中如何设置访问权限?

在 Apache 配置文件中设置访问权限主要是通过 <Directory><Location> 和 <Files> 等指令块来控制对特定目录、URL 路径和文件的访问。以下详细介绍不同场景下的设置方法:

基于目录设置访问权限(<Directory> 指令)


<Directory> 指令用于控制对特定目录及其子目录的访问。你可以在 Apache 主配置文件(如 /etc/apache2/apache2.conf 或 /etc/httpd/conf/httpd.conf)或者虚拟主机配置文件中添加相关配置。

示例 1:允许所有访问


收起

apache

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>


  • Options Indexes FollowSymLinksIndexes 表示如果该目录下没有 index.html 等默认首页文件,Apache 将显示目录列表;FollowSymLinks 允许 Apache 跟随符号链接。

  • AllowOverride None:禁止使用 .htaccess 文件覆盖此目录的配置。

  • Require all granted:允许所有客户端访问该目录。

示例 2:仅允许特定 IP 地址访问


收起

apache

<Directory "/var/www/private">
    Options -Indexes
    AllowOverride None
    Require ip 192.168.1.0/24
</Directory>


  • Options -Indexes:禁用目录列表功能。

  • Require ip 192.168.1.0/24:只允许 IP 地址在 192.168.1.0 - 192.168.1.255 范围内的客户端访问该目录。

示例 3:拒绝所有访问


收起

apache

<Directory "/var/www/secret">
    Options -Indexes
    AllowOverride None
    Require all denied
</Directory>


Require all denied 表示拒绝所有客户端访问该目录。

基于 URL 路径设置访问权限(<Location> 指令)


<Location> 指令用于控制对特定 URL 路径的访问,而不考虑文件在文件系统中的实际位置。

示例:限制对 /admin 路径的访问


收起

apache

<Location "/admin">
    Require ip 10.0.0.0/8
</Location>


此配置只允许 IP 地址在 10.0.0.0 - 10.255.255.255 范围内的客户端访问以 /admin 开头的 URL 路径。

基于文件设置访问权限(<Files> 指令)


<Files> 指令用于控制对特定文件的访问。

示例:限制对 .htpasswd 文件的访问


收起

apache

<Files ".htpasswd">
    Require all denied
</Files>


该配置拒绝所有客户端访问 .htpasswd 文件,以保护用户密码信息。

使用 .htaccess 文件设置访问权限


如果在 <Directory> 指令中设置了 AllowOverride All,则可以在目录下创建 .htaccess 文件来覆盖 Apache 主配置文件中的部分设置。

示例:使用 .htaccess 文件实现基本认证


  1. 创建一个包含用户名和加密密码的 .htpasswd 文件:


收起

bash

htpasswd -c /var/www/html/.htpasswd username


按照提示输入密码。


  1. 在 /var/www/html 目录下创建 .htaccess 文件,并添加以下内容:


收起

apache

AuthType Basic
AuthName "Restricted Area"
AuthUserFile /var/www/html/.htpasswd
Require valid-user


此配置将对 /var/www/html 目录下的所有文件和子目录启用基本认证,只有在 .htpasswd 文件中存在的用户才能访问。

配置生效


在修改完 Apache 配置文件或 .htaccess 文件后,需要重启 Apache 服务使配置生效:


  • 在 Ubuntu/Debian 系统上:


收起

bash

sudo systemctl restart apache2


  • 在 CentOS/RHEL 系统上:


收起

bash

sudo systemctl restart httpd