docker部署Apache的https服务
实际过程超级简单,但也超级实用。docker容器用来非常爽爽的,部署一个apache服务几分钟搞定,就是加上ssl证书也是很快的。下面来说明一下基本过程:
(1)docker部署apache的web服务
无论是ubuntu还是centos中,安装docker是第一步。
如果是ubuntu,使用apt-get install http://docker.io即可;如果是centos,则使用yum install docker-ce。详细过程感兴趣的可以自行尝试,也有许多地方可以参考。
接下来就可以从docker仓库中下载镜像,对于httpd镜像,可以直接使用:
docker pull httpd
如果速度可以的话,很快就可以在本地下载了一个httpd的镜像。此时可以使用docker images来查看:
root@VM-0-2-ubuntu:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest c8ca530172a8 2 days ago 138MB
部署web服务就是几秒钟的事情了,直接使用docker运行镜像的命令:
docker run -p 80:80 --name demo -d httpd
这就是运行docker镜像并获得一个容器,该容器内就部署了apache的web服务,此时运行该容器,就可以使用nettools里的netstat来查看80端口是否开放,然后可以直接在外部浏览器里运行ip地址或域名。
上述docker运行时直接使用了容器里的服务,没有与本地目录关联。一般情况下我们会将自己编写好的web代码目录放在本地目录下,然后使用-v命令与容器内apache服务默认路径/usr/local/apache2/htdocs映射上,使得容器内的web服务会访问-v命令指定的本地web路径。例如本地存放web目录为/www/web,那就修改上述docker运行命令:
docker run -p 80:80 --name demo -v /www/web:/usr/local/apache2/htdocs -d httpd
以后的web开发代码文件就可以直接ftp到本地的/www/web目录下,刷新浏览器就可以直接查看最新成果。
(2)docker部署apache的https服务
如今大多数网站都开始使用ssl证书,也就是https服务。既然可以使用docker来部署http服务,当然也可以实现https服务的部署。这个过程就相对复杂一些。
第一步,申请ssl证书
可以去阿里云、腾讯云等出售域名的网站里申请免费的ssl证书,有效期为一年,一年后重新再申请即可。一般情况下申请成功后需要手动安装,此时下载ssl证书的压缩包,包括给apache、tomcat和IIS,nginx几种http服务的证书:
当部署apache服务时,就去apache目录下找到三个文件:
这三个证书文件是关键,需要保管好,第一个1序号的是SSL证书练文件,第二个是域名对应的crt,第三个为域名对应的key。
第二步,先运行一个docker容器,将https的443端口先部署上:
docker run -p 80:80 -p 443:443 -v /www/web:/usr/local/apache2/htdocs -d httpd
第三步,将容器内的/usr/local/apache2目录下(视不同系统)的httpd.conf文件拷贝到本地,同时将extra目录下的httpd-ssl.conf文件拷贝到本地。
docker cp 镜像ID:/usr/local/apache2/httpd.conf httpd.conf
docker cp 镜像ID:/usr/local/apache2/extra/httpd-ssl.conf httpd-ssl.conf
第四步,根据腾讯云或者阿里云提供的官方参考修改这两个文件
对于httpd.conf,主要取消两个注释:
LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf
对于httpd-ssl.conf文件,需要设定SSL证书三个文件在容器内的路径:
# 证书公钥配置
SSLCertificateFile /usr/local/apach2/conf/2_www.xxx.com.crt 第2个crt文件在容器内的路径
# 证书私钥配置
SSLCertificateKeyFile /usr/local/apach2/conf/3_www.xxx.com.key
# 证书链配置,如果该属性开头有 '#'字符,请删除掉
SSLCertificateChainFile /usr/local/apach2/conf/1_root.crt
同时修改Virtual Host中间内容,主要就是那个域名:
ServerName -- 网站域名
第五步,修改好两个文件后,再使用docker cp命令将其拷贝到原来的位置
docker cp httpd.conf 镜像ID:/usr/local/apache2/httpd.conf
docker cp httpd-ssl.conf 镜像ID:/usr/local/apache2/extra/httpd-ssl.conf
第六步,将之前下载的三个证书文件拷贝到容器内对应位置
docker cp 1.crt 镜像ID:/usr/local/apache2/conf/1.crt
docker cp 2.com.crt 镜像ID:/usr/local/apache2/conf/2.com.crt
docker cp 3.key 镜像ID:/usr/local/apache2/conf/3.key
第七步,重启容器服务,恭喜大功告成!
docker restart 之前的容器ID
然后可以愉快的访问https域名了(刚给对方公司完成的部署).