摘要:分層存儲因為鏡像包含操作系統(tǒng)完整的文件系統(tǒng),其體積往往是龐大的,因此在設計時,就充分利用的技術,將其設計為分層存儲的架構。分層存儲的特征還使得鏡像的復用定制變的更為容易。
什么是Docker
Docker 是一個開源的應用容器引擎,基于 Go 語言 并遵從Apache2.0協(xié)議開源。Docker 可以讓開發(fā)者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然后發(fā)布到任何流行的 Linux 機器上,也可以實現(xiàn)虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低.
Docker與傳統(tǒng)的虛擬機相比有哪些優(yōu)勢呢?
首先來看傳統(tǒng)虛擬機與Docker的對比圖:
可以看出傳統(tǒng)虛擬機技術是虛擬出一套硬件后,在其上運行一個完整操作系統(tǒng),在該系統(tǒng)上再運行所需應用進程;
而容器內的應用進程直接運行于宿主的內核,容器內沒有自己的內核,而且也沒有進行硬件虛擬。因此容器要比傳統(tǒng)虛擬機更為輕便
為什么需要Docker作為一種新興的虛擬化方式,Docker 跟傳統(tǒng)的虛擬化方式相比具有眾多的優(yōu)勢
對于系統(tǒng)資源的利用更加的高效:由于容器不需要進行硬件虛擬以及運行完整操作系統(tǒng)等額外開銷,Docker 對系統(tǒng)資源的利用率更高
啟動時間更快:傳統(tǒng)的虛擬機技術啟動應用服務往往需要數(shù)分鐘,而 Docker 容器應用,由于直接運行于宿主內核,無需啟動完整的操作系統(tǒng),因此可以做到秒級、甚至毫秒級的啟動時間。大大的節(jié)約了開發(fā)、測試、部署的時間。
一致的運行環(huán)境:由于開發(fā)環(huán)境、測試環(huán)境、生產環(huán)境不一致,導致有些 bug 并未在開發(fā)過程中被發(fā)現(xiàn)。而 Docker 的鏡像提供了除內核外完整的運行時環(huán)境,確保了應用運行環(huán)境一致性,從而不會再出現(xiàn) 「這段代碼在我機器上沒問題啊」 這類問題。
持續(xù)交付和部署:對開發(fā)和運維(DevOps)人員來說,最希望的就是一次創(chuàng)建或配置,可以在任意地方正常運行。使用 Docker 可以通過定制應用鏡像來實現(xiàn)持續(xù)集成、持續(xù)交付、部署。開發(fā)人員可以通過 Dockerfile 來進行鏡像構建,并結合 持續(xù)集成(Continuous Integration) 系統(tǒng)進行集成測試,而運維人員則可以直接在生產環(huán)境中快速部署該鏡像,甚至結合持續(xù)部署(Continuous Delivery/Deployment) 系統(tǒng)進行自動部署。
更輕松的遷移:由于 Docker 確保了執(zhí)行環(huán)境的一致性,使得應用的遷移更加容易。更輕松的維護和擴展:Docker 使用的分層存儲以及鏡像的技術,使得應用重復部分的復用更為容易,也使得應用的維護更新更加簡單,基于基礎鏡像進一步擴展鏡像也變得非常簡單。
那么接下來針對Docker的三個基本概念進行了解。
Docker的基本概念Docker 包括三個基本概念:
鏡像( Image )
容器( Container )
倉庫( Repository )
理解了這三個概念,就理解了 Docker 的整個生命周期。
鏡像Docker鏡像是一個特殊的文件系統(tǒng),除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準備的一些配置參數(shù)(如匿名卷、環(huán)境變量、用戶等)。鏡像不包含任何動態(tài)數(shù)據(jù),其內容在構建之后也不會被改變。
分層存儲因為鏡像包含操作系統(tǒng)完整的 root 文件系統(tǒng),其體積往往是龐大的,因此在
Docker 設計時,就充分利用 Union FS 的技術,將其設計為分層存儲的架構。所以
嚴格來說,鏡像并非是像一個 ISO 那樣的打包文件,鏡像只是一個虛擬的概念,其
實際體現(xiàn)并非由一個文件組成,而是由一組文件系統(tǒng)組成,或者說,由多層文件系
統(tǒng)聯(lián)合組成。
分層存儲的特征還使得鏡像的復用、定制變的更為容易。甚至可以用之前構建好的
鏡像作為基礎層,然后進一步添加新的層,以定制自己所需的內容,構建新的鏡
像。
鏡像( Image )和容器( Container )的關系,就像是面向對象程序設計中的類 和 實例 一樣,鏡像是靜態(tài)的定義,容器是鏡像運行時的實體。容器可以被創(chuàng)建、啟動、停止、刪除、暫停等。
容器的實質是進程,但與直接在宿主執(zhí)行的進程不同,容器進程運行于屬于自己的獨立的 命名空間。因此容器可以擁有自己的 root 文件系統(tǒng)、自己的網絡配置、自己的進程空間,甚至自己的用戶 ID 空間。
Docker Registry鏡像構建完成后,可以很容易的在當前宿主機上運行,但是,如果需要在其它服務器上使用這個鏡像,我們就需要一個集中的存儲、分發(fā)鏡像的服務,DockerRegistry 就是這樣的服務。
一個 Docker Registry 中可以包含多個 倉庫( Repository );每個倉庫可以包含多個 標簽( Tag );每個標簽對應一個鏡像。
通常,一個倉庫會包含同一個軟件不同版本的鏡像,而標簽就常用于對應該軟件的各個版本。
我們可以通過 <倉庫名>:<標簽> 的格式來指定具體是這個軟件哪個版本的鏡像。如果不給出標簽,將以 latest 作為默認標簽。以 Ubuntu 鏡像 為例, ubuntu 是倉庫的名字,其內包含有不同的版本標簽,如, 16.04 , 18.04 。我們可以通過 ubuntu:16.04 ,或者 ubuntu:18.04來具體指定所需哪個版本的鏡像。如果忽略了標簽,比如 ubuntu ,那將視為ubuntu:latest 。
Docker的安裝Docker 分為 CE 和 EE 兩大版本。CE 即社區(qū)版(免費,支持周期 7 個月),EE即企業(yè)版,強調安全,付費使用,支持周期 24 個月。這里就演示在ubuntu下進行Docker的安裝了。
第一步:卸載舊版本。舊版本的 Docker 稱為 docker 或者 docker-engine ,使用以下命令卸載舊版
本:
sudo apt-get remove docker docker-engine docker.io
第二步:使用 APT 安裝。由于 apt 源使用 HTTPS 以確保軟件下載過程中不被篡改。因此,我們首先需要
添加使用 HTTPS 傳輸?shù)能浖约?CA 證書。
$ sudo apt-get update $ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
第三步:啟動 Docker CE:
$ sudo systemctl enable docker $ sudo systemctl start docker
第四步:檢測是否安裝成功,這個時候需要運行一個鏡像容器,看能否成功:
$docker run hello-world
如果你也看到類似的頁面信息,那么恭喜你安裝成功。接下來可以為其進行用戶分組操作。
默認情況下, docker 命令會使用 Unix socket 與 Docker 引擎通訊。而只有root 用戶和 docker 組的用戶才可以訪問 Docker 引擎的 Unix socket。出于安全考慮,一般 Linux 系統(tǒng)上不會直接使用 root 用戶。因此,更好地做法是將
需要使用 docker 的用戶加入 docker 用戶組。
建立 docker 組:
$ sudo groupadd docker
將當前用戶加入 docker 組:
$ sudo usermod -aG docker $USER
接下來可以愉快地進行Docker的學習了。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27915.html
摘要:是官方三劍客項目之一,提供容器集群服務,是官方對容器云生態(tài)進行支持的核心方案。工作節(jié)點是任務執(zhí)行節(jié)點,管理節(jié)點將服務下發(fā)至工作節(jié)點執(zhí)行。 Docker Swarm 是 Docker 官方三劍客項目之一,提供 Docker 容器集群服務,是 Docker 官方對容器云生態(tài)進行支持的核心方案。使用它,用戶可以將多個 Docker 主機封裝為單個大型的虛擬 Docker 主機,快速打造一套容...
摘要:前言其實接觸也有一段時間了,但是一直沒有做下總結,現(xiàn)在網上關于的介紹也有很多了,本著好記性不如爛筆頭的原則,還是自己再記錄一波吧。實現(xiàn)目標安裝探索基本概念及用法環(huán)境準備位,內核版本不低于安裝以下命令均需在權限下執(zhí)行。 showImg(https://segmentfault.com/img/remote/1460000017894270?w=538&h=344); 前言 其實接觸 do...
摘要:原文發(fā)表在我的個人網站深入理解一基本概念及用法在本系列文章中,我將跟大家一起學習的基本用法,探索的各種高級功能,理解背后的運行原理,并最終達到深入理解靈活使用的目的。下一步深入理解二中間操作流 原文發(fā)表在我的個人網站:深入理解 Laravel Eloquent(一)——基本概念及用法 在本系列文章中,我將跟大家一起學習 Eloquent 的基本用法,探索 Eloquent 的各種...
摘要:一交叉編譯概念什么是交叉編譯交叉編譯是在一個平臺上生成另一個平臺上的可執(zhí)行代碼。也要樹莓派有時又是因為目的平臺還沒有建立,連操作系統(tǒng)都沒有,根本談不上運行什么編譯器。 ...
摘要:組件提供了很多實用的組件包括控制臺組件定時器觸發(fā)器日志處理等等致謝從下一章開始,我們逐步使用的各項功能并開發(fā)一個簡單的并發(fā)版爬蟲系統(tǒng),感謝你看到這里,希望本文可以幫到你,謝謝 showImg(https://segmentfault.com/img/bVbpts4?w=640&h=160); 前言 我一生的文章都會放在這里,我的博客,我希望每一行代碼,每一段文字都能幫助你。https:...
閱讀 3046·2023-04-26 02:27
閱讀 2763·2021-11-22 13:54
閱讀 902·2021-11-12 10:36
閱讀 3753·2021-10-09 09:44
閱讀 3178·2021-10-09 09:41
閱讀 1223·2021-09-22 10:02
閱讀 2833·2019-08-30 15:56
閱讀 3104·2019-08-30 11:02