1. 程式人生 > >Docker(基礎理解)

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