Skip to content

部署 Apache

快速启动

bash
docker run -d \
  --name apache \
  --restart unless-stopped \
  -p 80:80 \
  -v $(pwd)/html:/usr/local/apache2/htdocs \
  httpd:alpine

挂载自定义配置

bash
# 先获取默认配置
docker run --rm httpd:alpine cat /usr/local/apache2/conf/httpd.conf > ./httpd.conf

# 启动并挂载配置
docker run -d \
  --name apache \
  -p 80:80 \
  -v $(pwd)/html:/usr/local/apache2/htdocs:ro \
  -v $(pwd)/httpd.conf:/usr/local/apache2/conf/httpd.conf:ro \
  httpd:alpine

常用配置

apache
# httpd.conf 关键配置

# 开启 mod_rewrite(URL 重写)
LoadModule rewrite_module modules/mod_rewrite.so

# 虚拟主机
<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /usr/local/apache2/htdocs

    <Directory /usr/local/apache2/htdocs>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted

        # SPA 支持
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule . /index.html [L]
    </Directory>

    # 日志
    ErrorLog /proc/self/fd/2
    CustomLog /proc/self/fd/1 combined
</VirtualHost>

Apache + PHP

yaml
services:
  apache:
    image: php:8.3-apache
    restart: unless-stopped
    ports:
      - "80:80"
    volumes:
      - ./src:/var/www/html
    environment:
      APACHE_DOCUMENT_ROOT: /var/www/html

  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: secret
    volumes:
      - mysql-data:/var/lib/mysql

volumes:
  mysql-data:

Dockerfile(含 PHP 扩展)

dockerfile
FROM php:8.3-apache

# 启用 URL 重写
RUN a2enmod rewrite

# 安装 PHP 扩展
RUN docker-php-ext-install pdo_mysql mysqli

# 复制应用
COPY . /var/www/html/

# 设置权限
RUN chown -R www-data:www-data /var/www/html

EXPOSE 80

总结

Apache 在 Docker 中常用于:

  • 静态文件服务:使用 httpd:alpine
  • PHP 应用:使用 php:8.x-apache
  • 遗留系统迁移:兼容旧版 .htaccess 配置

现代新项目通常优先选择 Nginx,性能更好,配置更简洁。