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然後啟動它。