Appearance
部署 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,性能更好,配置更简洁。