Docker技術為什麼那麼受軟體研發的歡迎?

2020-12-13 迷你數智

Docker是Linux系統下一種優秀的封裝技術,從軟體研發到發布,相比物理機、虛擬化都有非常大的優勢。那軟體研發為什麼那麼喜歡Docker呢?

軟體研發的挑戰

為什麼要講軟體研發挑戰呢?因為docker在軟體研發上市最具優勢的。

一個計算機軟體從客戶的需求到程式設計師手下的代碼到可運行版本的誕生,會經歷需求調研、架構設計、程序編碼、各種測試。在這過程中,程式設計師會碰到幾個主要的挑戰:

①、用什麼作業系統(windows、linux、unix)?來源於客戶需求;

②、用什麼開發(J2EE,dot NET等)?來源於架構設計;

③、開發方法(瀑布型、快速迭代等)?來源於開發團隊;

④、頻繁測試(需要頻繁部署測試環境:含系統、開發所需環境,比如java;);

從上面挑戰可以看出: 軟體研發跟軟體代碼不相關,又不得不做的是開發環境的部署,而且這裡一直都需要用到它,一直持續到軟體正式上線。

而docker非常適合這個需求,它利用linux的namespce技術將 代碼運行需要的開發環境、網絡、進程、數據存儲打包在一起。和其他的docker或者系統進程完全隔離,互相之間不受影響,非常優越性。下面我們就來看看它的優越性:

docker的優越性

前面我們已經簡要說了下docker的技術和優越性。這裡詳細展開講解一下:

1、持續一致性

這個是docker的核心優勢,它打包了開發所需要的開發環境,而且這個開發環境一直保持不變。這個持續一致性,對於軟體研發來說是非常重要的。

因為軟體研發編寫的代碼需要很多依賴的包和庫文件。而且版本不同也存在很多差別。所以,docker保持了這個一致性,減少了研發人員很多麻煩,大大提高效率。

2、性能卓越

docker 將開發環境、網絡、進程、數據存儲等系統運行需要的資源的都打包在一起。具備了和虛擬機一樣的特性。但相比虛擬機它不存在虛擬層、也不存在虛擬硬體。執行效率方面,docker打包的進程可以直接調用cpu來執行,所以docker的性能相比虛擬機快很多。

3、很好的隔離性

前面說到docker打包了開發需要的資源形成一個容器。這個容器內部和外部天生具有很好的隔離性。容器內的進程和容器外的進程是不會互相關聯通信的,而且它佔有的計算資源cpu+內存+存儲都是可以限定,不會互相競爭而導致物理主機崩潰。但相比虛擬化的隔離性還是差了一點點(因為不同容器還在同一系統下運行)。但不影響使用。

4、高安全性

高安全性也得益於它的隔離性。因為無論容器內的進程也好、數據也好都是獨立的。外部無法獲得。容器之間需要網絡通訊,必須使用docker hub。而docker hub是類似於交換機的網絡堆棧,是可以配置互相訪問的埠。確保交換的安全。

5、高兼容性

docker 因為它是一個打包封裝的容器,原本運行與linux系統內。如今雲計算快速發展。docker 對雲計算計算兼容性很高。

雲計算的巨頭「亞馬遜」、「微軟」都是支持和兼容docker的;虛擬化的領頭羊「vmware」也是支持兼容docker的;開源的Openstack也是支持和兼容docker的;國內的華為、阿里、騰訊雲都是支持兼容的;如此高的兼容性,為研發人員獲取docker提供了很高的便利性。

結束語

綜上所述,Docker 是在軟體研發到發布具有很高優越性。同時它具備的這些特性也符合應用運行需要的基本特性。甚至被人認為是革命性技術。

其實它也有很多不足之處,比如:隔離性、安全性就比虛擬機差。

相關焦點

  • 雲計算核心技術Docker教程:docker Stack介紹
    docker stack和docker-compose使用方式相同,但是為什麼引入docker stack技術呢。docker stack的能力來源自docker引擎原生支持,你不需要安裝額外工具包去啟動docker 容器堆棧(docker stack 是docker swarm的一部分)。
  • Docker+jenkins小知識,講解通俗易懂,有必要收藏
    持續集成是軟體開發中一個非常重要的環節,我們都知道持續集成的這種方式,不僅僅是影響軟體開發的效率,實際上還會對我們軟體開發的流程會產生一定的影響,例如:我們所選擇的構建的方式,那麼你的應用程式的部署的方式,軟體開發與測試需要不斷地對應用進行持續構建,這些都會受我們持續集成的構建的方案所影響。
  • 雲計算核心技術Docker教程:Docker容器使用
    docker 客戶端非常簡單 ,我們可以直接輸入 docker 命令來查看到 Docker 客戶端的所有命令選項。可以通過命令 docker command --help 更深入的了解指定的 Docker 命令使用方法。
  • 什麼是Docker?看這一篇乾貨文章就夠了!
    在沒有容器技術之前,這確實是一個好辦法,只不過這個辦法還沒有那麼好。先科普一下,現在雲計算其底層的基石就是虛擬機技術,雲計算廠商買回來一堆硬體搭建好數據中心後使用虛擬機技術就可以將硬體資源進行切分了,比如可以切分出100臺虛擬機,這樣就可以賣給很多用戶了。你可能會想這個辦法為什麼不好呢?
  • Docker問答錄系列——Docker引擎相關問題(一)
    首先,做技術工作,請珍惜生命,遠離百度;其次,不翻牆、不用Google、不看英文資料,那請轉行,沒法混。然後是回答問題,Docker的資料其實很豐富,特別是官方文檔講解非常詳細。11-runc/https://blog.docker.com/2016/06/docker-1-12-built-in-orchestration/Docker Toolbox、Compose、Machine等等軟體總是下載不來怎麼辦?
  • 雲計算核心技術Docker教程:Docker鏡像使用
    當運行容器時,使用的鏡像如果在本地中不存在,docker 就會自動從 docker 鏡像倉庫中下載,默認是從 Docker Hub 公共鏡像源下載。我們可以使用 docker images 來列出本地主機上的鏡像。
  • 【乾貨】解密監控寶Docker監控實現原理
    8 年研發管理經驗,早期從事大規模企業信息化研發架構,09 年涉足網際網路數字營銷領域並深入研究架構與性能優化。2014 年加入雲智慧,致力於 APM 產品的架構與研發。崇尚敏捷,高效,GettingReal。
  • Docker:分布式系統的軟體工程革命(上)
    集成測試 基於上一節的介紹,我們能想像,如果每個貨櫃只執行一個進程,那麼機群管理系統在部署和調度應用時受到的限制最少。反過來想,如果我們在一個貨櫃裡同時運行一個indexer進程和一個searchengine進程,那麼我們實際上引入了一個不必要的約束——indexer進程和searchengine進程一一對應。而且如果機群中有一臺機器,可以承擔運行一個進程的負載,但是不能承擔同時運行兩個進程,那麼這臺機器上就沒法部署上述「大」貨櫃了。
  • Docker基礎技術:DeviceMapper
    Device Mapper 簡介DeviceMapper自Linux 2.6被引入成為了Linux最重要的一個技術。它在內核中支持邏輯卷管理的通用設備映射機制,它為實現用於存儲資源管理的塊設備驅動提供了一個高度模塊化的內核架構,它包含三個重要的對象概念,Mapped Device、Mapping Table、Target device。
  • 理解docker鏡像與容器
    使用下面命令查看本地鏡像的信息docker images有一個問題:為什麼docker下載的鏡像只有131.3MB,而通常我們在虛擬機中安裝ubuntu的鏡像一般都有3個G多?這裡需要說明一個概念,傳統虛擬機上面安裝的鏡像包含兩個部分,一個是Linux內核的發行版(比如Linux3.13內核),一個是作業系統的發行版(比如說ubuntu15.04),這部分內容不包含Linux內核,但是包含Linux之外的軟體管理方式,軟體驅動,如 apt-get軟體管理包等。內核和發行版是相對獨立的,我們可能都做過這樣的事:升級發行版中的內核。
  • 雲計算核心技術Docker教程: Docker 安裝 Redis
    本文介紹通過docker安裝redis。1.我們用 docker search redis 命令來查看可用版本:2.取最新版的 Redis 鏡像,這裡我們拉取官方的最新版本的鏡像:$ docker pull redis:latest
  • 阿里P8架構師談:Docker鏡像和Docker容器的關係?
    Docker有兩方面的技術非常重要,第一是Linux 容器方面的技術,第二是Docker鏡像的技術。從技術本身來講,兩者的可複製性很強,不存在絕對的技術難點,然而Docker Hub由於存在大量的數據的原因,導致Docker Hub的可複製性幾乎不存在,這需要一個生態的營造。
  • Docker從入門到放棄-基礎篇
    引言 如果你認為學習docker是運維該做的,那你就錯了。作為一名研發工程師,學會基礎的docker使用,能大大提高平時的效率。 雖然docker已經出來將近8年,但是相信還是有很多人並不知道docker是什麼?為什麼這麼受歡迎?
  • 雲計算核心技術Docker教程:Docker Machine 使用 - TechWeb
    使用docker-machine命令,可以啟動、審查、停止、重啟託管的docker 也可以升級Docker客戶端和守護程序並配置docker客戶端和宿主機通信。Docker Machine 也可以集中管理所以得docker主機。
  • Docker鏡像進階:了解其背後的技術原理
    而在 docker 架構中,當 docker daemon 為 docker 容器掛載 rootfs 時,沿用了 Linux 內核啟動時的做法,即將 rootfs 設為只讀模式。在掛載完畢之後,利用聯合掛載(union mount)技術在已有的只讀 rootfs 上再掛載一個讀寫層。
  • 雲計算核心技術Docker教程:Dockerfile文件CMD命令詳解
    既然是進程,那麼在啟動容器的時候,需要指定所運行的程序及參數。docker在運行時可以指定新的命令來替代鏡像設置中的這個默認命令,比如,ubuntu 鏡像默認的 CMD 是 /bin/bash,如果我們直接 docker run -it ubuntu 的話,會直接進入 bash。我們也可以在運行時指定運行別的命令,如 docker run -it ubuntu cat /etc/os-release。
  • 雲計算核心技術Docker教程:Dockerfile文件ENTRYPOINT命令詳解
    ENTRYPOINT 在運行時也可以替代,不過比 CMD 要略顯繁瑣,需要通過 docker run 的參數 --entrypoint 來指定。當指定了 ENTRYPOINT 後,CMD 的含義就發生了改變,不再是直接的運行其命令,而是將 CMD 的內容作為參數傳給 ENTRYPOINT 指令,換句話說實際執行時,將變為:ENTRYPOINT "CMD"ENTRYPOINT的使用場景:讓鏡像變成像命令一樣使用假設我們需要一個得知自己當前公網 IP 的鏡像,那麼可以先用 CMD 來實現:
  • Docker系列教程01-使用Docker鏡像
    如果讀者之前是VM管理員,則可以把Docker鏡像理解為VM模板,如果您是一名研發人員,可以將鏡像理解為類(class)。簡單說,Docker鏡像是一個不包含系統內核而又精簡的作業系統。docker pull 語法docker pull 語法通常情況下, 描述一個鏡像需要包括「名稱+標籤「信息。
  • 什麼是Docker,和虛擬機有怎樣的區別
    入門大全,目前都已經是容器化、全面上雲的時代了,作為開發者docker是必須要了解的,那麼如果你從來沒有了解過docker,這個系列的課程將會分為30節課左右,帶你入門docker,歡迎一起來學習!本期系列課程的學習目標課程簡介掌握Docker基礎知識完成Docker安裝與啟動大綱掌握Docker鏡像與容器相關命令大綱掌握Tomcat Nginx 等軟體的常用應用的安裝掌握docker遷移與備份相關命令大綱能夠運用Dockerfile編寫創建容器的腳本大綱能夠搭建與使用
  • (附Docker學習資源匯總)
    Docker為什麼能夠成功?更加關鍵的是,LXC終於被集成到了主流Linux內核中,進而成為了Linux系統輕量級容器技術的事實標準。從技術層面來看,LXC已經趟過了絕大部分的「坑」,完成了容器技術實用化的大半歷程。那麼Docker又是什麼呢?