摘要:無論這個連接是外部主動建立的,還是內(nèi)部建立的。協(xié)議有表示層數(shù)據(jù)的表示安全壓縮。在整個發(fā)展過程中的所有思想和著重點都以一種稱為的文檔格式存在。
部署基礎(chǔ)知識
url:協(xié)議://網(wǎng)站地址:端口(/)路徑地址?參數(shù)
eg: http://www.baidu.com:80/abc/dd/
www.baidu.com找服務(wù)器
80端口:找服務(wù)器上提供服務(wù)的應(yīng)用 nginx
uri:/abc/dd/
nginx的pid文件是可變化的
等號兩邊不能空格,否則會報錯
tail -f 1.txt 實時監(jiān)控文件變化
1.1 部署基礎(chǔ)
1.11.1 項目生命周期
傳統(tǒng)項目生命周期 階段
? 調(diào)研階段 找方向點
設(shè)計階段 方向點可視化 產(chǎn)品:產(chǎn)品需求文檔、項目里程表 開發(fā)階段 產(chǎn)品階段功能實現(xiàn) 測試階段 保證產(chǎn)品的階段功能 運營階段 項目部署 + 運營維護 關(guān)鍵點: 階段間是有前后關(guān)系依賴的 階段間項目的推進是有文檔來主導(dǎo) 理想化的生命周期和開發(fā)模型
1.2新型項目周期
軟件項目: 一個產(chǎn)品被拆分成了非常多的子功能 團隊組織:高效協(xié)作,溝通 圖的理解: 四個圈串在一起 --- 子功能的完整周期 單個圈 --- 崗位的工作內(nèi)容 圖片: https://uploader.shimo.im/f/hRwe365QitwNgyS7.png 團隊組織間的高效協(xié)作是很重要的
? 流程:
1 根據(jù)需求文檔來梳理網(wǎng)站的目標(biāo)架構(gòu) 2 分析產(chǎn)品需求文檔的功能,來梳理部署結(jié)點 部署節(jié)點示意圖:
圖片: https://uploader.shimo.im/f/U...
3 根據(jù)部署結(jié)點去互聯(lián)網(wǎng)上梳理各種解決方案(根據(jù)業(yè)務(wù)需求 4 整合所有的解決方案,-- 初版部署方案 5 根據(jù)實際的公司業(yè)務(wù)情況,對初版部署方案進行優(yōu)化調(diào)整
1.3 部署環(huán)境:
個人開發(fā)環(huán)境 內(nèi)容:項目子模塊 公司開發(fā)環(huán)境 內(nèi)容:項目模塊間聯(lián)調(diào) 環(huán)境一定要和線上環(huán)境一致 測試環(huán)境 內(nèi)容:項目產(chǎn)品質(zhì)量保證 預(yù)發(fā)布環(huán)境 內(nèi)容:項目產(chǎn)品質(zhì)量保證 線上環(huán)境 內(nèi)容:項目產(chǎn)品部署+維護
拓展: 環(huán)境之間彼此隔離
第 2 章 Nginx進階
2.1 Nginx快速入門 2.1.1 Nginx簡介 方向: web服務(wù) 反向代理服務(wù)器、緩存服務(wù)器、郵件服務(wù)器 ****** web 反向代理 ***** 緩存 特點: 成本低 資源占用少 模塊化設(shè)計 2.1.2 Nginx部署 軟件安裝 apt-get install -y build-essential libssl-dev libtool libpcre3 libpcre3-dev make openssl zlib1g-dev apt-get install nginx -y 注意 如果軟件安裝過程中,由于遠程倉庫安全限制方面的原因?qū)е聼o法安裝成功,使用 --allow-unauthenticated 參數(shù) 服務(wù)啟動命令:(linux自帶的) systemctl start|stop|restart|reload nginx *** nginx服務(wù)命令: nginx -t 每次修改配置文件后,都要檢查配置文件,如果錯誤即使啟動nginx也不生效更改的內(nèi)容 *** nginx -s stop|reload 停止|重載 注意nginx -s reload不需要關(guān)閉并重新打開nginx進程,只需要將配置信息重新加載就可以了 其他命令:
查看服務(wù)的端口信息:
netstat -tnulp | grep nginx
nginx目錄結(jié)構(gòu):
前提:使用apt-get來安裝的nginx
家目錄: /etc/nginx
日志目錄:/var/log/nginx
html目錄:/var/www/html 一般會把//usr/share/nginx/html/index.html注釋
nginx配置文件:
路徑: /etc/nginx/nginx.conf (官方默認里面會包含下面的兩個存放目錄)
存放目錄:
/etc/nginx/ /etc/nginx/conf.d
nginx 的配置文件結(jié)構(gòu):
全局配置段
http配置段
server配置段 -----項目或者應(yīng)用的網(wǎng)站
location配置段 ------網(wǎng)站里面的文件 -----/var/www/html
nginx的訪問原理:
瀏覽器拆分url請求:
地址和端口 和路徑關(guān)鍵字
根據(jù)地址找服務(wù)器 ------nginx服務(wù)器
根據(jù)端口找服務(wù)器上面的應(yīng)用或者框架 -------server配置段
根據(jù)路徑關(guān)鍵字找對應(yīng)的文件 ------location配置段
---------------------------------------------- lscpu 查看cpu信息,全局配置段里面的worker_processes 是根據(jù)這個來設(shè)置的,auto的話是一樣多的,也可以定制
-----------------------------------------------默認的worker_connections:768
高并發(fā)的一個配置點: worker_procees 一般是和cpu內(nèi)核數(shù)相匹配的,多開的話可能會造成影響主進程調(diào)度,占用CPU資源,適當(dāng)?shù)脑捑蛣倓偤茫瑢嶋H運行時都會多一個,這個就是主進程,負責(zé)調(diào)度的,
worker_connections:這個屬性是指單個工作進程可以允許同時建立外部連接的數(shù)量。無論這個連接是外部主動建立的,還是內(nèi)部建立的。這里需要注意的是,一個工作進程建立一個連接后,進程將打開一個文件副本。所以這個數(shù)量還受操作系統(tǒng)設(shè)定的,進程最大可打開的文件數(shù)有關(guān)。
兩個命令:ps -elf | grep nginx查看進程配置信息
cat /proc/pid/limits 查看硬盤支持的最大可打開文件數(shù)
圖片: https://uploader.shimo.im/f/m...
nginx -s reload命令重新啟動Nginx。
https://blog.csdn.net/zs74294...
worker_rlimit_nofile配置要和系統(tǒng)的單進程打開文件數(shù)一致,
根據(jù)我配置實踐,
服務(wù)器是“多個CPU+gzip+網(wǎng)站總文件大小大于內(nèi)存”的環(huán)境,worker_processes設(shè)置為CPU個數(shù)的兩倍比較好。
2.1.3 配置詳解:
全局配置段:
user 指的是worker_processes的用戶
worker_processes
pid
events
worker_connections 768
use 默認epoll 面試掌握select /poll.epoll z阻塞非阻塞并行串行
http配置段:
sendfile 開啟高效文件傳輸
gzip 開啟gzip壓縮
tcp_delay 防止網(wǎng)絡(luò)阻塞
tcp_nopush 防止網(wǎng)絡(luò)阻塞
autoindex 開啟目錄列表訪問,適合下載服務(wù)器
keepalive_timeout 保持長連接
include 將相關(guān)的配置文件導(dǎo)入到文件中
server常見配置段:
格式:
server {
listen 端口;
server_name 主機名;
root 服務(wù)器響應(yīng)請求的html文件所在路徑 /var/www/html
index 定義響應(yīng)請求后返回的文件名稱或者格式; index index.html index.htm index.nginx-debian.html;
return 響應(yīng)請求返回的http狀態(tài)碼;
}
server {
listen 88; 監(jiān)聽的端口(優(yōu)先匹配)
server_name a.com 端口相同的情況下匹配server_name
使用原則:
優(yōu)先使用完整樣式,然后使用前綴正則樣式,最后使用后綴正則樣式,如果正則樣式相同的時候,匹配最長,
否則就走非法規(guī)則。
非法域名/IP,表示請求到該主機上一個不存在的IP或者域名
}
server {
listen 88;
server_name b.com
location配置段
語法: location 匹配條件 匹配樣式 {執(zhí)行動作} 匹配條件: 1 精確匹配 = 2 優(yōu)先正則 ^~ 3 普通正則 ~區(qū)分大小寫 !~區(qū)分大小寫不匹配 ~*不區(qū)分大小寫 !~* 雙重否定 4 默認規(guī)則 空 匹配樣式: 針對的是url 里面的路徑部分 location ~ .(jpe?g)$ {} location ^~ .(jpeg)$ {}
jpeg
jg ~* !~ Jpg location = /image { http://a.com/image location = / { location ~ .(gif|jpg|png|js|css)$ { location !~* .xhtml$ { ? ?#精確規(guī)則A ? ? #正則規(guī)則D ? ? #正則規(guī)則G } } } location = /login { location ~* .png$ { location / { ? ?#精確規(guī)則B ? ? #正則規(guī)則E ? ? #通用規(guī)則H } } } location ^~ /static/ { location !~ .xhtml$ { ? ?#優(yōu)先規(guī)則C ? ? #正則規(guī)則F } }
http://a.com/other
$uri /other $uri/ /other/ 默認首頁 location實踐1: root@itcast:/etc/nginx/conf.d# cat test.conf server{ listen 99; location / { root /nihao/nibuhao; index index.html; try_files $uri $uri/ =404; } } location實踐2: 網(wǎng)站質(zhì)量頁面,監(jiān)控nginx運行狀況:nginx-status root@itcast:/etc/nginx/conf.d# cat /data/backup/status.conf server{ listen 99; location /nginx-status { stub_status on; allow 192.168.8.15; 安全權(quán)限配置點,不允許別人訪問 deny all; } } location實踐3:上傳服務(wù)器 root@itcast:/etc/nginx/conf.d# cat upload.conf server{ listen 99; location /upload { alias /var/www/upload; autoindex on; } } root VS alias
簡單點講:root是/var/www/image + /img/ 加上匹配的uri ----相對 用于location配置
alias是/var/www/image/ 忽略匹配的uri -----絕對 用于other配置 圖片: https://uploader.shimo.im/f/mXKynyi3pEE3eh5e.png root@itcast:/etc/nginx/conf.d# cat upload.conf server{ listen 99; location /upload { #alias /var/www/upload; root /var/www; autoindex on; } } 拓展: server中 listen 端口一樣,主機名不一樣 直接3個server字段,端口一樣,server_name不一樣 主機1 a.com 80 b.com 80 c.com 80 root@itcast:/etc/nginx/conf.d# cat test.conf server{ listen 99; root /nihao/nibuhao; index index.html; location / { root /nihao/nibuhao1; index index.html; try_files $uri $uri/ =404; } }
2.2.1 反向代理
代理: 分類: 正向代理: 代替公司內(nèi)網(wǎng)的客戶端去互聯(lián)網(wǎng)上訪問 相親的時候,自己的照片 反向代理: 代替公司內(nèi)網(wǎng)的服務(wù)器向互聯(lián)網(wǎng)提供服務(wù) 相親的時候,媒婆說的女方形象 拓展: 正向解析和反向解析 --- dns知識范疇
王樹森 18:01:28 (多人發(fā)送)
2.2 Nginx進階知識 2.2.1 反向代理 代理: 分類: 正向代理: 代替公司內(nèi)網(wǎng)的客戶端去互聯(lián)網(wǎng)上訪問 相親的時候,自己的照片 反向代理: 代替公司內(nèi)網(wǎng)的服務(wù)器向互聯(lián)網(wǎng)提供服務(wù) 相親的時候,媒婆說的女方形象 拓展: 正向解析和反向解析 --- dns知識范疇
正向解析:域名解析為IP
反向解析:IP解析為域名 https://www.cnblogs.com/weiap...
關(guān)鍵配置: proxy_pass 代理后的地址; 反向代理示例: root@itcast:/etc/nginx/conf.d# cat proxy.conf server{ listen 99; location / { proxy_pass http://192.168.8.15:999/nilaiya/; } } server { listen 999; location /nilaiya/ { root /ni/laiya; index index.html; try_files $uri $uri/ =404; } } 關(guān)鍵點: proxy_pass 后面的地址結(jié)尾的"/" 很重要 配置示例: location /html/ { 1 proxy_pass http://proxy.com; 2 proxy_pass http://proxy.com/; } 請求地址: http://domain.com/html/test.js 結(jié)果: 如果是 1 ,由于地址后面沒有 "/", 所以$uri(/html/test.js)作為一個內(nèi)容和我們的地址拼接在一起 http://proxy.com/html/test.js 如果是 2 ,由于地址后面有 "/", 所以$uri(/html/test.js)中關(guān)鍵字之后的 的內(nèi)容 (/test.js),和代理的地址拼接在一起 http://proxy.com/test.js
——————————————————————————————————————————
2.2.2 負載均衡
負載均衡是一種特殊的反向代理,區(qū)別在于團伙打群架 負載均衡的分類: 四層負載 port 傳輸層 七層負載 url 應(yīng)用層 upstream 的格式: upstream 主機群名稱 { server 主機1; server 主機2; ... server 主機3; } 關(guān)鍵點: 配置關(guān)鍵字: upstream 主機群名用在哪里? proxy_pass 后面指定主機 主機列表如何來制作: server指令了解一下。
簡單實踐1:
root@itcast:/etc/nginx/conf.d# cat upstream.conf backends.conf upstream obackends { server 192.168.8.15:10086; server 192.168.8.15:10087; server 192.168.8.15:10088; } server{ listen 80; location / { proxy_pass http://backends; } } server { listen 192.168.8.15:10086; root /var/www/html/huang; index index.html; location / { try_files $uri $uri/ =404; } } server { listen 192.168.8.15:10087; root /var/www/html/li; index index.html; location / { try_files $uri $uri/ =404; } } server { listen 192.168.8.15:10088; root /var/www/html/liu; index index.html; location / { try_files $uri $uri/ =404; } } mkdir /var/www/html/{huang,li,liu} ls /var/www/html/ echo "nihao huangxiong
" > /var/www/html/huang/index.html echo "nihao lixiong
" > /var/www/html/li/index.html echo "nihao liuxiong
" > /var/www/html/liu/index.html nginx -t systemctl restart nginx
__
OSI七層模型
應(yīng)用層
網(wǎng)絡(luò)服務(wù)與最終用戶的一個接口。 協(xié)議有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP
表示層
數(shù)據(jù)的表示、安全、壓縮。(在五層模型里面已經(jīng)合并到了應(yīng)用層) 格式有,JPEG、ASCll、DECOIC、加密格式等
會話層
建立、管理、終止會話。(在五層模型里面已經(jīng)合并到了應(yīng)用層) 對應(yīng)主機進程,指本地主機與遠程主機正在進行的會話
傳輸層
定義傳輸數(shù)據(jù)的協(xié)議端口號,以及流控和差錯校驗。 協(xié)議有:TCP UDP,數(shù)據(jù)包一旦離開網(wǎng)卡即進入網(wǎng)絡(luò)傳輸層,port,ssl位于傳輸層,、
網(wǎng)絡(luò)層
進行邏輯地址尋址,實現(xiàn)不同網(wǎng)絡(luò)之間的路徑選擇。 協(xié)議有:ICMP IGMP IP(IPV4 IPV6) ARP RARP
數(shù)據(jù)鏈路層
建立邏輯連接、進行硬件地址尋址、差錯校驗 [2] 等功能。(由底層網(wǎng)絡(luò)定義協(xié)議) 將比特組合成字節(jié)進而組合成幀,用MAC地址訪問介質(zhì),錯誤發(fā)現(xiàn)但不能糾正。
物理層
建立、維護、斷開物理連接。(由底層網(wǎng)絡(luò)定義協(xié)議) TCP/IP 層級模型結(jié)構(gòu),應(yīng)用層之間的協(xié)議通過逐級調(diào)用傳輸層(Transport layer)、網(wǎng)絡(luò)層(Network Layer)和物理數(shù)據(jù)鏈路層(Physical Data Link)而可以實現(xiàn)應(yīng)用層的應(yīng)用程序通信互聯(lián)。 應(yīng)用層需要關(guān)心應(yīng)用程序的邏輯細節(jié),而不是數(shù)據(jù)在網(wǎng)絡(luò)中的傳輸活動。應(yīng)用層其下三層則處理真正的通信細節(jié)。在 Internet 整個發(fā)展過程中的所有思想和著重點都以一種稱為 RFC(Request For Comments)的文檔格式存在。針對每一種特定的 TCP/IP 應(yīng)用,有相應(yīng)的 RFC [3] 文檔。 一些典型的 TCP/IP 應(yīng)用有 FTP、Telnet、SMTP、SNTP、REXEC、TFTP、LPD、SNMP、NFS、INETD 等。RFC 使一些基本相同的 TCP/IP 應(yīng)用程序?qū)崿F(xiàn)了標(biāo)準(zhǔn)化,從而使得不同廠家開發(fā)的應(yīng)用程序可以互相通信 圖片: https://gss1.bdstatic.com/9vo3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D220/sign=591aacf100f79052eb1f403c3cf1d738/0dd7912397dda144d48ab350bbb7d0a20df48655.jpg超鏈接:https://www.cnblogs.com/wxd01... curl命令:掌握即成功
主機列表屬性:
down 主機故障直接隔離 backup 主機管用,但是一般不用,只有緊急或者繁忙的時候再用 max_fails 重試次數(shù),當(dāng)重試失敗次數(shù)達到一定程度,就終止給該主機發(fā)送請求 fail_timeout 當(dāng)重試失敗停止后,等待一段時間,繼續(xù)重試
調(diào)度算法:
內(nèi)置策略 雨露均沾 輪訓(xùn) 加權(quán)輪訓(xùn) fair 定向服務(wù) ip_hash 沒錢不用 擴展策略 自定義 第三方
圖片: https://uploader.shimo.im/f/9...
實踐: 加權(quán)輪訓(xùn) upstream backends { server 192.168.8.15:10086 weight=1; server 192.168.8.15:10087 weight=3; server 192.168.8.15:10088 weight=1; } ip_hash算法 upstream backends { ip_hash; *** ip_hash 加上這句話就實現(xiàn)了ip哈希 server 192.168.8.15:10086 weight=1; server 192.168.8.15:10087 weight=3; server 192.168.8.15:10088 weight=1; }url_hash算法
2.2.3 日志解析
日志定制是工作中很重要的意向內(nèi)容,特別是監(jiān)控網(wǎng)站的運行狀態(tài) 在 /etc/nginx/nginx.conf 文件中配置 日志格式定制: log_format 日志格式名 "內(nèi)置變量組成的日志格式 "; 日志格式使用: access_log 日志文件所在路徑 采用日志格式名; err_log 日志文件所在路徑 采用日志格式名;
$remote_addr 前一臺主機的ip地址,不一定是真實的客戶端IP
$remote_user 用于記錄遠程客戶端的用戶名稱(一般為“-”)
$time_local 用于記錄訪問時間和時區(qū)
$request 用于記錄請求的url以及請求方法
$status 響應(yīng)狀態(tài)碼,例如:200成功、404頁面找不到等。
$body_bytes_sent 給客戶端發(fā)送的文件主體內(nèi)容字節(jié)數(shù)
$http_referer 可以記錄用戶是從哪個鏈接訪問過來的
$http_user_agent 用戶所使用的代理(一般為瀏覽器)
日志定制案例:
圖片: https://uploader.shimo.im/f/g...
1 定制日志格式 2 在第一個代理上 設(shè)置兩個真實的報文頭 X-Real-IP X-Forwarded-For 3 方法一:在所有的主機上獲取 $http_x_forwarded_for 方法二:在最后一臺主機上設(shè)置 $http_x_real_ip 4 在后端主機上使用定制日志 root@itcast:/etc/nginx/conf.d# cat upstream.conf backends.conf upstream backends { server 192.168.8.15:10086; } server{ listen 80; location / { proxy_pass http://backends; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } server { listen 192.168.8.15:10086; root /var/www/html/huang; index index.html; access_log /var/log/nginx/huang.log proxy_format; real_ip_header X-Forwarded-For; # set_real_ip_from 192.168.142.0/17 (監(jiān)聽特定網(wǎng)段的ip) -# real_ip_recursive on; (多層代理要開啟這個才能獲得真實的ip地址) location / { try_files $uri $uri/ =404; } } 拓展: 分析一下,real_ip_header 和 X-Forwarded-For 在多層代理中的一個表示樣式
real_ip_header 和 X-Forwarded-For的比較
real_ip : 用于記錄真實客戶端IP,如果只有一層代理的話,這兩者是一樣的,但是如果客戶端之前就使用了正向代理的話就會出現(xiàn)代理IP,不是真實IP,這時要開啟real_ip_recursive
X-Forwarded-For:用于記錄代理信息的,每經(jīng)過一層代理就記錄一次(匿名代理除外)
eg:來自4.4.4.4的一個請求,header包含這樣一行
X-Forwarded-For: 1.1.1.1, 2.2.2.2, 3.3.3.3
代表 請求由1.1.1.1發(fā)出,經(jīng)過三層代理,第一層是2.2.2.2,第二層是3.3.3.3,而本次請求的來源IP4.4.4.4是第三層代理
而X-Real-IP
// 最后一跳是正向代理,可能會保留真實客戶端IP
X-Real-IP: 1.1.1.1
// 最后一跳是反向代理,比如Nginx,一般會是與之直接連接的客戶端IP
X-Real-IP: 3.3.3.3
多層代理使用X-Forwarded-For的效果好于X-Real-IP
附帶:最全的真實ip獲取,涉及CDN,XFF欺騙等
多級代理下的Nginx獲取用戶真實IP地址的方法
https://blog.csdn.net/abc8631...
http_realip_module這個模塊,它包括三個指令:
1、set_real_ip_from 是指接受從哪個信任前代理處獲得真實用戶ip
2、real_ip_header 是指從接收到報文的哪個http首部去獲取前代理傳送的用戶ip
3、real_ip_recursive 是否遞歸地排除直至得到用戶ip(默認為off)
首先,real_ip_header 指定一個http首部名稱,默認是X-Real-Ip,假設(shè)用默認值的話,nginx在接收到報文后,會查看http首部X-Real-Ip。
(1)如果有1個IP,它會去核對,發(fā)送方的ip是否在set_real_ip_from指定的信任ip列表中。如果是被信任的,它會去認為這個X-Real-Ip中的IP值是前代理告訴自己的,用戶的真實IP值,于是,它會將該值賦值給自身的$remote_addr變量;如果不被信任,那么將不作處理,那么$remote_addr還是發(fā)送方的ip地址。
(2)如果X-Real-Ip有多個IP值,比如前一方代理是這么設(shè)置的:proxy_set_header X-Real-Ip $proxy_add_x_forwarded_for;
得到的是一串IP,那么此時real_ip_recursive 的值就至關(guān)重要了。nginx將會從ip列表的右到左,去比較set_real_ip_from 的信任列表中的ip。如果real_ip_recursive為off,那么,當(dāng)最右邊一個IP,發(fā)現(xiàn)是信任IP,即認為下一個IP(右邊第二個)就是用戶的真正IP;如果real_ip_recursive為on,那么將從右到左依次比較,知道找到一個不是信任IP為止。然后同樣把IP值復(fù)制給$remote_addr。(可以參考上面的例子,幫助理解這個過程)
因此,明白了整個過程后,我們知道,用realip模塊是非常好用的,能滿足各種獲取用戶IP的需求,而且不會受到XFF欺騙!
那么問題來了,后端除了想獲取用戶ip,也想獲取代理ip,怎么辦呢?那么此時$proxy_add_x_forwarded_for派上用場。只需要在每一層代理IP,都保持一個良好的習(xí)慣:proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;然后后端得到的X-Forwarded-For首部,依次就是用戶IP到各層代理的IP,至于最靠近自己的代理ip,各種web開發(fā)語言都有獲取發(fā)送方真實IP的接口了,然后你知道該怎么做了吧?
第 3 章 Docker快速入門
3.1 docker快速入門 3.1.1 docker是什么 快速解決生產(chǎn)問題的一種技術(shù)手段 --- 使用范圍相當(dāng)廣 C/S客戶端服務(wù)器 三大組成部分: 鏡像 構(gòu)建 build 倉庫 運輸 ship 容器 運行 running
特點:多(運用場景多)快(更新,使用)好(好多人使用)省(開源,省錢,好用),依賴操作系統(tǒng),依賴網(wǎng)絡(luò),銀行U盾等場景(模擬的軟件環(huán)境不是真實的硬件環(huán)境,模擬不出來)不能使用
3.1.2 部署docker 1 安裝依賴軟件 apt-get update apt-get install apt-transport-https ca-certificates curl software-properties-common -y 2 安裝軟件 curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" apt-get update apt-get install docker-ce
如果這里的走不通報錯的話,可以按照下面步驟來
報錯:Process: 3485 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock (code=exited, status=1/FAILURE)
走加速器
3.1.3 docker加速器(有好多免費的,下面是北京科大的,18.04)
其他版本的信息也有:http://mirrors.ustc.edu.cn/he...
1.cat /etc/docker/daemon.json,加上后面紅色字體
{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"],"insecure-registries":[]}
{"registry-mirrors": ["http://f1361db2.m.daocloud.io"], "insecure-registries": ["192.168.142.145:5000"]}
還是這個最靠譜
注意: daemon.json 文件存在的前提,得有 /etc/docker/ 目錄 這個目錄是docker啟動后才創(chuàng)建的 基本命令: docker -v docker info ===================================================================== 3.2 鏡像管理 3.2.1 鏡像簡介 特點: 只讀文件 3.2.2 搜索、查看、獲取、歷史
避免每次都要輸入sudo,可以設(shè)置用戶全信啊,注意執(zhí)行后必須重啟后登錄
sudo usermod -a -G docker $USER
docker search docker images docker pull docker history 鏡像名 ----- 可以看到版本變化信息,是否安全 3.2.3 重命名、刪除 docker tag image_old_name:old_version image_new_name:new_version 注意:版本號不寫,表示 latest docker rmi image_name|image_id 注意:如果image_id一樣,那么就用 image_name:version形式來刪除 3.2.4 導(dǎo)出、導(dǎo)入 docker save -o 鏡像文件名 docker鏡像名 docker load < 鏡像文件名
=======================================================================
3.3 容器管理
3.3.1 容器簡介 特點:
容器本身就是一個進程
在docker中我們可以為所欲為的地方 3.3.2 查看、啟動 docker ps docker run -d 守護進程 -i 接受輸入的命令 -t 用于接受命令的終端 --name 給容器命名 (docker run -d --name test nginx) 3.3.3 關(guān)閉、刪除 docker stop|start docker rm | rm -f docker ps -a -q 獲取所有容器的ID 小技巧: docker rm -f $(docker ps -a -q) 批量刪除所有的容器 注意:生產(chǎn)中不要用 3.3.4 進入、退出 docker exec -it 容器名稱 /bin/bash exit 3.3.5 基于容器創(chuàng)建鏡像 docker commit -m "注釋" -a "作者" 容器id 新鏡像名:新鏡像版本 3.3.6 查看正在運行的容器日志、信息 docker logs 容器id 查看容器的日志信息 docker inspect 容器id 查看容器的配置內(nèi)容 注意: 二次開發(fā)好好的了解一下inspect命令的結(jié)果內(nèi)容
為了避免docker每次命令都輸入sudo,可以設(shè)置用戶權(quán)限,注意執(zhí)行后需要注銷重新登錄
sudo usermod -a -G docker $USER3.4 倉庫管理 3.4.1 倉庫簡介 分類: 安全角度 安全倉庫 不安全 位置角度 本地倉庫 私有倉庫 registry harbor 公有倉庫 3.4.2 私有倉庫部署 流程: 1 獲取倉庫鏡像 2 運行鏡像倉庫 3 倉庫權(quán)限配置 4 鏡像打標(biāo)簽 5 推送拉取測試 流程: 1 獲取倉庫鏡像 docker pull registry 2 運行鏡像倉庫 docker run -d --name registry1 --restart=always -p 5000:5000 registry 3 倉庫權(quán)限配置 root@itcast:~# cat /etc/docker/daemon.json {"registry-mirrors": ["http://74f21445.m.daocloud.io"], "insecure-registries": ["192.168.8.15:5000"]} 4 鏡像打標(biāo)簽 docker tag busybox 192.168.8.15:5000/busybox:v0.1 5 推送拉取測試 docker push 192.168.8.15:5000/busybox:v0.1 docker pull 192.168.8.15:5000/busybox:v0.1 注意事項: 1 運行倉庫的時候,添加 --restart參數(shù) 2 推送鏡像的時候,鏡像的名稱應(yīng)該攜帶倉庫地址 拓展: 1 安全倉庫的搭建 2 攜帶用戶名和密碼的安全倉庫 3 企業(yè)級倉庫harbor的搭建 4 私有倉庫里面鏡像的刪除-====================================================-------===============
3.5 數(shù)據(jù)管理
3.5.1 數(shù)據(jù)卷簡介 宿主機和容器間共享數(shù)據(jù)的一種機制 -v 宿主機文件:容器文件路徑 3.5.2 數(shù)據(jù)卷實踐 目錄 docker run -d -v /tmp:/test1 nginx 文件 docker run -d --name hah -v /tmp/nihao.txt:/nicai/h.py nginx 需求: 如果我準(zhǔn)備啟動10個容器每個容器我都同時掛載2個文件 思路1: 一個數(shù)據(jù)卷操作的命令執(zhí)行10遍 3.5.3 數(shù)據(jù)卷容器簡介 場景: 批量數(shù)據(jù)卷的操作 步驟: 1 創(chuàng)建數(shù)據(jù)卷容器 注意:數(shù)據(jù)卷容器不會啟動 2 啟動應(yīng)用容器的時候,掛載數(shù)據(jù)卷容器 3.5.4 數(shù)據(jù)卷容器實踐 docker create -v /tmp/:/test -v /suzhuji:/jizhusu -v /su:/us --name vc-test nginx docker ps docker ps -a docker inspect 5d8526a2abe9 docker ps -a docker run --volumes-from vc-test --name nginx-test1 nginx docker run -d --volumes-from vc-test --name nginx-test1 nginx docker run -d --volumes-from vc-test --name nginx-test2 nginx docker run -d --volumes-from vc-test --name nginx-test3 nginx docker ps docker exec -it nginx-test2 /bin/bash docker exec -it nginx-test3 /bin/bash 拓展: 容器里面的數(shù)據(jù)備份和還原
3.6 網(wǎng)絡(luò)管理 3.6.1 端口映射詳解 隨機端口的起始端口號是:32768 每次使用隨機端口映射,都會在之前的端口號基礎(chǔ)上+1 好處: 無需關(guān)心容器的端口號和宿主機上的端口號 所有的容器永遠不可能沖突 3.6.2 隨機映射實踐 docker run -d -P nginx 3.6.3 指定映射實踐 -p [宿主機ip]:[宿主機port]:[容器端口] 注意: 宿主機ip不寫 表示 0.0.0.0 宿主機port不寫,表示 隨機端口 容器端口必須寫 生產(chǎn)中在使用指定端口映射的時候,一定要合理的安排端口的分配 docker run -d -p 192.168.8.15:999:80 nginx docker run -d -p :999:80 nginx docker run -d -p :998:80 nginx docker run -d -p ::80 nginx 拓展: 1 docker的網(wǎng)絡(luò)模型 (5種) docker自帶的網(wǎng)絡(luò)模型:bridge(默認) none host docker其他的網(wǎng)絡(luò)模型:container overlay 2 docker 網(wǎng)絡(luò)模型簡單實踐 3 docker overlay網(wǎng)絡(luò)模型實踐 weave、flannel、calico、canel、openswitch
4.1 Dockerfile
4.1.1 Dockerfile簡介 作用; 自動化的將我們的定制docker鏡像創(chuàng)建出來 類似于我們的python腳本 1 命令必須可執(zhí)行 2 目標(biāo)需要相應(yīng)的流程來配合 一句話: 在使用Dockerfile之前,手工執(zhí)行一定要成功 使用準(zhǔn)則: 大 文件名 Dockerfile 首字母大寫 空 Dockerfile文件在一個空目錄下(只存放和Dockerfile相關(guān)的內(nèi)容) 單 構(gòu)建后的docker鏡像盡量只有一個功能 少 Dockerfile里面的命令,越少越好, 即使是5條命令實現(xiàn)一個目的,也要把這5條命令放在一行來執(zhí)行 Dockerfile的指令類型: 1 來源 2 維護者 3 定制命令 4 容器啟動時候的第一條命令 Dockerfile的使用 docker build -t 鏡像名稱:鏡像版本 Dockerfile文件所在路徑 注意: Dockerfile文件所在路徑 可以是相對路徑,也可以是絕對路徑
4.1.2 Dockerfile快速入門
跨主機免密碼認證: 1 自己有鑰匙和鎖 2 把鎖掛載房東家屋子門上 3 房東同意我掛鎖 4 鑰匙和鎖測試一下 跨主機免密碼認證: 1 主機1 自己創(chuàng)建秘鑰對兒 2 主機2 使用主機1上面的公鑰文件 3 主機2 使用公鑰文件來進行用戶登錄的認證 4 主機1 登錄一下主機2 測試一下公鑰和私鑰的認證是否成功 mkdir /docker/images/ssh -p cd /docker/images/ssh ssh-keygen -t rsa cat ~/.ssh/id_rsa.pub > authorized_keys root@admina-virtual-machine:/docker/images/ssh# cat Dockerfile # 構(gòu)建一個基于ubuntu的ssh定制鏡像 # 基礎(chǔ)鏡像 FROM ubuntu # 鏡像作者 MAINTAINER President.Wang 000000@qq.com # 執(zhí)行命令 # 增加軟件源 -- 由于課堂網(wǎng)絡(luò)原因,我們不執(zhí)行這一步 # ADD sources.list /etc/apt/sources.list # 安裝 ssh 服務(wù) RUN apt-get update && apt-get install -y openssh-server curl vim net-tools && mkdir -p /var/run/sshd && mkdir -p /root/.ssh && sed -i "s/.*pam_loginuid.so/#&/" /etc/pam.d/sshd && apt-get autoclean && apt-get clean && apt-get autoremove # 復(fù)制配置文件到相應(yīng)位置,并賦予腳本可執(zhí)行權(quán)限 ADD authorized_keys /root/.ssh/authorized_keys # 對外端口 EXPOSE 22 # 啟動ssh ENTRYPOINT ["/usr/sbin/sshd","-D"] docker build -t ubuntu-ssh:v0.1 . docker run -d -p 10086:22 ubuntu-ssh:v0.1 ssh 192.168.8.14 -p 10086
======================================================================
4.1.3 基礎(chǔ)指令詳解
FROM MAINTAINER RUN EXPOSE ENTRYPOINT 4.1.4 文件編輯指令詳解 ADD 如果傳輸?shù)氖菈嚎s包,會自動在容器里面解壓 COPY 純純的拷貝動作 VOLUME 產(chǎn)生一個共享的目錄 # ADD yasuobao.tar.gz /test/ # COPY yasuobao.tar.gz /copy/ # COPY authorized_keys /copy/ # VOLUME ["VOLUMES"] 4.1.5 環(huán)境指令詳解 需求: mysql 鏡像,設(shè)定好了登錄用戶名USERNAEM和密碼PASSWD 基于鏡像創(chuàng)建的容器,我們想使用這兩個變量來登錄, docker run -e ENV 在構(gòu)件鏡像的時候,給他設(shè)定一個環(huán)境變量 WORKDIR 切換工作目錄 注意: 如果切換工作目錄后,并沒有執(zhí)行回退的WORKDIR指令,那么就會一直在指定的目錄下 ENV USERNAME=itcast ENV PASSWD=itcast WORKDIR ["/nihao/hah"] RUN ["touch","itcast.txt"]
=====================================================================
4.2 Dockerfile構(gòu)建django環(huán)境(拓展)
4.2.1 項目描述 4.2.2 手工部署django項目環(huán)境 4.2.3 Dockerfile案例實踐 如何在生產(chǎn)中定制標(biāo)準(zhǔn)的docker鏡像 1 標(biāo)準(zhǔn)的工作目錄 /docker/images/功能目錄 2 標(biāo)準(zhǔn)的手工流程 按照我們課件上的分析流程做出來手工執(zhí)行方案 需求 -- 方案分析 -- 技術(shù)關(guān)鍵點 -- 梳理出實施方案 注意: 在進入到Dockerfile步驟之前,一定要保證手工執(zhí)行是成功的 而且必須報手工執(zhí)行的命令梳理出來 3 標(biāo)準(zhǔn)的Dockerfile轉(zhuǎn)換
3.1 根據(jù)手工梳理出來的命令,準(zhǔn)備Dockerfile所依賴的軟件和文件,放到專用的Dockerfile目錄里
3.2 分析手工命令,將其轉(zhuǎn)換成Dockefile指令 3.3 整理Dockefile指令 3.4 執(zhí)行Dockefile文件 3.5 整體測試
===================================================================
項目初期
單機階段 所有服務(wù)都部署到一臺主機 應(yīng)用數(shù)據(jù)分離階段 數(shù)據(jù)庫有壓力的時候,多帶帶部署 頁面動靜分離階段 web服務(wù)有壓力的時候,動態(tài)請求和靜態(tài)請求分別管理 應(yīng)用|數(shù)據(jù)緩存階段 采取數(shù)據(jù)緩存的策略,實現(xiàn)有限的資源,創(chuàng)造更高的效益 拓展分析: 1 網(wǎng)站項目的架構(gòu)是一次性做出來的么? 不是,一步一步演變過來的 2 演變的措施是一股腦全部實現(xiàn)么? 不是,遇到什么問題就解決什么問題 3 每個階段的措施是一次的么? 不是,前面的措施,在后面也可以用,是一個選項
5.2 項目運營
5.2.1 網(wǎng)站分析 常見術(shù)語: 通用的: IP 獨立ip數(shù) 日志里面的關(guān)鍵字 獨立的訪問ip PV 頁面訪問量 日志里面的關(guān)鍵字 UV 獨立的用戶數(shù)量 日志里面的關(guān)鍵字 VV 用戶訪問的頁面數(shù)量 日志里面的關(guān)鍵字 專用的: BR 頁面跳出率 -- 辣眼睛 CR 頁面轉(zhuǎn)化率 -- 大眼睛 常見的指標(biāo)分析方法: 定制的 日志分析、監(jiān)控平臺、等等 其他的 通用的網(wǎng)站統(tǒng)計工具
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/27801.html
摘要:無論這個連接是外部主動建立的,還是內(nèi)部建立的。協(xié)議有表示層數(shù)據(jù)的表示安全壓縮。在整個發(fā)展過程中的所有思想和著重點都以一種稱為的文檔格式存在。 部署基礎(chǔ)知識url:協(xié)議://網(wǎng)站地址:端口(/)路徑地址?參數(shù)eg: http://www.baidu.com:80/abc/dd/ www.baidu.com找服務(wù)器 80端口:找服務(wù)器上提供服務(wù)的應(yīng)用 nginx uri:/ab...
摘要:阻塞,非阻塞首先,阻塞這個詞來自操作系統(tǒng)的線程進程的狀態(tài)模型網(wǎng)絡(luò)爬蟲基本原理一后端掘金網(wǎng)絡(luò)爬蟲是捜索引擎抓取系統(tǒng)的重要組成部分。每門主要編程語言現(xiàn)未來已到后端掘金使用和在相同環(huán)境各加載多張小圖片,性能相差一倍。 2016 年度小結(jié)(服務(wù)器端方向)| 掘金技術(shù)征文 - 后端 - 掘金今年年初我花了三個月的業(yè)余時間用 Laravel 開發(fā)了一個項目,在此之前,除了去年換工作準(zhǔn)備面試時,我并...
摘要:阻塞,非阻塞首先,阻塞這個詞來自操作系統(tǒng)的線程進程的狀態(tài)模型網(wǎng)絡(luò)爬蟲基本原理一后端掘金網(wǎng)絡(luò)爬蟲是捜索引擎抓取系統(tǒng)的重要組成部分。每門主要編程語言現(xiàn)未來已到后端掘金使用和在相同環(huán)境各加載多張小圖片,性能相差一倍。 2016 年度小結(jié)(服務(wù)器端方向)| 掘金技術(shù)征文 - 后端 - 掘金今年年初我花了三個月的業(yè)余時間用 Laravel 開發(fā)了一個項目,在此之前,除了去年換工作準(zhǔn)備面試時,我并...
摘要:王者榮耀項目組高級測試工程師工程師文化團隊中的實踐本文不是一篇入門教程,而是從結(jié)合實際場景,闡述在團隊協(xié)作中如何去好好地應(yīng)用。 CI Weekly 圍繞『 軟件工程效率提升』 進行一系列技術(shù)內(nèi)容分享,包括國內(nèi)外持續(xù)集成、持續(xù)交付,持續(xù)部署、自動化測試、 DevOps 等實踐教程、工具與資源,以及一些工程師文化相關(guān)的程序員 Tips 。同步于 flow.ci Blog、微信公眾號、官方微...
閱讀 3092·2023-04-25 20:43
閱讀 1726·2021-09-30 09:54
閱讀 1598·2021-09-24 09:47
閱讀 2882·2021-09-06 15:02
閱讀 3520·2021-02-22 17:09
閱讀 1242·2019-08-30 15:53
閱讀 1447·2019-08-29 17:04
閱讀 1967·2019-08-28 18:22