一、私有倉庫搭建
鏡像獲取方式:
方式1、docker pull 鏡像
方式2、dockerfile構建
方式3、拷貝tar文件,load過來
注意:一般是 公司內部用的鏡像,docker hub上沒有,私服(私有服務器)
私有倉庫搭建
操作步驟:
步驟 1 拉一個registry鏡像 (本質是個什么?答:web服務(想像成 web項目在里面))
docker pull registry
步驟 2 跑起容器來
docker run -di --name=registry -p 5000:5000 registry
步驟3 瀏覽器輸入地址(目前是空的)
http://宿主機IP:5000/v2/_catalog
例如:http://10.0.0.203:5000/v2/_catalog
以上就是搭建好了私有倉庫
步驟 4 vi /etc/docker/daemon.json (文件 如果沒有就創建出來:vim daemon.json)。以后docker pull 鏡像時 先從自己配置的這個拉,再去遠程拉
{"insecure-registries":["10.0.0.203:5000"]}
圖型解釋 步驟4 的意思
步驟 5 重啟docker 服務。發現容器停了
systemctl restart docker
步驟 6 啟動容器
docker restart registry
步驟 7 標記本地的鏡像(本地的鏡像可能是dockerfile構建的,也可能是通過容器打包成的)
docker tag django1.11.9 10.0.0.203:5000/django1.11.9 django1.11.9 表示鏡像的名字
步驟 8 把標記好的本地鏡像,傳到搭建好的私有倉庫上
docker push 10.0.0.203:5000/django1.11.9
問題:
解決:
原因:docker鏡像倉庫暫不支持https
辦法:
在”/etc/docker/“目錄下,創建”daemon.json“文件(如果有的話直接覆蓋)。在文件中寫入
{ "insecure-registries":["10.0.0.203:5000"] }
然后重啟docker服務,重啟registry容器,再docker push 10.0.0.203:5000/django1.11.9
步驟9 再訪問這個地址http://宿主機:5000/v2/_catalog ,就能看到你上次的鏡像再里面了
注意:
只要在他自己的電腦上 etc/docker/daemon.json,配置了這個{"insecure-registries":["10.0.0.203:5000"]} 的所有小伙伴,都可以拉取我上傳的鏡像
docker pull10.0.0.203:5000/django1.11.9
注意:
公司可能沒有私服,直接通過dockerfile構建
大一點的公司,搭建私有倉庫,里面放了一些鏡像(不讓你去docker hub下了,直接只從私有倉庫下載)
私服傳奇 大哥傳奇,一刀傳奇
現成的代碼,只需要買台服務器,部署上就行了(只要有用戶,充錢,就沖在你那里),利潤非常非常高,請到一些明星代言
安卓修改器,apk解壓,修改源代碼,把原來的服務器地址,改成你的就可以了
安卓的破解軟件多,安卓逆向
二、
1 、CGI :通用 網關接口,一句話總結: 一個標准,定義了客戶端服務器之間如何傳數據
2 、FastCGI:快速通用 網關接口,一句話總結: CGI的升級版,更快。
web服務器作用:接收請求,轉發請求,做負載均衡,還可以做 動靜分離
-Nginx:符合快速通用網關接口的web服務器
-apache:類似於nginx 的web服務器
例子:架構
-lamp:表示 linux+apache+mysql+php
-lnmp:表示 linux+nginx+mysql+php
-tomcat ,uwsgi,php,gunicorn 這些都是協議
-nginx ,apache
-tomcat,jboss,weblogic(java),uwsgi,gunicorn(python),php(php服務器)(php的web服務器)
3、 WSGI:協議,Web服務器網關接口(Python Web Server Gateway Interface,縮寫為WSGI),只針對python
Python語言定義的Web服務器和Web應用程序或框架之間的一種簡單而通用的接口
為Python定義的web服務器和web框架之間的接口標准
規定了什么?規定了http請求來了后,如何拆,拆成一個一個key和value 放到一個字典中,env對象
from wsgiref.simple_server import make_server
def mya(environ, start_response):
print(environ)
#request對象:environ包裝成了一個對象
start_response('200 OK', [('Content-Type', 'text/html')])
if environ.get('PATH_INFO') == '/index':
with open('index.html','rb') as f:
data=f.read()
elif environ.get('PATH_INFO') == '/login':
with open('login.html', 'rb') as f:
data = f.read()
else:
data=b'<h1>Hello, web!</h1>'
return [data]
if __name__ == '__main__':
myserver = make_server('', 8011, mya)
# 請求來了,執行后面的可調用對象 mya(environ:http請求拆了,拆成字典, start_response:響應對象)
print('監聽8010')
myserver.serve_forever()
例子:這是請求來的入口
4 、uWSGI/gunicorn/wsgiref/ tornado 部署。注意:(tornado可能是服務器,可能是框架)
一個是符合WSGI協議的web服務器
一句話總結: 一個Web Server,即一個實現了WSGI的服務器,大體和Apache是一個類型的東西,處理發來的請求
5 、uwsgi
一句話總結: uWSGI自有的一個協議
uWSGI uwsgi的區別
pip install uwsgi(真正裝的uWSGI)
6 、ASGI :是WSGI的升級,性能更高,支持的更多,支持websocket和異步
異步網關協議接口,一個介於網絡協議服務和Python應用之間的標准接口,能夠處理多種通用的協議類型,包括HTTP,HTTP2和WebSocket
django3.0 以后支持異步
三、
1 、GIL:只針對cpython解釋器,只適用於cpython解釋器,(pypy:沒有gil鎖)。python出的時候,是單核cup,開啟線程,垃圾回收,讓其他線程停掉,只走垃圾回收線程,不會有並發問題
-同一時刻,實際上只有一條線程在執行,有一把全局鎖,只要線程執行,必須獲得這把鎖,才能執行
-多核cpu出現,cpython,只能有一條線程執行,就是由於GIL鎖的原因
-python不能利用多核優勢
-想要分到不同cpu上執行,需要開進程(解釋器進程),進程里最少有一條線程,開進程,非常耗資源
-在某些情況下,並不是進程開的越多,程序執行越快
-IO密集型,開線程,計算密集型,開進程 只適用於python
注意:
2 、線程是cpu調度的最小單位
3、IO模型
-內存分為:內核緩沖區,用戶緩沖區
例子:你打開你的QQ,從內核緩沖區挪到用戶緩沖區
例子:你打開瀏覽器去請求數據,先到內核緩沖區再挪到用戶緩沖區
-BIO : 同步阻塞模式I/O
-NIO:同步非阻塞模式I/O
-AIO:異步非阻塞模式I/O
4、IO多路復用
5、總結:BIO,NIO,IO多路復用 都是同步IO (nginx,tornado:都是epoll模型),windows平台不支持epoll,用的是select(最大可以監聽1024個)
AIO:真正的異步io,用的很少
6、 epoll和select的區別
一個老師檢查10個學生寫作業
-select:小明,你寫好了么?小紅你寫好了么?.......
-epoll:同學寫好了,舉手告訴老師來檢查
四、pycharm遠程連接docker開發
步驟1、 配置docker服務端(docker是c/s架構)
01、設置 允許遠程客戶端連接
vim /lib/systemd/system/docker.service
把標紅的注釋掉
#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
添加
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock
02、 systemctl daemon-reload && systemctl restart docker
03、 驗證
內部能訪問到:
curl 127.0.0.1:2376/version
外部能訪問到:
http://宿主機ip:2376/version
例如:http://10.0.0.203:2376/version
若:外部訪問不到,則 防火牆關了,入網規則 改一下
3 上傳代碼到遠端服務器
4 配置sftp
5 配置sftp連接
6 配置映射路徑
7 把本地代碼傳到遠端
8 配置自動上傳代碼
9 通過本地dockerfile構建遠端的鏡像(直接在遠端安裝是一樣的)
10 修改構建鏡像的名字