容器化之Docker小知識普及
Docker確實是個好東西,相當於一個小型虛擬機器,裡面環境隔離只要有對應的映象就能執行業務應用、執行基礎應用、能跑資料庫等等,還能跑linux等等。
Docker 從狹義上來講就是一個程序,從廣義上來講是一個虛擬容器,其實更專業的叫法是應用容器( Application Container ),Docker 程序和普通的程序沒有任何區別,它就是一個普通的應用程序。不過是用來操作映象檔案的。所以 Docker 程序 + 構建的應用映象檔案就等於 Docker 容器。
Docker基本概念有三項:映象,容器,倉庫
映象相當於java中的jar包;映象倉庫相當於jar儲存的倉庫,只不過這裡儲存的是映象;容器就是一個映象執行的例項,相當於java執行起來的一個程序。
映象有基礎映象,如centos、mysql、redis映象,這些自己不用做 官網有人已經做好了這些映象 可以直接拉下來用,如果要做自己的特殊需要的映象,可以直接在這些基礎映象上構建。
容器
你可以從映象中建立容器,這如同執行一個程式,不過更輕量,啟動更快,秒啟。
每個容器都是獨立的封閉的,需要對外提供服務就需要公開容器的特定埠,在啟動 Docker 的時候將容器的特定埠對映到宿主機上面的任意一個埠,可以將容器的埠對映成任意的對外埠,可解決多個應用埠相同產生的衝突,所以就不需要通過代理來解決衝突。容器對外埠與宿主機的埠對映可以通過下面的命令來完成。
啟動 docker 容器
docker run -d -p 2222:22 --name 容器名 映象名 -d 守護容器,就是後臺執行,退出命令視窗容器也不會停止 -it 互動式容器 退出命令視窗容器就停止運行了 -p 宿主機埠和容器埠對映 8081:80 宿主機埠: 容器公開的埠
倉庫Docker registeries
docker倉庫用來存放映象的,倉庫存在公有和私有之分,公有倉庫 docker hub 提供了非常多的映象檔案,這些映象直接拉取下來就可以運行了,你也可以上傳自己的映象到 docker hub 上面。同時也可以自己搭建私有倉庫用於團隊專案管理如可以用Nexus,怎麼搭建下幾篇再說,在k8s中也在專門的倉庫元件。
Docker 的生命週期
- 開發構建映象並將映象 push 到 Docker 倉庫
- 測試或者運維從 Docker 倉庫拉取映象到測試伺服器部署
- 通過映象檔案開啟 Docker 容器並提供服務
總之構建容易分發簡單 · 隔離應用解除依賴 · 快速部署測完就銷
Docker和傳統虛擬機器有啥區別
Docker這個虛擬機器超級輕量級,僅僅是一個程序而已。與傳統的虛擬機器比如 VM 有著巨大的差別:
Docker相對於 VM 有以下幾個優點:
啟動速度快,容器啟動本質就是一個開啟一個程序而已,因此都是秒啟,而 VM 通常要更久。
資源利用率高,一臺普通 PC 可以跑成百上千個容器,你跑十個 VM 試試。
效能開銷小, VM 通常需要額外的 CPU 和記憶體來完成 OS 的功能,這一部分佔據了額外的資源。
所以很多移動網際網路的應用或者雲端計算的後端節點都可以用 docker 來替換物理機器或者虛擬機器,比如騰訊地圖的很多後臺服務基本上都遷移 docker 部署了。
docker是應用的基石
最後強調為什麼要用Docker
Docker 的映象提供了除核心外完整的執行時環境,確保了應用執行環境一致性,從而不會再出現 “這段程式碼在我機器上沒問題啊” 這類問題;——一致的執行環境
可以做到秒級、甚至毫秒級的啟動時間。大大的節約了開發、測試、部署的時間。——更快速的啟動時間
避免公用的伺服器,資源會容易受到其他使用者的影響。——隔離性
善於處理集中爆發的伺服器使用壓力;——彈性伸縮,快速擴充套件
可以很輕易的將在一個平臺上執行的應用,遷移到另一個平臺上,而不用擔心執行環境的變化導致應用無法正常執行的情況。——遷移方便
使用 Docker 可以通過定製應用映象來實現持續整合、持續交付、部署。——持續交付和部署