Docker是一個golang編寫的開源輕量級的、可移植的、自給自足的容器,Docker主要應用在如下場景:php
web應用的自動化打包和發佈;html
自動化測試和持續集成、發佈;node
在服務型環境中部署和調整數據庫或其餘的後臺應用;nginx
從頭編譯或者擴展示有的OpenShift或Cloud Foundry平臺來搭建本身的PaaS環境。git
Docker系統有兩個程序:docker服務端和docker客戶端。其中docker服務端是一個服務進程,管理着全部的容器。docker客戶端則扮演着docker服務端的遠程控制器,能夠用來控制docker的服務端進程。大部分狀況下,docker服務端和客戶端運行在一臺機器上。golang
在centos系列系統中可直接使用yum命令進行搜索安裝,安裝完畢後可運行docker version查看安裝的版本,docker包含了頗有公用的鏡像,可以使用docker search進行搜索安裝。web
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 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從入門到實踐》,具體可打開gitbook查看:https://www.gitbook.com/book/yeasy/docker_practice/details算法
nginx的安裝就再也不描述了,最簡單快捷的可以使用yum進行安裝,可能夠自行去官網進行下載編譯安裝,如下是個人nginx負載均衡https到docker的配置文件: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; } } }
線上證書通常去ca申請的,測試的話可使用openssl本身建立兩個證書,建立命令以下:
# 生成一個2048位密鑰文件 openssl genrsa -out privkey.pem 2048 # 使用密鑰文件生成一個證書 openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095
服務器正在使用的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"。