Docker(基础理解)
回顧之前遇到的問題:
1、安裝一堆不同版本的python在本機,明明用pip安裝套件卻無法import
2、本地開發用的套件版本和生產環境不合,代碼一到生產環境就不能用
3、申請一個測試用的開發環境需要等一段時間
4、重新建立環境很麻煩,搞不清楚先前的環境到底裝了什么東西
用docker好處:
每次不用deploy算法跟ops從頭解釋一遍,專心開發,不用花太多時間管環境的事情
?
更新python版本,python2.7--python3.6
對應系統不同命令安裝python包,系統升級之后,很多東西需要重新pip,需要檢查代碼
如果有其它語言還需要配置相應環境
虛擬環境:
1、Isolation :python版本和包在它們自己的虛擬環境下
2、Organization:對于python包,每個項目可以維持他自己的需求虛擬環境
3、No-Globalization:don't require installing stuff globally on the system
隔離不同專案的環境:
virtualenv 1? ? ? ? ? ? ? ? ?virtualenv2
project1? ? ? ? ? ? ? ? ? ? ? ? project2
python2.7? ? ? ? ? ? ? ? ? ? ? ?python3.6
?上面針對python解法
如果環境更復雜,還有其它項目及其它語言對版本依賴等等
使用Container隔離環境
虛擬機和容器
? ? ? ? ?隔離環境
? ?
隔離環境主要分為三個等級 :應用層級、執行指令層級、硬體層級
最右邊:
? ? ? ? 硬體隔離 :(會想到雙系統) 優點:從底層相互隔離互不影響 缺點:浪費資源
? ? ? ? 一個不夠用從另一個挖過來,影響其它系統
最左邊:
? ? ? ? 硬體環境:hypervisor:host os 之后上面安裝虛擬機os1.2.3,每個虛擬機安裝自己的軟體,不同虛擬機無法溝通
? ? ? ? 缺點:運行太慢,每個硬體都需要虛擬層去模擬虛擬環境,每個vn故自己硬體
中間:
? ? ? ? ?硬體層,共同使用linux資源,應用層互不干擾,執行層共享資源
虛擬機和容器差異:
??
左邊虛擬機:
server:硬體環境
Host OS:windows 7 、windows 10
Hypervisor:Vmware、virtualbox
之后彼此獨立,在centos安裝自己東西,互不獨立,資源不共享,事先設置好每個虛擬機資源
Container:應用層面虛擬化,通過Docker與host OS進行交流,從應用層面開始的分離的而不是從host os開始隔離的
使用資源效率更好,因為可以利用底層資源
容器可以直接使用kernal資源
Containers彼此之間互相獨立,通過Interface,每個Containers都可以直接和linux上的Drivers溝通,來調度硬體資源,
可以直接使用資源,之間隔離是通過linux Kernel既有的功能(Namespaces、cgroups、SELinux)做隔離的,所以說它是應用端的隔離不需要重新模擬出一個os來操作
二者比較:
VMs? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Containers
硬體層:從新模擬出一臺系統? ? ? ? 從os層面模擬必須是linux os因為需要用到linux kernel
重:啟動速度慢? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 輕:啟動速度快
性能比較差? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 性能逼近原生
完全隔離更加安全? ? ? ? ? ? ? ? ? ? ? ? ? ? 進程之間隔離卻少一定安全性
Docker logo:
Container:大魚上的貨柜
Docker:像大魚一樣,載著各種容器運行
Docker是Contain一種,也是目前普遍的技術,
Docker主要三個用途:Build Ship and Run
Build:可以使用任何語言在docker containers 開發一個app,可以把你做的東西打包成一個鏡像文件,
ship:這個鏡像文件可以放到任何一臺安裝docker里面來使用
run:一般標準配置會運行1000個以上containers
Docker is a kind of container
Container可以想象一個貨柜可以在里面安裝東西
Docker把 自己Container打包成image,image可以疊起來,用哪個image直接調用就好
Docker的生命周期:
把需要的配置寫入到Dockerfile,通過build指令壓縮一個image,到本地通過docker的run指令,本機就可以用
Containers可以理解為讓你進,讓你操作的一個環境,Containers有自己的生命周期有stop、start、restart完全可以當成一個機器用
Containers有很多操作還可以用commit重新給它打包成image
大家之間互相共享可以把images push到Docker registry里面,也可以pull下來
也可以存起來backup.tar
和Docker一起工作:
Client和Docker_Host一般是指本機(本機裝個Docker_Host),Registry一般指遠端的機器,在本機可以通過docker build法會把指令傳送到Docker Daemon,Docker_Host一直有運行指令會把docker build指令的內容建立成image。 運行docker run 也會傳送到Docker Daemon 會搜索一下是否有image,如果有想要的image,就會run一下,變成containers,之后進行操作;如果本機沒有image,它回去遠端pull到image然后啟動它。
總結
以上是生活随笔為你收集整理的Docker(基础理解)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 强化学习及其在NLP上的应用
- 下一篇: XGBoost与LightGBM原理及应