[ Docker ] Start learning Docker

這是我參與8月更文挑戰的第3天,活動詳情查看:8月更文挑戰web

微信公衆號搜索【程序媛小莊】 - 沒有白走的路,每一步都算數面試

前言

今天介紹一下如今很是流行的技術-Docker,如今出去面試或者在公司開發docker幾乎要成爲必須掌握的技術了,一塊兒來看看吧。redis

Docker官網

官方網站:www.docker.com/docker

中文網站:www.docker.org.cn/flask

什麼是Docker

Docker是一個開源的引擎,能夠輕鬆的爲任何應用建立一個輕量級的、可移植的、自給自足的容器。開發者在筆記本上編譯測試經過的容器能夠批量地在生產環境中部署,包括VMs(虛擬機)、 bare metal、OpenStack 集羣和其餘的基礎應用平臺。windows

上面說了一堆,Docker簡單總結來講就是一種容器技術。而容器是用來裝東西的。拋開容器這個概念,在使用Python進行web開發是,使用較多的兩種就是Django web項目和flask web項目,無論使用哪一種框架在程序開發的過程當中大機率都會對數據進行操做,就會應用到MySQL Redis等,既然項目中用到了就須要在本身的電腦或者是服務器上進行安裝才能使本身的web服務正常運行。centos

同時還存在一個問題,若是本地開發環境是windows而生產環境是Linux,若是不當心軟件版本不一致,可能就會出現經典的一幕在我電腦上跑得好好的,怎麼到服務器上就不行呢!服務器

docker就提供了顛覆式的容器化技術,在Python web應用中一樣使用MySQL Redis,卻不是直接使用安裝在本地的軟件,而是面向docker容器,在docker容器中安裝web應用中所須要的軟件程序。微信

所以使用docker有一個很是大的好處:可以保證程序的環境高度一致。markdown

爲何是Docker

可能有小夥伴有疑問了,仍是以爲以前的方式好,web應用中用到就安裝,若是使用Docker不是多了一步嗎?在開發程序前還要安裝Docker,總以爲多了一步。那爲何docker還這麼火呢?XDM能夠考慮一下下述幾種狀況:


我電腦上跑得好好的,怎麼到服務器上就不行呢?

咱們以Python web程序爲例,一個Python web程序可能會涉及不少應用軟件,好比redis MySQL rabbitmq等環境,當這些其中某一項版本不一致時,可能就會致使web應用沒法正常運行,而Docker能夠將程序和使用的軟件環境直接打包在一塊,不管在哪一個機器上都保證了環境一致。


服務器本身的程序掛了,結果發現是別人的程序除了問題把內存吃完了,本身的程序內存不夠崩了?

這種也是比較常見的一種狀況,本身的項目重要程度通常,和別人共用一臺服務器,因此不可避免的會受到其餘程序的干擾,致使本身的程序出現問題。Docker就很好的解決了環境隔離的問題,別人程序不會影響到本身的程序。


訪問頻次很是高的web應用,公司須要多部署幾十臺服務器,運維XDM要哭了~

在沒有Docker的狀況下,要在短期內部署幾十臺服務器,運維XDM表示臣妾辦不到~並且還不能保證每臺服務器的環境一致,就會出現各類問題。使用Docker只須要將程序打包成鏡像,你要多少臺服務器,輕輕鬆鬆搞得定,按時下班不香嗎?

所以總結下來使用Docker好處多多,具體爲一下幾點:

1. 一致的運行環境,程序可以更加方便的遷移
2. 對進程進行封裝隔離,容器與容器之間互不影響,是操做系統級別的隔離
3. 很是輕鬆的經過鏡像複製N過個如出一轍的容器
複製代碼

Docker與虛擬機

又有XD問了,說Docker是操做系統級別的隔離,運行一個服務就至關於運行一個操做系統,那麼一臺機器上運行多個服務真的OK嗎?畢竟操做系統是那麼一個你們夥。

Docker若是想要使用就必須創建在硬件的基礎之上,好比本身的筆記本,可是咱們不會直接去操做筆記本的硬件,而是經過在筆記本上安裝操做系統幫助咱們操做計算機的硬件。若是想要使用docker,又必須在操做系統上安裝docker引擎,纔可能運行各類docker容器。

若是在不使用docker的前提下,在windows環境中更好的模擬生產環境,一般會在計算機中安裝虛擬機軟件(VMware),安裝完虛擬機軟件以後必須在該軟件上安裝操做系統(centos),在這個基礎上在安裝MySQL redis等軟件。

image-20210803144341275

那麼docker會不會像虛擬機同樣很是佔用系統資源呢?

虛擬機必須攜帶操做系統才能運行,自己很小的虛擬機程序由於攜帶了龐大的操做系統就會變得的很是笨重而且很是佔用宿主機的資源。在調用宿主機的計算機硬件資源時,虛擬機須要虛擬化內存整個調用過程是虛擬內存->虛擬物理內存->真正的物理內存。

而Docker是不攜帶操做系統的,所以docker應用很是輕巧,所以不會很是多的佔用系統資源。docker利用docker引擎直接調用宿主機的資源,此時過程是虛擬內存->真正的物理內存。

image-20210803144314497

下面是docker與虛擬機的一個對比:

傳統虛擬機 docker
磁盤佔用 幾個GB到幾十個GB 幾十MB到幾百MB
CPU和內存 虛擬操做系統很是佔用CPU 和內存 docker引擎佔用極低
啓動速度 從開機到運行項目大概幾分鐘 從開啓容器到運行項目十幾秒
安裝管理 專門的運維人員 簡單的命令操做
應用部署 每次部署都累得要死要活 從第二次部署開始很是方便簡單
耦合性 多個應用安裝到一塊兒互相影響 每一個應用一個容器

結語

文章首發於微信公衆號程序媛小莊,同步於掘金

碼字不易,轉載請說明出處,走過路過的小夥伴們伸出可愛的小指頭點個贊再走吧(╹▽╹)

相關文章
相關標籤/搜索