共计 4227 个字符,预计需要花费 11 分钟才能阅读完成。
了解 Docker
Docker 是一个 golang 编写的开源轻量级的、可移植的、自给自足的容器,Docker 主要应用在以下场景:
- web 应用的自动化打包和发布;
- 自动化测试和持续集成、发布;
- 在服务型环境中部署和调整数据库或其他的后台应用;
- 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
Docker 系统有两个程序:docker 服务端和 docker 客户端。其中 docker 服务端是一个服务进程,管理着所有的容器。docker 客户端则扮演着 docker 服务端的远程控制器,可以用来控制 docker 的服务端进程。大部分情况下,docker 服务端和客户端运行在一台机器上。
- 镜像:一个镜像相当于一个 root 文件系统,包含运行需要的文件、库、资源、配置
- 容器:容器是镜像的实例化操作,容器有自己独立的文件系统、网络配置、进程空间,每个容器是独立的运行机制,容器是无状态的,数据应保存在数据卷中。
- 仓库:管理 docker 镜像的发布
docker 安装及配置
在 CentOS 系列系统中可直接使用 yum 命令进行搜索安装,安装完毕后可运行 docker version 查看安装的版本,docker 包含了很有公用的镜像,可使用 docker search 进行搜索安装。
yum install docker -y
docker pull nginx
# 运行 4 个 docker 镜像,网站目录在./ningx/html/ 下,日志文件在 ./nginx/logs/ 下
docker run -it -p 8081:80 –name nginx1 -v `pwd`/nginx/html1/:/usr/share/nginx/html/ -v `pwd`/nginx/logs1/:/var/log/nginx/ -d nginx
docker run -it -p 8082:80 –name nginx2 -v `pwd`/nginx/html2/:/usr/share/nginx/html/ -v `pwd`/nginx/logs2/:/var/log/nginx/ -d nginx
docker run -it -p 8083:80 –name nginx3 -v `pwd`/nginx/html3/:/usr/share/nginx/html/ -v `pwd`/nginx/logs3/:/var/log/nginx/ -d nginx
docker run -it -p 8084:80 –name nginx4 -v `pwd`/nginx/html4/:/usr/share/nginx/html/ -v `pwd`/nginx/logs4/:/var/log/nginx/ -d nginx
安装 docker php-fpm
docker pull php:7.1-fpm
docker run -p 9000:9000 –name php-fpm1 -d -v /opt/app/docker/nginx/app1/:/var/www/html:ro php:7.1-fpm
docker run –name nginx1 -p 8081:80 -d -v /opt/app/docker/nginx/html1:/usr/share/nginx/html:ro -v /opt/app/docker/nginx/conf1:/etc/nginx/conf.d:ro -v /opt/app/docker/nginx/logs1:/var/log/nginx –link php-fpm1:php nginx
echo “<?php phpinfo();” > /opt/app/docker/nginx/app1/index.php
推荐《Docker 从入门到实践》,具体可打开 https://www.linuxidc.com/Linux/2016-02/128290.htm
nginx 配置
nginx 的安装就不再描述了,最简单快捷的可使用 yum 进行安装,可可以自行去官网进行下载编译安装,以下是我的 nginx 负载均衡 https 到 docker 的配置文件:
注:我的运行环境在 aws 上,你可以将 docker 和 nginx 安装在一台机器上,也可以将 docker 部署在 1 台或 4 台机器,nginx 部署在一台机器,再结合 keepalived 做高可用就可实现高可用双机热备的 https 负载均衡啦~
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” “$http_x_forwarded_for”‘;
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
index index.html index.htm;
upstream docker_nginx {
ip_hash; #同一个 ip 一定时间内负载到一台机器
server 172.31.0.155:8081; # docker 虚拟的第 1 台 nginx 机器
server 172.31.0.155:8082; # docker 虚拟的第 2 台 nginx 机器
server 172.31.0.155:8083; # docker 虚拟的第 3 台 nginx 机器
server 172.31.0.155:8084; # docker 虚拟的第 4 台 nginx 机器
}
server {
# 使用 openssl 自建的 rsa 证书
ssl_certificate /opt/ssl/nginx.ipp365.com.crt;
ssl_certificate_key /opt/ssl/nginx.ipp365.com.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
listen 443;
ssl on;
server_name nginx.ipp365.com;
location / {
# 代理到真实机器,如果真实机器也安装了 https 则使用 https
# 一般代理集群对流量进行了 https 后,真实机器可不再使用 https
proxy_pass http://docker_nginx;
}
}
}
创建 ssl 自建的证书
线上证书一般去 ca 申请的,测试的话可以使用 openssl 自己创建两个证书,创建命令如下:
# 生成一个 2048 位密钥文件
openssl genrsa -out privkey.pem 2048
# 使用密钥文件生成一个证书
openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095
SSL 常见错误
问题:此网站出具的安全证书不是由受信任的证书颁发机构颁发的。
服务器正在使用的 SSL 证书不是通过正式的全球信任的 CA 颁发。推荐购买 GlobalSign SSL,GeoTrust SSL ,Symante SSL 证书,SSL 通常是因为没有正确安装证书,请再检查一下是否删除了原来的测试证书,如果网站使用的证书是正确的,请重新启动 webserver。
问题:此网站出具的安全证书是为其他网站地址颁发的。
一个 SSL 证书所对应的域名是一个全域名 FQDN(Fully Qualified Domain Name),如果证书中的域名是 www.domain.com,则通过其他相近的域名:web.domain.com,app.domain.com,domain.com,系统都会报告和证书中的域名不匹配。如果有多相同主域名的站点需要申请证书,推荐通配型 SSL 证书;如果不是相同主域名则需要购买多域名型 SSL 证书。
问题:本页面包含有不安全的内容。
如果一个页面需要通过 HTTPS 访问被访问,则其中所有的元素都必须是 HTTPS 方式,如果有:图片、JS 脚本,FLASH 插件是通过 HTTP 方式去调用的,就会出现这个错误,最常见的,就是调用 flash 播放插件:codebase=’http://download.macromedia.com/pub/shockwave/
cabs/flash/swflash.cab’,将 http 改成 HTTPS 即可,刷新后测试 SSL 问题有没有解决。
问题:此网站出具的安全证书已过期或还未生效。
这个标识网站使用的 SSL 证书已经过期,请先检查网站证书的有效期,如果网站证书有效期在本日以后,则请检查本地电脑的日期设置,是否正确。如果证书过期了,请尽快联系易维信客服,续费!就能处理好 SSL 错误了。
问题:为什么使用匿名 Diffie-Hellman(ADH) 算法时会收到 ”no shared cipher” 错误?
默认情况下,出于安全原因,OpenSSL 并不启用 ADH 算法。仅在你确实明白了这个算法的副作用时,你才可以启用此算法。
为了使用匿名 Diffie-Hellman(ADH) 算法,你必须在编译 OpenSSL 时使用 ”-DSSL_ALLOW_ADH” 配置选项,并在 SSLCipherSuite 指令中添加 ”ADH”。
: