docker是基於go語言實現的雲開源專案。
解決了應用在開發環境移植到測試環境不適配的問題,方便做持續整合並有助於整體發布。
虛擬機器它是作業系統裡面執行的另一種作業系統。例在windows系統裡面執行linux系統,應用程式對此毫無感知,因為虛擬機器看上雲跟真實的系統是一模一樣的,而對於底層作業系統來說,虛擬機器就是乙個普通檔案,不需要時直接將其刪除即可,它虛擬
出了作業系統、記憶體、硬體裝置等等。也就是說虛擬機器虛擬了整個作業系統所需要的環境資訊,包括硬體(核心 cpu 記憶體) 和一些軟體資訊,
虛擬機器的缺點:
1.資源占用多 2.冗餘步驟多 3.啟動慢
也就是說我每想使用乙個作業系統執行乙個應用,就必須把整個作業系統虛擬出來,但是這樣又會占用大量的硬體資源
由於前面虛擬機器存在的缺點,linux發展出了另一種虛擬化技術:linux容器(linux containers 縮寫lxc)
linux容器不是模擬乙個完整的作業系統,它只需要構建執行所必須的庫資源就可以,有了容器,就可以將軟體執行所需要的資源打包到乙個隔離的容器中,容器中的應用程序直接執行於宿主機的核心上,容器沒有自己的核心,也就沒有對硬體進行虛擬機器,因此容器變得更輕量。容器用到的硬體資源就會依賴於宿主機的硬體資源。
容器利用自身的隔離性和執行環境的獨立性,依賴作業系統的一些硬體裝置,使得容器可以做到一次構建,到處執行,因此容器要比傳統的虛擬機器更為輕巧方便,它的啟動是秒級的
每個容器之間互相隔離,每個容器有自己的庫資源檔案系統,相互不影響。
更簡單的系統運維
更快捷高效的交付和部署
更便捷的移植性、擴容性
docker是乙個client-server結構的系統,docker守護程序執行在主機上,然後通過socket連線從客戶端接受訪問,守護程序從客戶端接受命令,並管理執行在主機上的容器。
①docker有比虛擬機器更少的抽象層。
由於docker不需要hypervisor實現硬體資源的虛擬化,執行在docker容器上的程式直接使用的都是宿主機上的硬體資源,因此在cpu、記憶體利用率上docker將會在效率上有明顯優勢。
②docker利用宿主機的核心,而不是guest os(虛擬機器作業系統)。
虛擬機器軟體(vmware 和 virtualbox)在建立虛擬機器的時候會通過hypervisor來管理和建立多個不同作業系統的虛擬機器,通過這種方式建立虛擬機器需要實現硬體資源的虛擬化,因為它是乙個完整的作業系統。這個過程是分鐘級的,而docker是利用自身的隔離性和執行環境的獨立性,依賴宿主機硬體資源,從而達到了啟動只需幾秒。
docker 映象
(image)
就是乙個唯讀的模板
.映象可以用來建立多個
docker
容器docker利用容器(container)獨立執行的乙個或一組應用,
容器是用映象建立的執行例項。
它可以被啟動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平台,可以把容器看做是乙個簡易版的 linux 環境(包括root使用者許可權、程序空間、使用者空間和網路空間等)和執行在其中的應用程式(redis nginx mysql mycat )
容器的定義和映象幾乎一模一樣,也是一堆層的統一視角,唯一區別在於容器的最上面那一層是可讀可寫的。
倉庫(repository)是集中存放映象檔案的場所。
倉庫(repository)和倉庫註冊伺服器
(registry)
是有區別的,倉庫註冊伺服器上往往存放著多個倉庫,每個倉庫中又包含了多個映象,每個映象有不同的標籤(tag)
倉庫分為公開倉庫(public)和私有倉庫(
private
)兩種形式,最大的公開倉庫是 docker hub(
、網易雲等
映象是一種輕量級、可執行的獨立軟體包,用來打包軟體執行環境和基於執行環境開發的軟體,它包含執行某個軟體所需的所有內容,包括**、執行時、庫、環境變數和配置檔案。
union檔案系統(
unionfs
)是一種分層、輕量級並且高效能的檔案系統,它支援對檔案系統的修改作為一次提交來一層層的疊加,同時可以將不同目錄掛載到同乙個虛擬檔案系統下
(unite several directories into a single virtual filesystem)
。union
檔案系統是
docker
映象的基礎。映象可以通過分層來進行繼承,基於基礎映象(沒有父映象),可以製作各種具體的應用映象。
特性:一次同時載入多個檔案系統,但從外面看起來,只能看到乙個檔案系統,聯合載入會把各層檔案系統疊加起來,這樣最終的檔案系統會包含所有底層的檔案和目錄
docker的映象實際上由一層一層的檔案系統組成,這種層級的檔案系統
unionfs
。bootfs(boot file system)
主要包含
bootloader
和kernel, bootloader
主要是引導載入
kernel, linux
剛啟動時會載入
bootfs
檔案系統,在
docker
映象的最底層是
bootfs
。這一層與我們典型的
linux/unix
系統是一樣的,包含
boot
載入器和核心。當
boot
載入完成之後整個核心就都在記憶體中了,此時記憶體的使用權已由
bootfs
轉交給核心,此時系統也會解除安裝
bootfs
。rootfs (root file system) ,在bootfs之上。包含的就是典型
linux
系統中的
/dev, /proc, /bin, /etc
等標準目錄和檔案。
rootfs
就是各種不同的作業系統發行版,比如
ubuntu
,centos
等等。
對於乙個精簡的os,
rootfs
可以很小,只需要包括最基本的命令、工具和程式庫就可以了,因為底層直接用
host
的kernel
,自己只需要提供
rootfs
就行了。由此可見對於不同的
linux
發行版, bootfs
基本是一致的
, rootfs
會有差別
, 因此不同的發行版可以公用
bootfs
。docker
最大的乙個好處就是 - 共享資源
比如:有多個映象都從相同的 base 映象構建而來,那麼宿主機只需在磁碟上儲存乙份
base
映象,同時記憶體中也只需載入乙份 base 映象,就可以為所有容器服務了。而且映象的每一層都可以被共享。
docker映象都是唯讀的
當容器啟動時,乙個新的可寫層被載入到映象的頂部。這一層通常被稱作"容器層","容器層"之下的都叫"映象層"。
Docker學習系列 Docker簡介
docker 是乙個開源的應用容器引擎,基於 go 語言 並遵從apache2.0協議開源。docker 可以讓開發者打包他們的應用以及依賴包到乙個輕量級 可移植的容器中,然後發布到任何流行的 linux 機器上,也可以實現虛擬化。乙個完整的docker 有以下幾個部分組成 1.dockerclie...
Docker學習系列(一)Docker簡介
簡介 docker是乙個在全球範圍領先的軟體容器平台。開發人員可以使用容器來在協作過程中遇到的解決 不同環境配置 的問題。例如,在傳統的開發環境下,開發人員編寫 然後交由測試人員測試,但是因為各自配置的環境不同,這樣所開發和測試的結果就會不同 但是,如果使用docker的話,這個問題就不存在了。do...
docker基礎知識簡介
docker的目標是實現輕量級的作業系統虛擬化。其底層也是基於linux的 lxc 技術實現的,docker只是 在lxc上進行了一層封裝。因為docker是輕量級的虛擬化技術解決方案,所以,在起停操作方面十分快捷,非常方便。先來看看傳統虛擬化技術的原理,比如kvm,xen等,它們都是通過虛擬硬體,...