基于Docker的服务器搭建

 -----------基于Docker的多种服务器搭建-----------

开发环境

本机上的虚拟机html

Centos7.4node

Docker1.13.1linux

Openssl1.1.1
nginx

1 Nginx

1.1 HTTP

1. 建立Dockerfileweb

 

2. 建立镜像docker

docker build -t nginx_http

3. 建立容器测试apache

(1) 不挂载:tomcat

docker run --name nginx81 -p 81:80 -d nginx_http

测试网页和容器下的html目录都能正常访问安全

(2) 挂载:bash

docker run --name nginx83 -p 83:80 -d -v $PWD/html:/usr/share/nginx/html nginx_http

挂载主机目录Docker访问出现Permission denied

网页访问出现403 Forbidden

缘由是CentOS7中的安全模块selinux把权限禁掉了,至少有如下三种方式解决挂载的目录没有权限的问题:

1)  在运行容器的时候,给容器加特权,及加上 --privileged=true 参数

2)  临时关闭selinux:setenforce 0

3)  添加selinux规则,改变要挂载的目录的安全性文本

docker run --name nginx83 -p 83:80 -d -v $PWD/html:/usr/share/nginx/html --privileged=true nginx_http

添加权限后测试网页和容器目录能正常访问

1.2 HTTPS

1. 准备配置文件default.conf

直接从容器中拷贝default.conf

docker cp nginx81:/etc/nginx/conf.d/default.conf ./

2. 经过openssl生成证书和私钥

(1)生成21024位的加密私钥,这里须要设置两遍密码,生成server.key

openssl genrsa -des3 -out server.key 1024

(2)生成证书签名请求(CSR),须要填写许多信息,如国家,省市,公司等

openssl req -new -key server.key -out server.csr

(3)去除密码

1.    mv server.key server.key.org  
2.    openssl rsa -in server.key.org -out server.key 

(4)生成类型为X509的自签名证书。有效期设置365天

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

完成这一步以后就获得了咱们须要的证书文件server.crt和私钥server.key

3. 配置nginx服务器,支持https访问

 修改配置文件default.conf,添加ssl支持

4. 建立Dockerfile

5. 生成镜像

docker build -t nginx_https . 

6.生成容器测试

docker run --name nginx448 -p 448:443 -d nginx_https

访问测试网页

1.3 HTTP2

1. 准备配置文件default.conf

 直接从容器中拷贝default.conf

docker cp nginx81:/etc/nginx/conf.d/default.conf ./

2. 经过openssl生成证书和私钥

使用1.2节中生成的证书和私钥,将生成的crt和key存入ssl目录中

 

3. 配置nginx服务器,支持https访问

修改配置文件default.conf,添加ssl支持、配置安全选项,具体配置以下

4. 建立Dockerfile

5. 生成镜像

docker build -t nginx_http2 .

6.生成容器测试

docker run --name nginx449 -p 449:443 -d nginx_http2 

访问测试网页

这里能够看到,协议已变成了HTTP/2.0

2 Apache

2.1 HTTP

1. 建立Dockerfile

2. 建立镜像

docker build -t apache_http . 

3. 建立容器测试

docker run --name apache85 -p 85:80 -d apache_http

访问测试网页

2.2 HTTPS

1. 准备配置文件httpd.confhttpd-ssl.conf

 直接从容器中拷贝httpd.conf、httpd-ssl.conf

1.    docker cp apache85:/usr/local/apache2/conf/httpd.conf ./  
2.    docker cp apache85:/usr/local/apache2/conf/extra/httpd-ssl.conf ./ 

2. 经过openssl生成证书和私钥

同1.2节中证书和私钥生成步骤,将生成的crt和key存入ssl目录中

 

3. 修改httpd-ssl.conf文件指定相关秘钥和证书位置

 修改

1.    ServerName www.server.com:443  
2.    SSLCertificateFile "/usr/local/apache2/conf/server.crt"  
3.    SSLCertificateKeyFile "/usr/local/apache2/conf/server.key"

4. 修改Apache主配置文件并开启相关模块

1.    // 打开相关的注释,启用须要的模块  
2.    LoadModule rewrite_module modules/mod_rewrite.so  
3.    LoadModule ssl_module modules/mod_ssl.so  
4.    LoadModule socache_shmcb_module modules/mod_socache_shmcb.so  
5.    Include conf/extra/httpd-ssl.conf  
6.    // 修改主机名  
7.    ServerName www.server.com

5. 建立Dockerfile

6. 生成镜像

docker build -t apache_https . 

7.生成容器测试

docker run --name apache444 -p 444:443 -d apache_https 

访问测试网页

2.3 HTTP2

1. 准备配置文件httpd.confhttpd-ssl.conf

直接从容器中拷贝httpd.conf、httpd-ssl.conf

1.    docker cp apache85:/usr/local/apache2/conf/httpd.conf ./  
2.    docker cp apache85:/usr/local/apache2/conf/extra/httpd-ssl.conf ./ 

2. 经过openssl生成证书和私钥

 使用1.2节中生成的证书和私钥,将生成的crt和key存入ssl目录中

3. 修改httpd-ssl.conf文件指定相关秘钥和证书位置

 修改

1.    ServerName www.server.com:443  
2.    SSLCertificateFile "/usr/local/apache2/conf/server.crt"  
3.    SSLCertificateKeyFile "/usr/local/apache2/conf/server.key"

4. 修改Apache主配置文件httpd.conf,并开启httpshttp2相关模块

1.    //打开相关的注释,启用须要的模块  
2.    LoadModule rewrite_module modules/mod_rewrite.so  
3.    LoadModule ssl_module modules/mod_ssl.so  
4.    LoadModule socache_shmcb_module modules/mod_socache_shmcb.so  
5.    Include conf/extra/httpd-ssl.conf  
6.    LoadModule http2_module modules/mod_http2.so
7.    //修改主机名  
8.    ServerName www.server.com 

5. 启用 HTTP2 协议

默认状况下,服务器并无启动 HTTP/2 协议,用新的 Protocols 指令启用 HTTP/2 协议

Protocols h2 http/1.1

 

6. 建立Dockerfile

7. 生成镜像

docker build -t apache_http2 .  

6.生成容器测试

docker run --name apache446 -p 446:443 -d apache_http2 

访问测试网页

这里能够看到,协议已变成了HTTP/2.0

3 Tomcat

3.1 HTTP

1. 建立Dockerfile

这里须要在容器的/usr/local/tomcat/webapps下建立html目录,用来存放网页

2. 建立镜像

docker build -t tomcat_http . 

3. 建立容器测试

docker run --name tomcat8080 -p 8080:8080 -d tomcat_http

访问测试网页

3.2 HTTPS

1. 准备配置文件server.xml

直接从容器中拷贝server.xml

docker cp tomcat8080:/usr/local/tomcat/conf/server.xml ./ 

2. 经过openssl生成证书和私钥

同1.2节中证书和私钥生成步骤,将生成的crt和key存入ssl目录中

 

3. 修改server.xml配置文件,配置https服务

4. 建立Dockerfile

一样,须要在容器的/usr/local/tomcat/webapps下建立html目录,用来存放网页

 

5. 生成镜像

docker build -t tomcat_https . 

6.生成容器测试

docker run --name tomcat445 -p 445:443 -d tomcat_https

访问测试网页

3.3 HTTP2

1. 准备配置文件server.xml

直接从容器中拷贝server.xml

docker cp tomcat8080:/usr/local/tomcat/conf/server.xml ./ 

2. 经过openssl生成证书和私钥

 使用1.2节中生成的证书和私钥,将生成的crt和key存入ssl目录中

3. 修改server.xml配置文件,配置https、启用http2

<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />

4. 建立Dockerfile

一样,须要在容器的/usr/local/tomcat/webapps下建立html目录,用来存放网页

 

5. 生成镜像

docker build -t tomcat_http2 . 

6.生成容器测试

docker run --name tomcat447 -p 447:443 -d tomcat_http2 

访问测试网页

这里能够看到,协议已变成了HTTP/2.0

4 Lighttpd

4.1 HTTP

1. 建立Dockerfile

2. 建立镜像

docker build -t lighttpd_http . 

3. 建立容器测试

docker run -d -–name=lighttpd8081 -p 8081:80  lighttpd_http bash

测试网页和容器下的html目录都能正常访问

4.2 HTTPS

1. 经过openssl生成证书

 生成类型为X509的自签名证书。有效期设置365天。须要填写许多信息,如国家,省市,公司等

openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes

2. 配置lighttpd服务器,支持https访问

修改配置文件lighttpd.conf,添加ssl支持

4. 建立Dockerfile

5. 生成镜像

docker build -t lighttpd_https .

6.生成容器测试

docker run -d -–name=lighttpd8082 -p 8082:443  lighttpd_https bash

访问测试网页

4.3 HTTP2

Lighttpd目前不支持HTTP/2

当前lighttpd版本是1.4.5

 

 5 Caddy

5.1 HTTP

1. 建立Dockerfile

2. 建立镜像

docker build -t caddy_http . 

3. 建立容器测试

docker run -d -–name=caddy8084 -p 8084:80  caddy_http

测试网页和容器下的html目录都能正常访问

失败状况

5.2 HTTPS

5.3 HTTP2

5.4 QUIC

Quic在具备TSL基础上采用CMD命令

caddy -conf /etc/Caddyfile -quic

开启服务,因此首要条件就是要先搭建出HTTPS协议

试用了多种Caddyfile写法

有的没法启动容器,有的启动容器成功但没法链接服务器,还有可链接到服务器,但出现:No such site at:443

 

到目前为止,下面这种写法是最接近成功的,须要再实验

写在文末:

本文是18年暑期入组培训的时候跟师妹一块儿完成报告,其中大部分工做都是师妹完成的,在此感谢师妹zhanglei

相关文章
相关标签/搜索