當前位置:首頁 > 科技 > 正文

docker原理(NAS為啥要有docker)

docker原理(NAS為啥要有docker)

很多朋友對于docker原理和NAS為啥要有docker不太懂,今天就由小編來為大家分享,希望可以幫助到大家,下面一起來看看吧!docker鏡像加速原理docker鏡像...

很多朋友對于docker原理和NAS為啥要有docker不太懂,今天就由小編來為大家分享,希望可以幫助到大家,下面一起來看看吧!

docker鏡像加速原理

docker鏡像加速的原理:因為Docker鏡像是分層的,因此在加載一個鏡像的時候,會按照從底層到高層的順序依次加載該鏡像所需要的鏡像層。在加載的過程中,如果當前鏡像層已經(jīng)存在,則會跳過當前鏡像層。比如:已經(jīng)下載過MySQL鏡像,現(xiàn)在要下載Tomcat鏡像,而這兩個鏡像都需要CentOS鏡像層,那么下載Tomcat鏡像的時候,就會跳過下載CentOS鏡像層。

Docker鏡像實際上是由一層一層文件系統(tǒng)組成,這種層級文件系統(tǒng)就是UnionFS

當用dockerrun啟動這個容器時,實際上在鏡像的頂部添加了一個新的可寫層。這個可寫層也叫容器層。

這里我們通過案例來證明一下,這是我本地已經(jīng)下載好的鏡像包,大家可以看到centos這個鏡像包的大小才209M,平時我們安裝的虛擬機上的centos都是幾個G,這個里為什么200M就可以?這里我們的centos鏡像文件只是一個最精簡的rootfs版本,與底層系統(tǒng)共用了kernel,所以才200M就可以將一個centos跑起來,對于不同發(fā)行版本可能這個大小會略微有所不同。

docker能做什么

Docker是一種容器化技術,可以使得應用程序在不同的操作系統(tǒng)上以相同的方式運行,消除了傳統(tǒng)虛擬化技術的性能問題。Docker可以在不同的操作系統(tǒng)上運行,使得應用程序可以在不同的環(huán)境中運行,提高了應用程序的可移植性。

具體來說,Docker可以做什么:

快速部署和擴容:Docker容器可以快速啟動并擴展,使得應用程序可以在幾分鐘內(nèi)啟動并運行。

消除環(huán)境差異:Docker容器可以消除不同環(huán)境之間的差異,使得應用程序可以在不同的環(huán)境中運行。

提高資源利用率:Docker容器可以共享物理服務器,提高服務器的資源利用率。

簡化部署流程:Docker容器可以簡化部署流程,使得部署變得更加簡單和可靠。

提高開發(fā)效率:Docker可以使得開發(fā)人員和測試人員使用相同的運行環(huán)境,提高開發(fā)效率。

總的來說,Docker的出現(xiàn)為應用程序的部署和管理帶來了很多便利,使得應用程序可以在不同的環(huán)境中運行,提高了應用程序的可移植性和可靠性。

k8s和docker哪個是未來的方向

1.Docker是未來的方向。2.因為Docker是一種開源的容器化平臺,它可以將應用程序及其依賴項打包成一個獨立的容器,實現(xiàn)跨平臺、快速部署和可移植性。而Kubernetes(簡稱K8s)是一個用于自動化部署、擴展和管理容器化應用程序的開源平臺。雖然K8s可以管理多個Docker容器,但K8s更多地是用于解決容器編排和管理的問題,而Docker則是實現(xiàn)容器化的基礎技術。由于容器化技術在云計算和微服務架構等領域有著廣泛的應用,Docker作為容器化的基礎技術,具有更廣闊的發(fā)展前景。3.隨著云計算和微服務架構的普及,容器化技術將成為未來軟件開發(fā)和部署的主流趨勢。Docker作為目前最流行的容器化平臺,具有強大的生態(tài)系統(tǒng)和廣泛的應用場景,因此可以說Docker是未來的方向。同時,Kubernetes作為容器編排和管理的開源平臺,也在不斷發(fā)展和完善,為容器化應用的部署和管理提供了更多的便利。因此,熟練掌握Docker和Kubernetes的技術將有助于在未來的軟件開發(fā)和運維領域取得更好的發(fā)展。

docker是什么架構

docker架構:

Docker是一個客戶端-服務器(C/S)架構程序。

Docker客戶端只需要向Docker服務器或者守護進程發(fā)出請求,服務器或者守護進程將完成所有工作并返回結果。

Docker提供了一個命令行工具Docker以及一整套RESTfulAPI。你可以在同一臺宿主機上運行Docker守護進程和客戶端,也可以從本地的Docker客戶端連接到運行在另一臺宿主機上的遠程Docker守護進程。

Docker鏡像和容器的區(qū)別詳解

當想讓一個容器做兩件事情,或者使一個Docker鏡像包含來自兩個不同鏡像的依賴庫時,就需要知道每個鏡像的Dockerfile。本文介紹了如何通過dockerhistory命令來對Docker鏡像進行反向工程,得到它們的Dockerfile,并組織到一個Dockerfile里然后build,從而實現(xiàn)想做的事情。

常言道,“不要重復發(fā)明輪子!”

在使用Docker時,構建自己的鏡像之前,最好在DockerHub尋找一些可以直接使用的鏡像做練習。把軟件架構分布到一系列容器中,每一個容器只做一件事情,這樣的效果非常好。構建分布式應用的最好的基石是使用來自DockerHub的官方鏡像,因為可以信任它們的質(zhì)量。

在某些情況下,可能想讓一個容器做兩件不同的事情。而在另外一些情況下,可能想讓一個Docker鏡像包含來自兩個不同鏡像的依賴庫。如果有每個鏡像的Dockerfile,這是非常簡單的。將它們組織到一個Dockerfile里然后build就行。

然而,大多數(shù)時間都在使用DockerHub上準備好的鏡像,不會有它們的源Dockerfile。我花時間找一個可以合并(或flatten)兩個不同Docker鏡像的工具,當然沒有它們的Dockerfile。也就是說在找一個能做下面這件事的東西:

image1--

\

--->merged_image_12

/

image2--

此前在GitHub上有兩個相關的討論(1、2),盡管它們都被關閉了。

這可能嗎?

那么,是否存在工具能夠像這樣做嗎:dockermergeimage2image2merged_image?

沒有!

你甚至不可以用下面的方式來構建Dockerfile:

FROMimage1

FROMimage2

簡而言之,在一個Dockerfile里不能有多個基礎鏡像。

但是我需要這個功能!

唯一的解決辦法是取得這些鏡像的Dockerfile,然后把它們組織到一個文件中,再進行構建。那么,我能在DockerHub上獲得一個鏡像的Dockerfile嗎?幸運的是可以。它不能離線獲?。ㄗg注:原文是online,但顯然online時對于來自GitHub的自動構建鏡像是可以直接獲取的),但是你可以使用dockerhistory命令,通過反向工程獲取。

怎么來使用?

在你的機器上使用dockerpull從DockerHub下載鏡像。

dockerpullimage1

dockerpullimage2

然后使用dockerhistory來取得構建這兩個容器時運行的命令。

dockerhistory--no-trunc=trueimage>image1-dockerfile

dockerhistory--no-trunc=trueimage2>image2-dockerfile

接下來打開這兩個文件,你可以看到每個鏡像的命令堆棧。這是因為Docker鏡像通過層(閱讀更多)的方式來構建。即你在Dockerfile中鍵入的每一個命令所構建的新鏡像,都是在之前的命令產(chǎn)生的鏡像之上。所以你可以對鏡像進行逆向工程。

限制

不能對鏡像進行反向工程的唯一場景,是鏡像的維護者在他的Dockerfile中使用了ADD或COPY命令。你會看到這樣一行:

ADDfile:1ac56373f7983caf22

或ADDdir:cf6fe659e9d21535844

這是因為不知道維護者在他自己的機器上,包括鏡像里使用了什么本地文件。

宿主機怎樣與虛機里的docker容器通信

一個非常好的問題。使用Docker時,宿主機和Docker容器之間、Docker容器和Docker容器之間,都需要進行服務間通信。

一,宿主機和Docker容器之間

Docker啟動容器時,指定服務端口,比如啟動Redis時,端口為6379,這時如果需要訪問Redis服務,就使用ip地址:端口,或者直接使用localhost:6379

在需要直接登錄到容器時,可以使用docker命令,比如:

dockerexec-itdata_redis_1bash

其中data_redis_1時容器名稱,可以通過dockerps查看當前容器信息:

二,Docker容器之間

Docker容器快捷高效部署應用,資源編排定義和運行多個容器,通過docker-compose.yml配置文件聲明各個服務,作為一個整體來創(chuàng)建和啟動。

那么Docker容器之間怎么通信呢?顯然是不應該使用IP地址的,應該使用和配置hostname,如果在不同子網(wǎng),就增加networks信息。

1,配置hostname

以Redis為例,Redis服務被API服務調(diào)用,為Redis配置hostname:cache

2,引用hostname

API服務在application.yml中配置Redis連接信息時,使用hostname指定服務地址:

3,不同子網(wǎng)間配置networks信息

實際使用中經(jīng)常將服務按照不同類別部署在不同子網(wǎng)中,這時需要指定networks信息。以數(shù)據(jù)層和接口層為例:

1)部署Redis時,配置networks為data,橋接模式

2)部署API服務時,聲明networks信息,data是external外部子網(wǎng)

我是工作多年的Web應用架構師,陸續(xù)發(fā)布關于軟件開發(fā)方面的文章,歡迎關注我,了解更多IT專業(yè)知識。

OK,關于docker原理和NAS為啥要有docker的內(nèi)容到此結束了,希望對大家有所幫助。

主站蜘蛛池模板: 狠狠色丁香婷婷综合尤物| 欧美综合自拍亚洲综合图| 亚洲色欧美色国产综合色| 久久婷婷色香五月综合激情| 中文字幕乱码人妻综合二区三区| 久久久久久综合网天天| 一本色道久久88加勒比—综合| 国产一级a爱做综合| 色综合伊人色综合网站| 婷婷色中文字幕综合在线 | 国产精品综合专区中文字幕免费播放| 色欲综合久久躁天天躁蜜桃| 久久久综合香蕉尹人综合网| 亚洲国产成人久久综合野外| 欧美亚洲日韩国产综合网| 亚洲 综合 欧美在线视频| 国产综合色在线视频区| 久久婷婷是五月综合色狠狠| 精品综合久久久久久97超人| 亚洲综合精品一二三区在线| 伊人久久大香线蕉综合5g| 色妞色综合久久夜夜| 一本色道久久综合狠狠躁| 精品久久人人做人人爽综合| 国产在线五月综合婷婷| 国产成人亚洲综合无码| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 91在线亚洲综合在线| 狠狠人妻久久久久久综合| 国产欧美日韩综合精品一区二区| 色综合合久久天天综合绕视看| 欧美日韩国产综合草草| 久久婷婷激情综合色综合俺也去| 色视频综合无码一区二区三区| 激情五月婷婷综合网站| 欧美亚洲综合另类成人| 一本一本久久A久久综合精品| 精品综合久久久久久97超人| 亚洲日韩在线中文字幕综合| 亚洲狠狠色丁香婷婷综合| 色婷婷六月亚洲综合香蕉|