摘要:無論這個連接是外部主動建立的,還是內部建立的。協議有表示層數據的表示安全壓縮。在整個發展過程中的所有思想和著重點都以一種稱為的文檔格式存在。
部署基礎知識
url:協議://網站地址:端口(/)路徑地址?參數
eg: http://www.baidu.com:80/abc/dd/
www.baidu.com找服務器
80端口:找服務器上提供服務的應用 nginx
uri:/abc/dd/
nginx的pid文件是可變化的
等號兩邊不能空格,否則會報錯
tail -f 1.txt 實時監控文件變化
1.1 部署基礎
1.11.1 項目生命周期
傳統項目生命周期 階段
? 調研階段 找方向點
設計階段 方向點可視化 產品:產品需求文檔、項目里程表 開發階段 產品階段功能實現 測試階段 保證產品的階段功能 運營階段 項目部署 + 運營維護 關鍵點: 階段間是有前后關系依賴的 階段間項目的推進是有文檔來主導 理想化的生命周期和開發模型
1.2新型項目周期
軟件項目: 一個產品被拆分成了非常多的子功能 團隊組織:高效協作,溝通 圖的理解: 四個圈串在一起 --- 子功能的完整周期 單個圈 --- 崗位的工作內容 圖片: https://uploader.shimo.im/f/hRwe365QitwNgyS7.png 團隊組織間的高效協作是很重要的
? 流程:
1 根據需求文檔來梳理網站的目標架構 2 分析產品需求文檔的功能,來梳理部署結點 部署節點示意圖:
圖片: https://uploader.shimo.im/f/U...
3 根據部署結點去互聯網上梳理各種解決方案(根據業務需求 4 整合所有的解決方案,-- 初版部署方案 5 根據實際的公司業務情況,對初版部署方案進行優化調整
1.3 部署環境:
個人開發環境 內容:項目子模塊 公司開發環境 內容:項目模塊間聯調 環境一定要和線上環境一致 測試環境 內容:項目產品質量保證 預發布環境 內容:項目產品質量保證 線上環境 內容:項目產品部署+維護
拓展: 環境之間彼此隔離
第 2 章 Nginx進階
2.1 Nginx快速入門 2.1.1 Nginx簡介 方向: web服務 反向代理服務器、緩存服務器、郵件服務器 ****** web 反向代理 ***** 緩存 特點: 成本低 資源占用少 模塊化設計 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 注意 如果軟件安裝過程中,由于遠程倉庫安全限制方面的原因導致無法安裝成功,使用 --allow-unauthenticated 參數 服務啟動命令:(linux自帶的) systemctl start|stop|restart|reload nginx *** nginx服務命令: nginx -t 每次修改配置文件后,都要檢查配置文件,如果錯誤即使啟動nginx也不生效更改的內容 *** nginx -s stop|reload 停止|重載 注意nginx -s reload不需要關閉并重新打開nginx進程,只需要將配置信息重新加載就可以了 其他命令:
查看服務的端口信息:
netstat -tnulp | grep nginx
nginx目錄結構:
前提:使用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 的配置文件結構:
全局配置段
http配置段
server配置段 -----項目或者應用的網站
location配置段 ------網站里面的文件 -----/var/www/html
nginx的訪問原理:
瀏覽器拆分url請求:
地址和端口 和路徑關鍵字
根據地址找服務器 ------nginx服務器
根據端口找服務器上面的應用或者框架 -------server配置段
根據路徑關鍵字找對應的文件 ------location配置段
---------------------------------------------- lscpu 查看cpu信息,全局配置段里面的worker_processes 是根據這個來設置的,auto的話是一樣多的,也可以定制
-----------------------------------------------默認的worker_connections:768
高并發的一個配置點: worker_procees 一般是和cpu內核數相匹配的,多開的話可能會造成影響主進程調度,占用CPU資源,適當的話就剛剛好,實際運行時都會多一個,這個就是主進程,負責調度的,
worker_connections:這個屬性是指單個工作進程可以允許同時建立外部連接的數量。無論這個連接是外部主動建立的,還是內部建立的。這里需要注意的是,一個工作進程建立一個連接后,進程將打開一個文件副本。所以這個數量還受操作系統設定的,進程最大可打開的文件數有關。
兩個命令:ps -elf | grep nginx查看進程配置信息
cat /proc/pid/limits 查看硬盤支持的最大可打開文件數
圖片: https://uploader.shimo.im/f/m...
nginx -s reload命令重新啟動Nginx。
https://blog.csdn.net/zs74294...
worker_rlimit_nofile配置要和系統的單進程打開文件數一致,
根據我配置實踐,
服務器是“多個CPU+gzip+網站總文件大小大于內存”的環境,worker_processes設置為CPU個數的兩倍比較好。
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 防止網絡阻塞
tcp_nopush 防止網絡阻塞
autoindex 開啟目錄列表訪問,適合下載服務器
keepalive_timeout 保持長連接
include 將相關的配置文件導入到文件中
server常見配置段:
格式:
server {
listen 端口;
server_name 主機名;
root 服務器響應請求的html文件所在路徑 /var/www/html
index 定義響應請求后返回的文件名稱或者格式; index index.html index.htm index.nginx-debian.html;
return 響應請求返回的http狀態碼;
}
server {
listen 88; 監聽的端口(優先匹配)
server_name a.com 端口相同的情況下匹配server_name
使用原則:
優先使用完整樣式,然后使用前綴正則樣式,最后使用后綴正則樣式,如果正則樣式相同的時候,匹配最長,
否則就走非法規則。
非法域名/IP,表示請求到該主機上一個不存在的IP或者域名
}
server {
listen 88;
server_name b.com
location配置段
語法: location 匹配條件 匹配樣式 {執行動作} 匹配條件: 1 精確匹配 = 2 優先正則 ^~ 3 普通正則 ~區分大小寫 !~區分大小寫不匹配 ~*不區分大小寫 !~* 雙重否定 4 默認規則 空 匹配樣式: 針對的是url 里面的路徑部分 location ~ .(jpe?g)$ {} location ^~ .(jpeg)$ {}
jpeg
jg ~* !~ Jpg location = /image { http://a.com/image location = / { location ~ .(gif|jpg|png|js|css)$ { location !~* .xhtml$ { ? ?#精確規則A ? ? #正則規則D ? ? #正則規則G } } } location = /login { location ~* .png$ { location / { ? ?#精確規則B ? ? #正則規則E ? ? #通用規則H } } } location ^~ /static/ { location !~ .xhtml$ { ? ?#優先規則C ? ? #正則規則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: 網站質量頁面,監控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; 安全權限配置點,不允許別人訪問 deny all; } } location實踐3:上傳服務器 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 反向代理
代理: 分類: 正向代理: 代替公司內網的客戶端去互聯網上訪問 相親的時候,自己的照片 反向代理: 代替公司內網的服務器向互聯網提供服務 相親的時候,媒婆說的女方形象 拓展: 正向解析和反向解析 --- dns知識范疇
王樹森 18:01:28 (多人發送)
2.2 Nginx進階知識 2.2.1 反向代理 代理: 分類: 正向代理: 代替公司內網的客戶端去互聯網上訪問 相親的時候,自己的照片 反向代理: 代替公司內網的服務器向互聯網提供服務 相親的時候,媒婆說的女方形象 拓展: 正向解析和反向解析 --- dns知識范疇
正向解析:域名解析為IP
反向解析:IP解析為域名 https://www.cnblogs.com/weiap...
關鍵配置: 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; } } 關鍵點: proxy_pass 后面的地址結尾的"/" 很重要 配置示例: location /html/ { 1 proxy_pass http://proxy.com; 2 proxy_pass http://proxy.com/; } 請求地址: http://domain.com/html/test.js 結果: 如果是 1 ,由于地址后面沒有 "/", 所以$uri(/html/test.js)作為一個內容和我們的地址拼接在一起 http://proxy.com/html/test.js 如果是 2 ,由于地址后面有 "/", 所以$uri(/html/test.js)中關鍵字之后的 的內容 (/test.js),和代理的地址拼接在一起 http://proxy.com/test.js
——————————————————————————————————————————
2.2.2 負載均衡
負載均衡是一種特殊的反向代理,區別在于團伙打群架 負載均衡的分類: 四層負載 port 傳輸層 七層負載 url 應用層 upstream 的格式: upstream 主機群名稱 { server 主機1; server 主機2; ... server 主機3; } 關鍵點: 配置關鍵字: 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七層模型
應用層
網絡服務與最終用戶的一個接口。 協議有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP
表示層
數據的表示、安全、壓縮。(在五層模型里面已經合并到了應用層) 格式有,JPEG、ASCll、DECOIC、加密格式等
會話層
建立、管理、終止會話。(在五層模型里面已經合并到了應用層) 對應主機進程,指本地主機與遠程主機正在進行的會話
傳輸層
定義傳輸數據的協議端口號,以及流控和差錯校驗。 協議有:TCP UDP,數據包一旦離開網卡即進入網絡傳輸層,port,ssl位于傳輸層,、
網絡層
進行邏輯地址尋址,實現不同網絡之間的路徑選擇。 協議有:ICMP IGMP IP(IPV4 IPV6) ARP RARP
數據鏈路層
建立邏輯連接、進行硬件地址尋址、差錯校驗 [2] 等功能。(由底層網絡定義協議) 將比特組合成字節進而組合成幀,用MAC地址訪問介質,錯誤發現但不能糾正。
物理層
建立、維護、斷開物理連接。(由底層網絡定義協議) TCP/IP 層級模型結構,應用層之間的協議通過逐級調用傳輸層(Transport layer)、網絡層(Network Layer)和物理數據鏈路層(Physical Data Link)而可以實現應用層的應用程序通信互聯。 應用層需要關心應用程序的邏輯細節,而不是數據在網絡中的傳輸活動。應用層其下三層則處理真正的通信細節。在 Internet 整個發展過程中的所有思想和著重點都以一種稱為 RFC(Request For Comments)的文檔格式存在。針對每一種特定的 TCP/IP 應用,有相應的 RFC [3] 文檔。 一些典型的 TCP/IP 應用有 FTP、Telnet、SMTP、SNTP、REXEC、TFTP、LPD、SNMP、NFS、INETD 等。RFC 使一些基本相同的 TCP/IP 應用程序實現了標準化,從而使得不同廠家開發的應用程序可以互相通信 圖片: https://gss1.bdstatic.com/9vo3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D220/sign=591aacf100f79052eb1f403c3cf1d738/0dd7912397dda144d48ab350bbb7d0a20df48655.jpg超鏈接:https://www.cnblogs.com/wxd01... curl命令:掌握即成功
主機列表屬性:
down 主機故障直接隔離 backup 主機管用,但是一般不用,只有緊急或者繁忙的時候再用 max_fails 重試次數,當重試失敗次數達到一定程度,就終止給該主機發送請求 fail_timeout 當重試失敗停止后,等待一段時間,繼續重試
調度算法:
內置策略 雨露均沾 輪訓 加權輪訓 fair 定向服務 ip_hash 沒錢不用 擴展策略 自定義 第三方
圖片: https://uploader.shimo.im/f/9...
實踐: 加權輪訓 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 加上這句話就實現了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 日志解析
日志定制是工作中很重要的意向內容,特別是監控網站的運行狀態 在 /etc/nginx/nginx.conf 文件中配置 日志格式定制: log_format 日志格式名 "內置變量組成的日志格式 "; 日志格式使用: access_log 日志文件所在路徑 采用日志格式名; err_log 日志文件所在路徑 采用日志格式名;
$remote_addr 前一臺主機的ip地址,不一定是真實的客戶端IP
$remote_user 用于記錄遠程客戶端的用戶名稱(一般為“-”)
$time_local 用于記錄訪問時間和時區
$request 用于記錄請求的url以及請求方法
$status 響應狀態碼,例如:200成功、404頁面找不到等。
$body_bytes_sent 給客戶端發送的文件主體內容字節數
$http_referer 可以記錄用戶是從哪個鏈接訪問過來的
$http_user_agent 用戶所使用的代理(一般為瀏覽器)
日志定制案例:
圖片: https://uploader.shimo.im/f/g...
1 定制日志格式 2 在第一個代理上 設置兩個真實的報文頭 X-Real-IP X-Forwarded-For 3 方法一:在所有的主機上獲取 $http_x_forwarded_for 方法二:在最后一臺主機上設置 $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 (監聽特定網段的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,如果只有一層代理的話,這兩者是一樣的,但是如果客戶端之前就使用了正向代理的話就會出現代理IP,不是真實IP,這時要開啟real_ip_recursive
X-Forwarded-For:用于記錄代理信息的,每經過一層代理就記錄一次(匿名代理除外)
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發出,經過三層代理,第一層是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,假設用默認值的話,nginx在接收到報文后,會查看http首部X-Real-Ip。
(1)如果有1個IP,它會去核對,發送方的ip是否在set_real_ip_from指定的信任ip列表中。如果是被信任的,它會去認為這個X-Real-Ip中的IP值是前代理告訴自己的,用戶的真實IP值,于是,它會將該值賦值給自身的$remote_addr變量;如果不被信任,那么將不作處理,那么$remote_addr還是發送方的ip地址。
(2)如果X-Real-Ip有多個IP值,比如前一方代理是這么設置的:proxy_set_header X-Real-Ip $proxy_add_x_forwarded_for;
得到的是一串IP,那么此時real_ip_recursive 的值就至關重要了。nginx將會從ip列表的右到左,去比較set_real_ip_from 的信任列表中的ip。如果real_ip_recursive為off,那么,當最右邊一個IP,發現是信任IP,即認為下一個IP(右邊第二個)就是用戶的真正IP;如果real_ip_recursive為on,那么將從右到左依次比較,知道找到一個不是信任IP為止。然后同樣把IP值復制給$remote_addr。(可以參考上面的例子,幫助理解這個過程)
因此,明白了整個過程后,我們知道,用realip模塊是非常好用的,能滿足各種獲取用戶IP的需求,而且不會受到XFF欺騙!
那么問題來了,后端除了想獲取用戶ip,也想獲取代理ip,怎么辦呢?那么此時$proxy_add_x_forwarded_for派上用場。只需要在每一層代理IP,都保持一個良好的習慣:proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;然后后端得到的X-Forwarded-For首部,依次就是用戶IP到各層代理的IP,至于最靠近自己的代理ip,各種web開發語言都有獲取發送方真實IP的接口了,然后你知道該怎么做了吧?
第 3 章 Docker快速入門
3.1 docker快速入門 3.1.1 docker是什么 快速解決生產問題的一種技術手段 --- 使用范圍相當廣 C/S客戶端服務器 三大組成部分: 鏡像 構建 build 倉庫 運輸 ship 容器 運行 running
特點:多(運用場景多)快(更新,使用)好(好多人使用)省(開源,省錢,好用),依賴操作系統,依賴網絡,銀行U盾等場景(模擬的軟件環境不是真實的硬件環境,模擬不出來)不能使用
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啟動后才創建的 基本命令: docker -v docker info ===================================================================== 3.2 鏡像管理 3.2.1 鏡像簡介 特點: 只讀文件 3.2.2 搜索、查看、獲取、歷史
避免每次都要輸入sudo,可以設置用戶全信啊,注意執行后必須重啟后登錄
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 導出、導入 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 關閉、刪除 docker stop|start docker rm | rm -f docker ps -a -q 獲取所有容器的ID 小技巧: docker rm -f $(docker ps -a -q) 批量刪除所有的容器 注意:生產中不要用 3.3.4 進入、退出 docker exec -it 容器名稱 /bin/bash exit 3.3.5 基于容器創建鏡像 docker commit -m "注釋" -a "作者" 容器id 新鏡像名:新鏡像版本 3.3.6 查看正在運行的容器日志、信息 docker logs 容器id 查看容器的日志信息 docker inspect 容器id 查看容器的配置內容 注意: 二次開發好好的了解一下inspect命令的結果內容
為了避免docker每次命令都輸入sudo,可以設置用戶權限,注意執行后需要注銷重新登錄
sudo usermod -a -G docker $USER3.4 倉庫管理 3.4.1 倉庫簡介 分類: 安全角度 安全倉庫 不安全 位置角度 本地倉庫 私有倉庫 registry harbor 公有倉庫 3.4.2 私有倉庫部署 流程: 1 獲取倉庫鏡像 2 運行鏡像倉庫 3 倉庫權限配置 4 鏡像打標簽 5 推送拉取測試 流程: 1 獲取倉庫鏡像 docker pull registry 2 運行鏡像倉庫 docker run -d --name registry1 --restart=always -p 5000:5000 registry 3 倉庫權限配置 root@itcast:~# cat /etc/docker/daemon.json {"registry-mirrors": ["http://74f21445.m.daocloud.io"], "insecure-registries": ["192.168.8.15:5000"]} 4 鏡像打標簽 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參數 2 推送鏡像的時候,鏡像的名稱應該攜帶倉庫地址 拓展: 1 安全倉庫的搭建 2 攜帶用戶名和密碼的安全倉庫 3 企業級倉庫harbor的搭建 4 私有倉庫里面鏡像的刪除-====================================================-------===============
3.5 數據管理
3.5.1 數據卷簡介 宿主機和容器間共享數據的一種機制 -v 宿主機文件:容器文件路徑 3.5.2 數據卷實踐 目錄 docker run -d -v /tmp:/test1 nginx 文件 docker run -d --name hah -v /tmp/nihao.txt:/nicai/h.py nginx 需求: 如果我準備啟動10個容器每個容器我都同時掛載2個文件 思路1: 一個數據卷操作的命令執行10遍 3.5.3 數據卷容器簡介 場景: 批量數據卷的操作 步驟: 1 創建數據卷容器 注意:數據卷容器不會啟動 2 啟動應用容器的時候,掛載數據卷容器 3.5.4 數據卷容器實踐 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 拓展: 容器里面的數據備份和還原
3.6 網絡管理 3.6.1 端口映射詳解 隨機端口的起始端口號是:32768 每次使用隨機端口映射,都會在之前的端口號基礎上+1 好處: 無需關心容器的端口號和宿主機上的端口號 所有的容器永遠不可能沖突 3.6.2 隨機映射實踐 docker run -d -P nginx 3.6.3 指定映射實踐 -p [宿主機ip]:[宿主機port]:[容器端口] 注意: 宿主機ip不寫 表示 0.0.0.0 宿主機port不寫,表示 隨機端口 容器端口必須寫 生產中在使用指定端口映射的時候,一定要合理的安排端口的分配 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的網絡模型 (5種) docker自帶的網絡模型:bridge(默認) none host docker其他的網絡模型:container overlay 2 docker 網絡模型簡單實踐 3 docker overlay網絡模型實踐 weave、flannel、calico、canel、openswitch
4.1 Dockerfile
4.1.1 Dockerfile簡介 作用; 自動化的將我們的定制docker鏡像創建出來 類似于我們的python腳本 1 命令必須可執行 2 目標需要相應的流程來配合 一句話: 在使用Dockerfile之前,手工執行一定要成功 使用準則: 大 文件名 Dockerfile 首字母大寫 空 Dockerfile文件在一個空目錄下(只存放和Dockerfile相關的內容) 單 構建后的docker鏡像盡量只有一個功能 少 Dockerfile里面的命令,越少越好, 即使是5條命令實現一個目的,也要把這5條命令放在一行來執行 Dockerfile的指令類型: 1 來源 2 維護者 3 定制命令 4 容器啟動時候的第一條命令 Dockerfile的使用 docker build -t 鏡像名稱:鏡像版本 Dockerfile文件所在路徑 注意: Dockerfile文件所在路徑 可以是相對路徑,也可以是絕對路徑
4.1.2 Dockerfile快速入門
跨主機免密碼認證: 1 自己有鑰匙和鎖 2 把鎖掛載房東家屋子門上 3 房東同意我掛鎖 4 鑰匙和鎖測試一下 跨主機免密碼認證: 1 主機1 自己創建秘鑰對兒 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 # 構建一個基于ubuntu的ssh定制鏡像 # 基礎鏡像 FROM ubuntu # 鏡像作者 MAINTAINER President.Wang 000000@qq.com # 執行命令 # 增加軟件源 -- 由于課堂網絡原因,我們不執行這一步 # ADD sources.list /etc/apt/sources.list # 安裝 ssh 服務 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 # 復制配置文件到相應位置,并賦予腳本可執行權限 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 基礎指令詳解
FROM MAINTAINER RUN EXPOSE ENTRYPOINT 4.1.4 文件編輯指令詳解 ADD 如果傳輸的是壓縮包,會自動在容器里面解壓 COPY 純純的拷貝動作 VOLUME 產生一個共享的目錄 # ADD yasuobao.tar.gz /test/ # COPY yasuobao.tar.gz /copy/ # COPY authorized_keys /copy/ # VOLUME ["VOLUMES"] 4.1.5 環境指令詳解 需求: mysql 鏡像,設定好了登錄用戶名USERNAEM和密碼PASSWD 基于鏡像創建的容器,我們想使用這兩個變量來登錄, docker run -e ENV 在構件鏡像的時候,給他設定一個環境變量 WORKDIR 切換工作目錄 注意: 如果切換工作目錄后,并沒有執行回退的WORKDIR指令,那么就會一直在指定的目錄下 ENV USERNAME=itcast ENV PASSWD=itcast WORKDIR ["/nihao/hah"] RUN ["touch","itcast.txt"]
=====================================================================
4.2 Dockerfile構建django環境(拓展)
4.2.1 項目描述 4.2.2 手工部署django項目環境 4.2.3 Dockerfile案例實踐 如何在生產中定制標準的docker鏡像 1 標準的工作目錄 /docker/images/功能目錄 2 標準的手工流程 按照我們課件上的分析流程做出來手工執行方案 需求 -- 方案分析 -- 技術關鍵點 -- 梳理出實施方案 注意: 在進入到Dockerfile步驟之前,一定要保證手工執行是成功的 而且必須報手工執行的命令梳理出來 3 標準的Dockerfile轉換
3.1 根據手工梳理出來的命令,準備Dockerfile所依賴的軟件和文件,放到專用的Dockerfile目錄里
3.2 分析手工命令,將其轉換成Dockefile指令 3.3 整理Dockefile指令 3.4 執行Dockefile文件 3.5 整體測試
===================================================================
項目初期
單機階段 所有服務都部署到一臺主機 應用數據分離階段 數據庫有壓力的時候,多帶帶部署 頁面動靜分離階段 web服務有壓力的時候,動態請求和靜態請求分別管理 應用|數據緩存階段 采取數據緩存的策略,實現有限的資源,創造更高的效益 拓展分析: 1 網站項目的架構是一次性做出來的么? 不是,一步一步演變過來的 2 演變的措施是一股腦全部實現么? 不是,遇到什么問題就解決什么問題 3 每個階段的措施是一次的么? 不是,前面的措施,在后面也可以用,是一個選項
5.2 項目運營
5.2.1 網站分析 常見術語: 通用的: IP 獨立ip數 日志里面的關鍵字 獨立的訪問ip PV 頁面訪問量 日志里面的關鍵字 UV 獨立的用戶數量 日志里面的關鍵字 VV 用戶訪問的頁面數量 日志里面的關鍵字 專用的: BR 頁面跳出率 -- 辣眼睛 CR 頁面轉化率 -- 大眼睛 常見的指標分析方法: 定制的 日志分析、監控平臺、等等 其他的 通用的網站統計工具
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/40413.html
摘要:無論這個連接是外部主動建立的,還是內部建立的。協議有表示層數據的表示安全壓縮。在整個發展過程中的所有思想和著重點都以一種稱為的文檔格式存在。 部署基礎知識url:協議://網站地址:端口(/)路徑地址?參數eg: http://www.baidu.com:80/abc/dd/ www.baidu.com找服務器 80端口:找服務器上提供服務的應用 nginx uri:/ab...
摘要:阻塞,非阻塞首先,阻塞這個詞來自操作系統的線程進程的狀態模型網絡爬蟲基本原理一后端掘金網絡爬蟲是捜索引擎抓取系統的重要組成部分。每門主要編程語言現未來已到后端掘金使用和在相同環境各加載多張小圖片,性能相差一倍。 2016 年度小結(服務器端方向)| 掘金技術征文 - 后端 - 掘金今年年初我花了三個月的業余時間用 Laravel 開發了一個項目,在此之前,除了去年換工作準備面試時,我并...
摘要:阻塞,非阻塞首先,阻塞這個詞來自操作系統的線程進程的狀態模型網絡爬蟲基本原理一后端掘金網絡爬蟲是捜索引擎抓取系統的重要組成部分。每門主要編程語言現未來已到后端掘金使用和在相同環境各加載多張小圖片,性能相差一倍。 2016 年度小結(服務器端方向)| 掘金技術征文 - 后端 - 掘金今年年初我花了三個月的業余時間用 Laravel 開發了一個項目,在此之前,除了去年換工作準備面試時,我并...
摘要:王者榮耀項目組高級測試工程師工程師文化團隊中的實踐本文不是一篇入門教程,而是從結合實際場景,闡述在團隊協作中如何去好好地應用。 CI Weekly 圍繞『 軟件工程效率提升』 進行一系列技術內容分享,包括國內外持續集成、持續交付,持續部署、自動化測試、 DevOps 等實踐教程、工具與資源,以及一些工程師文化相關的程序員 Tips 。同步于 flow.ci Blog、微信公眾號、官方微...
閱讀 3872·2021-09-27 13:35
閱讀 1069·2021-09-24 09:48
閱讀 2899·2021-09-22 15:42
閱讀 2339·2021-09-22 15:28
閱讀 3145·2019-08-30 15:43
閱讀 2609·2019-08-30 13:52
閱讀 2971·2019-08-29 12:48
閱讀 1451·2019-08-26 13:55