基于Docker的服务器搭建
-----------基于Docker的多种服务器搭建-----------
开发环境
本机上的虚拟机
Centos7.4
Docker1.13.1
Openssl1.1.1
1 Nginx
1.1 HTTP
1. 创建Dockerfile
2. 创建镜像
docker build -t nginx_http
3. 创建容器测试
(1) 不挂载:
docker run --name nginx81 -p 81:80 -d nginx_http
测试网页和容器下的html目录都能正常访问
(2) 挂载:
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.conf、httpd-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.conf、httpd-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,并开启https和http2相关模块
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
基于Docker的服务器搭建的更多相关文章
- 基于CentOS7的服务器搭建(LAMP环境)
基于CentOS7的服务器环境搭建(LAMP环境) 一.安装MySQL组件 1.由于在CentOS7中,默认yum安装库中不含有mysql,我们可以下载mysql的分支MariaDB,如果必须要下my ...
- 基于Docker和Golang搭建Web服务器
1 场景描述 基于centos7的docker镜像搭建golang开发环境 在docker容器内,使用golang实现一个Web服务器 启动docker容器,并在容器内启动Web服务器 我购买了一个最 ...
- 基于docker+reveal.js搭建一个属于自己的在线ppt网站
前言 最近热衷于Docker,由于这段时间使用Docker来折腾自己的服务器,越来越感觉这是一种及其被应该推广的技术,因此想在公司内部也做一次技术分享.当然,如果只是做的PPT,我就不写这文章了.既然 ...
- 金瓯无缺江河一统|Win10系统基于Docker和Python3搭建并维护统一认证系统OpenLdap
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_180 OpenLdap(Lightweight Directory Access Protocol)是什么?它其实是一个开源的.具 ...
- 基于Docker+Jenkins+Gitlab搭建持续集成环境
随着DevOps理念和敏捷理念的发展,我们希望通过自动化技术,加快项目的迭代.尤其是当使用微服务方案后,面临在大量的项目构建和部署工作,借助于jenkins的持续集成,可以快速把应用打包成docker ...
- 基于Docker的GitLab搭建
今天写一些Docker搭建GitLab,好久没有写博客园了,今天又回来了,为了学习技术? 建议使用Linux内核系统,或者虚拟机,首先安装docker环境(菜鸟教程) 一.下载镜像文件 如果慢的话,可 ...
- 基于docker的sqli-labs搭建
一键代码: curl https://files-cdn.cnblogs.com/files/kagari/sqli-labs.sh|bash https://files-cdn.cnblogs.co ...
- 基于 Docker 的 DevOps 搭建
一直对 DevOps 感兴趣,最近心血来潮,搭乘 Docker 搞一搞,Let‘s Go !!! 1.拉取 GitLab docker pull gitlab/gitlab-ce 2.Run Git ...
- 基于docker环境,搭建 jetty环境, 部署java项目
前提: 1.Ubuntu 系统. 2.docker环境已经安装好. 实现步骤: 1.上docker hub 下载jetty docker 镜像. 执行命令:$ sudo docker pull jet ...
随机推荐
- 支付宝调用错误:Call to undefined function openssl_sign()
打开php.ini,找到这一行 ;extension=php_openssl.dll,将前面的“;”去掉:重启服务器
- mysql5.7设置简单密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
注:本文来源于< mysql5.7设置简单密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy r ...
- 为 Confluence 6 分发包设置一个邮件会话
最简单设置 Confluence 电子邮件发服务器的方否认就是通过 Confluence 的管理员控制台进行设置.请参考 Configuring a Server for Outgoing Mail ...
- Confluence 6 从关闭的连接中恢复
当数据库服务器进行重启或者因为网络问题导致连接中断.所有在数据库连接池中的连接都会被中断.希望处理这个问题,通常需要 Confluence 进行重启. 但是,数据库连接池中的连接可以通过运行 SQL ...
- linux命令中的参数前的一横(-)和两横(--)的区别
在解释这些区别之前我们先了解一下有关linux的背景知识,这个需要大家先认真看完就会对这些区别有更深入的了解,对linux也有更深的了解. 关于System V和BSD风格以及他们与Linux的关系: ...
- 利用Form组件和ajax实现的注册
一.注册相关的知识点 1.Form组件 我们一般写Form的时候都是把它写在views视图里面,那么他和我们的视图函数也不影响,我们可以吧它单另拿出来,在应用下面建一个forms.py的文件来存放 2 ...
- 基于DBUtils实现数据库连接池
小知识: 1.子类继承父类的三种方式 class Dog(Animal): #子类 派生类 def __init__(self,name,breed, life_value,aggr): # Anim ...
- 右键菜单添加打开CMD选项
转载: https://www.cnblogs.com/mkdd/p/8649139.html#undefined 目前用的win7sp1系统,平时打开CMD窗口通常用三种方法:1.win+R然后输入 ...
- Python老男孩
1.可以自己编写模块,但注意:如果想要调用该模块,需要将该模块放到site-packages目录下,或将该模块放在执行程序的路径下. 2.pyc文件是什么? 集合: set 集合可以去重:做交集.并集 ...
- ajax---获取XMLHttpReuquest 对象
ajax的异步和同步(Asynchronus Javascript and Xml) 同步:一个时间段只能干一件事:即按部就班,一件事一件事的做. 异步:相同的时间段做多件事,同时进行.依靠 XMLH ...