新建三个主机目录
- /opt/httpd/www:映射docker容器中的静态文件夹;
- /opt/httpd/conf:映射docker容器中的配置文件;
- /opt/httpd/logs:映射docker容器中的log文件夹;
- /opt/httpd/cert: 映射docker容器中的SSL证书目录;
- /opt/httpd/conf/extra:映射docker容器中的SSL配置;
获取httpd
docker pull httpd:latest
启动临时httpd容器
第一次启动httpd容器
docker run --name httpd -it -p 80:80 httpd
然后,将容器中的httpd.conf和httpd-ssl.conf文件拷贝出来,省得手写。
docker cp httpd:/usr/local/apache2/conf/httpd.conf /opt/httpd/conf
docker cp httpd:/usr/local/apache2/conf/extra/httpd-ssl.conf /opt/httpd/conf/extra/httpd-ssl.conf
正式启动httpd容器
先停止掉第一个httpd容器
docker stop httpd
docker rm httpd
再次启动正式的httpd容器
docker run -p 80:80 --privileged=true --name doorweb -v /opt/httpd/www/:/usr/local/apache2/htdocs/ -v /opt/httpd/conf/httpd.conf:/usr/local/apache2/conf/httpd.conf -v /opt/httpd/logs:/usr/local/apache2/logs/ -d httpd
v:将主机目录映射到docker容器目录,修改主机文件即可映射到docker容器中。
测试httpd容器
在/opt/httpd/www中编写index.html文件如下:
vim index.html
输入 hello world!保存退出
在browser中输入ip,一切Ok。
开始安装SSL证书。
- 申请SSL证书
选择阿里云免费的DV-SSL的证书,具体申请和下载过程参考阿里云介绍。 最后获得三个文件:xxxx_public.crt, xxxx_chain.crt, xxxx.key, 放入/opt/httpd/cert中。
- 修改httpd.conf
将httpd.conf下的
#LoadModule ssl_module modules/mod_ssl.so、
#Include conf/extra/httpd-ssl.conf、
#LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
三处地方删除#符号,保存httpd.conf。
- 修改httpd-ssl.conf配置文件
<VirtualHost *:443>
ServerName #修改为申请证书时绑定的域名www.YourDomainName1.com。
DocumentRoot #/usr/local/apache2/htdocs/,注意要和httpd.conf中的DocumentRoot一致。
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3 # 添加SSL协议支持协议,去掉不安全的协议。
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM # 修改加密套件。
SSLHonorCipherOrder on
SSLCertificateFile /usr/local/apache2/cert/domain name1_public.crt # 将domain name1_public.crt替换成您证书文件名。
SSLCertificateKeyFile /usr/local/apache2/cert/domain name1.key # 将domain name1.key替换成您证书的密钥文件名。
SSLCertificateChainFile /usr/local/apache2/cert/domain name1_chain.crt # 将domain name1_chain.crt替换成您证书的密钥文件名;证书链开头如果有#字符,请删除。
</VirtualHost>
保存退出
- 重新启动docker.
docker run -p 80:80 -p 443:443 --privileged=true --network xxxx --name xxxxx -v /opt/httpd/cert/:/usr/local/apache2/cert -v /opt/httpd/conf/extra/httpd-ssl.conf:/usr/local/apache2/conf/extra/httpd-ssl.conf -v /opt/httpd/www/:/usr/local/apache2/htdocs/ -v /opt/httpd/conf/httpd.conf:/usr/local/apache2/conf/httpd.conf -v /opt/httpd/logs:/usr/local/apache2/logs/ -d httpd
再次测试https:, 一切ok.