不能不知道的Docker知识
1.Docker是什么?
我們在理解 Docker 之前,首先得先區分清楚兩個概念,容器和虛擬機。
可能很多朋友都用過虛擬機,而對容器這個概念比較的陌生。我們用的傳統虛擬機如 VMware , VisualBox 之類的需要模擬整臺機器包括硬件。每臺虛擬機都需要有自己的操作系統,虛擬機一旦被開啟,預分配給它的資源將全部被占用。每一臺虛擬機包括應用,必要的二進制和庫,以及一個完整的用戶操作系統。而容器技術是和我們的宿主機共享硬件資源及操作系統,可以實現資源的動態分配。
容器包含應用和其所有的依賴包,但是與其他容器共享內核。容器在宿主機操作系統中,在用戶空間以分離的進程運行。容器技術是實現操作系統虛擬化的一種途徑,可以讓您在資源受到隔離的進程中運行應用程序及其依賴關系。通過使用容器,我們可以輕松打包應用程序的代碼、配置和依賴關系,將其變成容易使用的構建塊,從而實現環境一致性、運營效率、開發人員生產力和版本控制等諸多目標。容器可以幫助保證應用程序快速、可靠、一致地部署,其間不受部署環境的影響。容器還賦予我們對資源更多的精細化控制能力,讓我們的基礎設施效率更高。
通過下面這幅圖,我們可以很直觀的看出這兩者的區別所在:
Docker 屬于 Linux 容器的一種封裝,提供簡單易用的容器使用接口。它是目前最流行的 Linux 容器解決方案。而 Linux 容器是 Linux 發展出的另一種虛擬化技術,簡單來講, Linux 容器不是模擬一個完整的操作系統,而是對進程進行隔離,相當于是在正常進程的外面套了一個保護層。對于容器里面的進程來說,它接觸到的各種資源都是虛擬的,從而實現與底層系統的隔離。Docker 將應用程序與該程序的依賴,打包在一個文件里面。運行這個文件,就會生成一個虛擬容器。程序在這個虛擬容器里運行,就好像在真實的物理機上運行一樣。有了 Docker ,就不用擔心環境問題。
總體來說,Docker 的接口相當簡單,用戶可以方便地創建和使用容器,把自己的應用放入容器。容器還可以進行版本管理、復制、分享、修改,就像管理普通的代碼一樣。
2.Docker 的優勢:
3.Docker 中三個基本的概念:
- Image(鏡像)
- Container(容器)
- Repository(倉庫)
3.1Image(鏡像)
那么鏡像到底是什么呢?Docker 鏡像可以看作是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。鏡像不包含任何動態數據,其內容在構建之后也不會被改變,鏡像(Image)就是一堆只讀層(read-only layer)的統一視角。
從左邊我們看到了多個只讀層,它們重疊在一起。除了最下面一層,其他層都會有一個指針指向下一層。這些層是 Docker 內部的實現細節,并且能夠在主機的文件系統上訪問到。統一文件系統(Union File System)技術能夠將不同的層整合成一個文件系統,為這些層提供了一個統一的視角。這樣就隱藏了多層的存在,在用戶的角度看來,只存在一個文件系統。我們可以在圖片的右邊看到這個視角的形式。
3.2Container(容器)
容器(Container)的定義和鏡像(Image)幾乎一模一樣,也是一堆層的統一視角,唯一區別在于容器的最上面那一層是可讀可寫的。
由于容器的定義并沒有提及是否要運行容器,所以實際上,容器 = 鏡像 + 讀寫層。
3.3Repository(倉庫)
Docker 倉庫是集中存放鏡像文件的場所。鏡像構建完成后,可以很容易的在當前宿主上運行。但是, 如果需要在其他服務器上使用這個鏡像,我們就需要一個集中的存儲、分發鏡像的服務,Docker Registry(倉庫注冊服務器)就是這樣的服務。有時候會把倉庫(Repository)和倉庫注冊服務器(Registry)混為一談,并不嚴格區分。
Docker 倉庫的概念跟 Git 類似,注冊服務器可以理解為 GitHub 這樣的托管服務。實際上,一個 Docker Registry 中可以包含多個倉庫(Repository),每個倉庫可以包含多個標簽(Tag),每個標簽對應著一個鏡像。所以說,鏡像倉庫是 Docker 用來集中存放鏡像文件的地方,類似于我們之前常用的代碼倉庫。
通常,一個倉庫會包含同一個軟件不同版本的鏡像,而標簽就常用于對應該軟件的各個版本 。我們可以通過<倉庫名>:<標簽>的格式來指定具體是這個軟件哪個版本的鏡像。如果不給出標簽,將以 Latest 作為默認標簽。
倉庫又可以分為兩種形式:
- Public(公有倉庫)
- Private(私有倉庫)
Docker Registry 公有倉庫是開放給用戶使用、允許用戶管理鏡像的 Registry 服務。一般這類公開服務允許用戶免費上傳、下載公開的鏡像,并可能提供收費服務供用戶管理私有鏡像。除了使用公開服務外,用戶還可以在本地搭建私有 Docker Registry。Docker 官方提供了 Docker Registry 鏡像,可以直接使用做為私有 Registry 服務。當用戶創建了自己的鏡像之后就可以使用 Push 命令將它上傳到公有或者私有倉庫,這樣下次在另外一臺機器上使用這個鏡像時候,只需要從倉庫上 Pull 下來就可以了。
4.Docker 的架構:
我們從下圖可以直觀地看到 Docker 的架構:
Docker 使用 C/S 結構,即客戶端/服務器體系結構。Docker 客戶端與 Docker 服務器進行交互,Docker服務端負責構建、運行和分發 Docker 鏡像。
5.Docker 常用命令:
?
?
總結
以上是生活随笔為你收集整理的不能不知道的Docker知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有关架构图你需要了解的基础知识
- 下一篇: 对kubernetes的认识