标签和各自的Dockerfile链接
-
2.2.3,centos-7(Centos-7/dockerfile) -
1.13.3,centos-6(Centos-6/dockerfile)
概述
Apache PHP(FastCGI)Web服务器,默认情况下仅加载一组最小的Apache模块。
该构建使用基本图像jdeathe/centos-ssh,因此继承了其功能,但默认情况下已禁用sshd 。当运行基于此图像的Docker容器时,主管用于启动Apache httpd守护程序。
图像变体
- Apache 2.4,PHP-CGI 5.4(FastCGI),PHP MEMCACH 2.2,PHP REDIS 2.2,ZEND OPCACHE 7.0-CENTOS-7
- Apache 2.2,PHP-CGI 5.3(FastCGI),PHP MEMCACHED 1.0,PHP REDIS 2.2,PHP APC 3.1-CENTOS-6
快速开始
为了生产使用,建议选择一个特定的发布标签,如示例所示。
从Docker Image jdeathe/centos-ssh-apache-php-fcgi上运行一个名为apache-php.1的容器。
$ docker run -d \\
--name apache-php.1 \\
-p 8080:80 \\
-e \"APACHE_SERVER_NAME=app-1.local\" \\
jdeathe/centos-ssh-apache-php-fcgi:2.2.3
请访问http://{{dock*e*r-*host}}:8080使用浏览器{{docker-host}}是您的Docker Server的主机名称,如果一切顺利,您都应该看到“ Hello,World!”页。
为了能够使用“ app-1.local”域名访问服务器,您需要在本地添加主机文件条目;因此,Docker主机的IP地址可以解决到名称“ App-1.local”。另外,您可以使用安装在容器中的elinks浏览器。
请注意,由于您正在使用来自标准端口80的站点的容器中的浏览器。
$ docker exec -it apache-php.1 \\
elinks http://app-1.*lo*ca*l
验证指定的容器的过程状态和健康。
$ docker ps -a \\
-f \"name=apache-php.1\"
验证命名容器的成功初始化。
$ docker logs apache-php.1
在第一次运行时,如果DocumentRoot Directory为空,则将使用示例应用程序脚本和App特定配置文件填充它。
apachectl命令可以如下访问。
$ docker exec -it apache-php.1 \\
apachectl -h
指示
跑步
要从此图像运行A Docker容器,您可以使用标准Docker命令,如下示例所示。另外,还有一个Docker-Compose示例。
为了生产使用,建议选择一个特定的发布标签,如示例所示。
使用环境变量
$ docker stop apache-php.1 && \\
docker rm apache-php.1; \\
docker run -d \\
--name apache-php.1 \\
--publish 8080:80 \\
--publish 9443:443 \\
--env \"APACHE_CUSTOM_LOG_LOCATION=/dev/stdout\" \\
--env \"APACHE_ERROR_LOG_LOCATION=/dev/stderr\" \\
--env \"APACHE_EXTENDED_STATUS_ENABLED=true\" \\
--env \"APACHE_LOAD_MODULES=env_module rewrite_module\" \\
--env \"APACHE_MOD_SSL_ENABLED=true\" \\
--env \"APACHE_SERVER_NAME=app-1.local\" \\
--env \"APACHE_SSL_PROTOCOL=All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1\" \\
--env \"PHP_OPTIONS_DATE_TIMEZONE=Europe/London\" \\
jdeathe/centos-ssh-apache-php-fcgi:2.2.3
环境变量
有可用的环境变量,允许操作员自定义运行容器。
enable_httpd_bootstrap&enable_httpd_wrapper
可能需要防止httpd-bootstrap和/或httpd-wrapper脚本的启动。例如,当使用从该Dockerfile构建的图像作为另一个Dockerfile的源时,您可以通过将ENABLE_HTTPD_WRAPPER设置为false通过将启动服务禁用。这样做的好处是减少最终容器中的运行过程数量。这是另一个用途是使用图像中安装的软件包,例如ab , curl , elinks , php-cli等。
apache_content_root
Apache DocumentRoot的服务用户和父目录的主目录默认为/var/www/app但在必要时可以使用APACHE_CONTENT_ROOT环境变量进行更改。
...
--env \"APACHE_CONTENT_ROOT=/var/www/app-1\" \\
...
apache_custom_log_location&apache_custom_log_format
可以使用APACHE_CUSTOM_LOG_LOCATION定义Apache CustomLog,以设置文件(或管道),位置和APACHE_CUSTOM_LOG_FORMAT以指定所需的LogFormat昵称。
...
--env \"APACHE_CUSTOM_LOG_LOCATION=/var/log/httpd/access_log\" \\
--env \"APACHE_CUSTOM_LOG_FORMAT=common\" \\
...
要设置相对于APACHE_CONTENT_ROOT文件路径,路径值应排除领先/ 。
...
--env \"APACHE_CUSTOM_LOG_LOCATION=var/log/httpd_access_log\" \\
...
apache_error_log_location&apache_error_log_level
可以使用APACHE_ERROR_LOG_LOCATION定义Apache Errorlog来设置文件(或管道),位置和APACHE_ERROR_LOG_LEVEL以指定所需的loglevel值。
...
--env \"APACHE_ERROR_LOG_LOCATION=/var/log/httpd/error_log\" \\
--env \"APACHE_ERROR_LOG_LEVEL=error\" \\
...
要设置相对于APACHE_CONTENT_ROOT文件路径,路径值应排除领先/ 。
...
--env \"APACHE_ERROR_LOG_LOCATION=var/log/httpd_error_log\" \\
...
apache_extended_status_enabled
变量APACHE_EXTENDED_STATUS_ENABLED允许您打开ExtendedStatus。默认情况下它会关闭,因为它对服务器的性能有影响,但是启用了它,您可以收集更多的统计信息。
...
--env \"APACHE_EXTENDED_STATUS_ENABLED=true\" \\
...
您可以使用来自容器上的elinks浏览器或使用watch和curl来监视状态随着时间的推移来查看Apache Server status的输出。以下命令显示了“ App-1.local”的APACHE_SERVER_NAME或APACHE_SERVER_ALIAS ,以1秒的间隔显示了服务器端口。
$ docker exec -it apache-php.1 \\
env TERM=xterm \\
watch -n 1 \\
-d \"curl -s \\
-H \'Host: app-1.local\' \\
http://127.**0*.0.1/server-status?auto\"
apache_header_x_service_uid
APACHE_HEADER_X_SERVICE_UID环境变量用于设置名为X-Service-UID的响应标头,该标题可让您识别服务于内容的容器。当您使用不同端口在单个主机上运行的许多容器,或者您正在运行群集并且需要识别内容所提供的宿主时,这很有用。如果该值包含占位符{{HOSTNAME}}则将其替换为系统hostname值。默认情况下,这是容器ID,但是可以使用--hostname docker create | run参数修改主机名。
...
--env \"APACHE_HEADER_X_SERVICE_UID={{HOSTNAME}}\" \\
...
apache_load_modules
默认情况下,图像加载了最小必需的Apache模块。为了加载其他模块,可以使用APACHE_LOAD_MODULES 。要加载mod_env和mod_rewrite apache模块,请使用相应的模块标识符。 IE env_module和rewrite_module 。
...
--env \"APACHE_LOAD_MODULES=env_module rewrite_module\"
...
apache_mod_ssl_enabled
默认情况下,SSL支持被禁用,但第二个端口(映射到8443)可用于通过上游SSL终止(SSL卸载)的流量。如果您希望容器直接支持SSL,请设置APACHE_MOD_SSL_ENABLED=true这将生成一个自签名证书,并将更新Apache以接受端口443上的流量。
$ docker stop apache-php.1 && \\
docker rm apache-php.1; \\
docker run -d \\
--name apache-php.1 \\
--publish 8080:80 \\
--publish 9443:443 \\
--env \"APACHE_SERVER_ALIAS=app-1\" \\
--env \"APACHE_SERVER_NAME=app-1.local\" \\
--env \"APACHE_MOD_SSL_ENABLED=true\" \\
jdeathe/centos-ssh-apache-php-fcgi:2.2.3
apache_mpm
使用APACHE_MPM可以设置Apache MPM。默认为FASTCGI图像的worker默认,不应更改此图像。
...
--env \"APACHE_MPM=worker\" \\
...
apache_run_user&apache_run_group
Apache进程由用户和组分别由APACHE_RUN_USER和APACHE_RUN_GROUP运行。
...
--env \"APACHE_RUN_GROUP=www-app\" \\
--env \"APACHE_RUN_USER=www-app\" \\
...
apache_public_directory
公共目录是相对于APACHE_CONTENT_ROOT的,它们共同构成了Apache DocumentRoot路径。默认值是public_html ,除非对应用程序的来源进行更改以包括替代公共目录,例如web或public ,否则不应更改。
...
--env \"APACHE_PUBLIC_DIRECTORY=web\" \\
...
apache_server_alias&apache_server_name
APACHE_SERVER_NAME和APACHE_SERVER_ALIAS环境变量分别用于设置VirtualHost ServerName和ServerAlias值。如果该值包含占位符{{HOSTNAME}}则将其替换为系统hostname值。默认情况下,这是容器ID,但是可以使用--hostname docker create | run参数修改主机名。
在下面的示例中,运行容器将响应主机名app-1.local或app-1 。
...
--env \"APACHE_SERVER_ALIAS=app-1\" \\
--env \"APACHE_SERVER_NAME=app-1.local\" \\
...
apache_ssl_certificate
APACHE_SSL_CERTIFICATE环境变量用于定义PEM编码的证书捆绑包。要制作兼容的证书捆绑包,请使用cat命令将证书文件组合在一起。
$ cat /usr/share/private/server-key.pem \\
/usr/share/certs/server-certificate.pem \\
/usr/share/certs/intermediate-certificate.pem \\
> /usr/share/certs/server-bundle.pem
如果不使用文件路径方法,建议使用PEM文件内容的base64编码。
注意: MAC OSX上的
base64命令将默认情况下编码一个无需线路断路的文件,但是如果使用Linux上的命令,则需要使用-w选项,以防止80个字符的包装行。 IEbase64 -w 0 -i {{certificate-path}}。
...
--env \"APACHE_SSL_CERTIFICATE=$(
base64 -i \"/usr/share/certs/server-bundle.pem\"
)\" \\
...
如果设置为有效的容器文件路径,则将从文件中读取值 – 这允许在与编排功能(例如Docker swarm Secrets)结合使用时将值牢固地设置。
...
--env \"APACHE_SSL_CERTIFICATE=/run/secrets/apache_ssl_certificate\" \\
...
apache_ssl_cipher_suite
使用APACHE_SSL_CIPHER_SUITE环境变量来定义适当的密码套件。默认的“中间”选择应适用于大多数使用对宽范围浏览器的支持。
参考:
- OpenSSL密码文档。
- Mozilla安全/服务器端TLS指南。
注意:值表是使用空间分离值以允许文档中的可读性;这是有效的语法,但是使用结肠分离器是建议的形式。
...
--env \"APACHE_SSL_CIPHER_SUITE=ECDHE-ECDSA-AES256-GCM-SHA384 \\
ECDHE-RSA-AES256-GCM-SHA384 ECDHE-ECDSA-CHACHA20-POLY1305 \\
ECDHE-RSA-CHACHA20-POLY1305 ECDHE-ECDSA-AES128-GCM-SHA256 \\
ECDHE-RSA-AES128-GCM-SHA256 ECDHE-ECDSA-AES256-SHA384 \\
ECDHE-RSA-AES256-SHA384 ECDHE-ECDSA-AES128-SHA256 \\
ECDHE-RSA-AES128-SHA256\" \\
...
apache_ssl_protocol
使用APACHE_SSL_PROTOCOL环境变量来定义支持的协议。默认协议适用于大多数“中间”用例,但是您可能需要限制例如TLS版本支持。
...
--env \"APACHE_SSL_PROTOCOL=All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1\" \\
...
apache_system_user
使用APACHE_SYSTEM_USER环境变量来定义自定义服务用户名。
...
--env \"APACHE_SYSTEM_USER=app-1\" \\
...
php_options_date_timezone
容器和PHP应用程序的默认时区是UTC,但是操作员可以使用PHP_OPTIONS_DATE_TIMEZONE变量设置合适的时区。价值应该是时区标识符,例如UTC或欧洲/伦敦。有效标识符列表可在受支持时区的PHP列表中找到。
为了为英国设置时区并说明英国夏季时间:您将使用:
...
--env \"PHP_OPTIONS_DATE_TIMEZONE=Europe/London\" \\
...
php_options_session_name,php_options_session_save_handler&php_options_session_sever_save_path
使用PHP_OPTIONS_SESSION_SAVE_HANDLER和PHP_OPTIONS_SESSION_SAVE_PATH一起配置php以使用替代session.save_handler和session.save_path 。例如,如果您在默认端口6379上的主机redis-server上运行的redis服务器,以下配置将允许将会话数据存储在REDIS中,从而可以在多个PHP容器之间共享会话数据。
使用PHP_OPTIONS_SESSION_NAME可以定义会话名 – 否则使用默认名称“ phpsessid”。
...
--env \"PHP_OPTIONS_SESSION_NAME=APPSESSID\" \\
--env \"PHP_OPTIONS_SESSION_SAVE_HANDLER=redis\" \\
--env \"PHP_OPTIONS_SESSION_SAVE_PATH=redis-server:6379\" \\
...
如果使用文件处理程序,则要设置相对于APACHE_CONTENT_ROOT保存路径,路径值应排除领先/ 。
...
--env \"PHP_OPTIONS_SESSION_SAVE_HANDLER=files\" \\
--env \"PHP_OPTIONS_SESSION_SAVE_PATH=var/session\" \\
...
