上一篇筆記 面向初學者的Docker學習教程:基礎篇 咱們從三個方面大體的介紹了一下Dockerjava
相信看過這篇文章的小夥伴已經對Docker有了一個初步的認識,只有咱們充分認識了Docker的奇妙之處,後面才能更好的使用它,接下來呢,咱們將說一下Docker最重要的三個基本概念,鏡像,容器和倉庫mysql
在瞭解鏡像這個概念以前,咱們須要先大體瞭解一下聯合文件系統-UnionFS,它是Docker鏡像的基礎,聯合文件系統是一種分層,輕量級而且高性能的文件系統,它支持對文件系統的修改做爲一次提交來一層一層的疊加,同時能夠將不一樣目錄掛載到同一個虛擬文件系統下,鏡像能夠經過分層來進行集成,咱們能夠基於一個基礎的鏡像,而後製做出各類各樣知足咱們需求的應用鏡像。linux
同時,對於一個精簡的OS,rootfs能夠很小,有常見的命令就行,同時,底層又是直接使用的操做系統的內核,因此每每Docker中一個鏡像的體積相對來講能夠很小,好比一個完整版的centos可能要幾個G,可是Docker中的centos大概只有300M.git
對於docker鏡像,官方的定義以下:github
An image is a read-only template with instructions for creating a Docker container. Often, an image is based on another image, with some additional customization. For example, you may build an image which is based on the ubuntu image, but installs the Apache web server and your application, as well as the configuration details needed to make your application run.‘web
映像是一個只讀模板,帶有建立Docker容器的指令。一般,一個映像是基於另外一個映像的,還須要進行一些額外的定製。例如,您能夠構建一個基於ubuntu映像的映像,可是安裝Apache web服務器和您的應用程序,以及使您的應用程序運行所需的配置細節。sql
PS:一個鏡像能夠建立多個容器。docker
容器是用鏡像建立的運行實例。ubuntu
每一個容器均可以被啓動,開始,中止,刪除,同時容器之間相互隔離,保證應用運行期間的安全。centos
咱們能夠把容器理解爲一個精簡版的linux操做系統,包括root用戶權限,進程空間,用戶空間和網絡空間等等這些,而後加上再它之上運行的應用程序。
好比咱們如今基於mysql鏡像建立了一個容器,那麼,這個容器其實並非只有一個mysql程序,而是mysql一樣也是安裝運行在咱們容器內的linux環境中的。
再說這個問題以前,咱們不妨先來看一下下面這段java代碼:
Person p = new Person();
Person p1 = new Person();
Person p2 = new Person();
複製代碼
鏡像在這裏就是咱們的Person,容器就是一個個Person類的實例。一個Person能夠建立多個實例,一個鏡像也能夠建立多個容器。
倉庫相對來講就比較容易理解了,倉庫(Repository)是集中存放鏡像文件的場所。
倉庫分爲公開倉庫和私有倉庫,目前的話,全世界最大的倉庫是Docker官方的 Docker Hub
因爲一些不可抗拒的因素,致使咱們若是從Docker Hub上下載公開的鏡像是很是蛋疼的,這點你們能夠參考你用百度網盤官方下載時的感受。因此,國內咱們通常使用阿里雲或者網易雲的鏡像倉庫。
鏡像 容器 倉庫 他們三者之間的關係圖以下:
今天呢,咱們簡單的描述了一下Docker三要素,鏡像,容器和倉庫,在以後的學習中咱們會常常看到鏡像和容器這兩個概念,同時也會編寫咱們本身的DockerFile構建咱們自定義的鏡像文件。
最後,相關筆記已經同步開源至Github(歡迎star):: github.com/hanshuaikan…