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