精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

docker和虛擬機有何區(qū)別?

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2023-12-06 10:08 ? 次閱讀

docker常用命令

30def948-9367-11ee-939d-92fbcf53809c.jpg

上圖是Docker的架構(gòu)

整個Docker由客戶端、服務端和倉庫構(gòu)成

常用命令


docker images 




docker search imagename 




docker pull imagename:tag 




docker rmi id/name 




docker ps 




docker run -it -p port1:port2 image 








docker exec -it containername 




docker stop containername 




docker start containername 




docker cp file containername:dir 
docker cp containername:dir file 




docker inspect  containername 




docker rm containername 




docker volume ls 




docker save -o image 




docker load xx.tar.gz 

docker與虛擬機

docker出現(xiàn)的原因主要是解決傳統(tǒng)的開發(fā)和運維方面的問題

case one:開發(fā)環(huán)境和生產(chǎn)環(huán)境可能不一致的問題,就比如一個項目剛開發(fā)的時候使用的MySQL是5.5版本,之后經(jīng)過幾輪開發(fā),MySQL版本升級到了5.7,這個時候測試的版本還是5.5,在沒有虛擬化技術(shù)之前,測試只有兩個辦法 1.刪了重裝 2.多裝一個 就很麻煩。但虛擬化技術(shù)出現(xiàn)之后,直接遠程docker pull,幾分鐘之內(nèi)就能構(gòu)建出一個MySQL5.7的環(huán)境

case two:在不同的開發(fā)環(huán)境中構(gòu)建和運行應用程序可能會遇到很多問題。Docker可以將應用程序和依賴項打包到一個可移植的容器中,從而使得開發(fā)環(huán)境的設置變得更加簡單和重復

case three:從安全性和速度上來說也比傳統(tǒng)運維更加簡單,可以很輕松的起成百上千個容器,并且這些容器在操作系統(tǒng)級別和硬件級別都存在隔離

一句話概括:通過Docker我們可以將**程序運行的環(huán)境也納入到控制中 **

docker和虛擬機有何區(qū)別

docker絕對不是輕量級的虛擬機 絕對不是

docker是一個client-server結(jié)構(gòu)的應用,守護進程運行在主機上,然后通過socket連接從客戶端訪問docker守護進程

一個docker容器,是一個運行時的環(huán)境,可以簡單理解成進程運行的集裝箱

docker和kvm(linux的內(nèi)核虛擬機)都是虛擬化技術(shù),主要差別在于:

docker比虛擬機更少的抽象層,docker更加輕便和低成本

docker利用宿主機內(nèi)核 kvm需要guest os(直接在Host OS上多建一個OS),docker以MB硬盤為單位,kvm以GB為單位

在啟動速度上 docker是秒級別的,而KVM是分鐘級別的,和KVM相比,docker應用的性能高,同時系統(tǒng)的開銷小

30ff45b8-9367-11ee-939d-92fbcf53809c.png

KVM在宿主機器的基礎上創(chuàng)建虛擬層、來賓操作系統(tǒng)、虛擬化倉庫,然后安裝應用

容器在宿主機操作系統(tǒng)上創(chuàng)建docker引擎,在引擎的基礎上安裝應用

所以虛擬機是分鐘級別 容器是秒級別

最核心的一點是:Docker和傳統(tǒng)的VM虛擬機作比較的話,并不需要硬件的支持,只是進行了內(nèi)核級別的虛擬化,像VM虛擬機是和真正的物理機器一樣,對各種硬件都進行了虛擬化

docker技術(shù)底座

Linux命名空間 namespace 、控制組cgroup和unionFS union file system三大技術(shù)支撐了目前Docker的實現(xiàn) 也是Docker能夠出現(xiàn)的最重要原因

namespace

在linux中,namespace是在內(nèi)核級別實現(xiàn)資源隔離的手段,不同的namespace程序可以享有一份獨立的系統(tǒng)資源

namespace是linux為我們提供的用于分離進程樹、網(wǎng)絡接口、掛載點、進程通信等資源的方法,在日常使用linux的時候,如果我們在服務器上啟動了多個服務,這些服務其實是會相互影響的,因為他們能互相可見,也可以訪問宿主機上的任意文件,但我們更希望一臺機器上的不同服務能做到完全隔離,就像運行在不同的機器上一樣。Docker通過使用namespace來實現(xiàn)容器的隔離,每個容器都有自己的namespace,可以訪問其內(nèi)部資源而不會影響宿主機或者其他容器,這使得Docker可以輕松地創(chuàng)建、啟動和停止容器

在這種環(huán)境下,一旦服務器的某一個服務被入侵,那么入侵者就能夠訪問當前機器上的所有服務和文件

通過這七個選項 我們能設置新的進程在哪些資源上和宿主機進行隔離

fork:當調(diào)用fork函數(shù)時,系統(tǒng)會創(chuàng)建新的進程為其分配資源,例如存儲數(shù)據(jù)和代碼的空間,然后把原來的進程值都賦值到新的進程中,只有少量值與原來不同,相當于克隆自己fork的返回值在父進程中:fork返回子進程的ID在子進程中:fork返回0

如果錯誤:fork返回一個負值

Linux的命名空間機制提供了以下其中不同的命名空間,包括

CLONE_NEW CGROUP

CLONE_NEW IPC 提供一個獨立的進程間通信的機制,信號量、共享內(nèi)存、消息隊列等只在容器內(nèi)部課見

CLONE_NEW NET 為容器提供一個獨立的網(wǎng)絡環(huán)境,使得容器內(nèi)部的網(wǎng)絡接口、IP地址、路由表和防火墻規(guī)則都只能在容器內(nèi)部可見

CLONE_NEW NS

CLONE_NEW PID 容器的獨立進程ID空間,容器內(nèi)部的進程只能看到自己的進程ID,而不會影響宿主機或者其他容器的進程

CLONE_NEW USER 容器內(nèi)的獨立用戶和用戶組

CLONE_NEW UTS 容器內(nèi)的獨立主機名和域名

通過這些選項,我們可以在創(chuàng)建新的進程時設置哪些資源與宿主機器進行隔離

Linux最特殊的兩個進程:pid為1的/sbin/init的進程,和pid為2的kthreadd進程,這兩個進程都是被Linux的上帝進程idle創(chuàng)建出來的,前者負責執(zhí)行內(nèi)核的一部分初始化工作和系統(tǒng)配置,后者負責管理和調(diào)度其他的內(nèi)核進程

當我們運行docker run或者docker start的時候,就會啟動setNamespaces方法,設置進程、用戶、網(wǎng)絡和IPC相關(guān)的命名空間,然后作為Create的參數(shù)在創(chuàng)建新容器的時候完成設置

如果docker的容器通過Linux的命名空間完成了和宿主機進程的網(wǎng)絡隔離,但是又沒有辦法通過宿主機的網(wǎng)絡與整個互聯(lián)網(wǎng)相連,就會產(chǎn)生很多限制,所以Docker中的服務還是需要與外界連接才能發(fā)揮作用,每一個用docker run啟動的容器都具有單獨的網(wǎng)絡命名空間,Docker為我們提供了四種不同的網(wǎng)絡模式

Host

Container

None

Bridge

Docker默認的網(wǎng)絡設置模式:網(wǎng)橋模式,在這種模式下除了分配隔離的網(wǎng)絡命名空間之外,Docker還會為所有的容器設置IP地址,當Docker服務器啟動時,會創(chuàng)建新的虛擬網(wǎng)橋docker0,docker0會為每一個容器分配一個新的IP地址,并將docker0的IP地址設置為默認的網(wǎng)關(guān),網(wǎng)橋docker0通過iptables中的配置與宿主機器上的網(wǎng)卡相連。每當有一個新的服務需要暴露給宿主機,就會給容器分配一個IP地址,同時向iptables追加一條新的規(guī)則。

Docker通過Linux的命名空間實現(xiàn)了網(wǎng)絡的隔離,又通過iptables進行數(shù)據(jù)包轉(zhuǎn)發(fā),讓Docker容器能夠優(yōu)雅的為宿主機或者其他容器提供服務

Cgroup

CGROUP解決的就是限制容器物理資源占用的問題

掛載點:Docker容器中的進程仍然能夠訪問或者修改宿主機上的其他目錄,這是我們不希望看到的。

如果一個容器需要啟動,那么它一定需要提供一個跟文件系統(tǒng)(rootfs),容器需要通過這個文件系統(tǒng)來創(chuàng)建一個新的進程,所有二進制的執(zhí)行都必須要在這個跟文件的系統(tǒng)中。從而實現(xiàn)將容器需要的目錄掛在到容器中,同時也禁止當前的容器進程訪問宿主機器上的其他目錄,保證了不同文件系統(tǒng)的隔離

我們通過NAMESPACE隔離了文件、網(wǎng)絡和進程,但是不能提供物理資源上的隔離,比如CPU或者內(nèi)存,如果一個容器正在執(zhí)行CPU密集型的任務,那么就會影響其他容器的性能和效率,而CGROUPS就是能夠隔離宿主機器上的物理資源,例如CPU 內(nèi)存 磁盤IO等等

每一個CGROUP都是一組被相同標準和參數(shù)限制的進程,CGROUP之間有層級關(guān)系,可以從父類進程一些標準和參數(shù)

而Cgroup的核心是一個叫做cgroupfs的文件系統(tǒng),位于linux內(nèi)核中的/sys/fs/cgroup目錄下。該文件系統(tǒng)允許用戶在一個層次結(jié)構(gòu)中創(chuàng)建、管理和監(jiān)控cgroup,具體實現(xiàn)如下

創(chuàng)建cgroup層次結(jié)構(gòu),這個層次結(jié)構(gòu)由一個或者多個cgroup組成,每個cgroup都代表一組進程,并擁有一組資源限制。

將進程添加到cgroup中,這個實現(xiàn)其實就是把進程加到task文件中

為cgroup分配限制資源,例如可以用cgroup/cpu/相關(guān)的文件來限制cpu的使用率

監(jiān)控cgroup的資源使用

Union File System

Union File System是一種文件系統(tǒng)技術(shù),可以將多個文件系統(tǒng)(通常是只讀文件系統(tǒng)和可寫文件系統(tǒng))合并成一個虛擬文件系統(tǒng),使其像一個文件系統(tǒng),但實際上是由多個文件系統(tǒng)組成的。

在Docker中,UFS解決了鏡像只讀不可寫的問題,同時也是Docker的基礎文件系統(tǒng)

UFS的實現(xiàn)基于三種文件系統(tǒng):

只讀文件系統(tǒng)

是UFS的基礎,通常包含操作系統(tǒng)的核心組件和基本文件系統(tǒng)。在Docker中,只讀文件系統(tǒng)通常是一個Docker鏡像提供的

可寫文件系統(tǒng)

可寫文件系統(tǒng)是一個額外的文件系統(tǒng)層,它覆蓋在只讀文件系統(tǒng)之上,用于保存容器中創(chuàng)建、修改和刪除的文件。每個容器都有自己的可寫文件系統(tǒng)層,使得容器之間的文件不會相互干擾,在Docker中,可寫層是在容器運行時創(chuàng)建的

合并文件系統(tǒng)

將只讀文件系統(tǒng)和可寫文件系統(tǒng)合并而成的,使得容器可以訪問只讀文件系統(tǒng)和可寫文件系統(tǒng)層中的文件,就像它們是一個單獨的文件系統(tǒng)一樣。

在DOCKER中還有另一個非常重要的問題-鏡像

Docker鏡像的本質(zhì)其實就是一個壓縮包 也就是一個文件

Docker鏡像是如何構(gòu)建:Docker中的每一個鏡像都是由一系列只讀的層組成的,DockerFile中的每一個命令都會在已有的只讀層上創(chuàng)建一個新的層,類似于搭積木,鏡像的每一層其實都只是對當前鏡像進行了部分改動,當鏡像被docker run命令創(chuàng)建時,就會在鏡像的最上層添加一個可寫的層,也就是容器層。

容器和鏡像的區(qū)別就是 鏡像只是可讀的,而每一個容器其實等于鏡像加上一個可讀寫的層,也就是同一個鏡像可以對應多個容器。





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 虛擬機
    +關(guān)注

    關(guān)注

    1

    文章

    908

    瀏覽量

    28109
  • LINUX內(nèi)核
    +關(guān)注

    關(guān)注

    1

    文章

    316

    瀏覽量

    21619
  • KVM
    KVM
    +關(guān)注

    關(guān)注

    0

    文章

    188

    瀏覽量

    12925
  • UFS
    UFS
    +關(guān)注

    關(guān)注

    6

    文章

    103

    瀏覽量

    23977
  • Docker
    +關(guān)注

    關(guān)注

    0

    文章

    455

    瀏覽量

    11818

原文標題:Docker底層實現(xiàn) 講解

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    虛擬機下載與安裝的步驟哪些

    本文章會詳細介紹虛擬機下載與安裝的步驟,很多讀者都會遇到這樣的情況,軟件裝不上,自己的電腦中軟件很多,又不想換電腦系統(tǒng),那么虛擬機可以幫你解決這個煩惱。?? ? 0 1 什么是虛擬機
    的頭像 發(fā)表于 09-04 10:16 ?1393次閱讀
    <b class='flag-5'>虛擬機</b>下載與安裝的步驟<b class='flag-5'>有</b>哪些

    什么是虛擬機虛擬機真的那么好用嗎?

    在日新月異的科技世界中,虛擬化技術(shù)如同一座橋梁,連接著現(xiàn)實與數(shù)字的鴻溝,為我們打開了全新的計算維度。虛擬機,這一概念,自其誕生以來,就以其獨特的魅力和強大的功能,深深地影響了軟件開發(fā)、系統(tǒng)測試和云
    的頭像 發(fā)表于 07-06 08:05 ?463次閱讀
    什么是<b class='flag-5'>虛擬機</b>?<b class='flag-5'>虛擬機</b>真的那么好用嗎?

    Docker監(jiān)控實戰(zhàn)分析

    的「輕」也只是相對于傳統(tǒng)虛擬機而已。傳統(tǒng)虛擬機Docker 的對比如圖: 從圖中可以看出 Docker虛擬機的差異,
    發(fā)表于 10-13 17:05 ?2次下載
    <b class='flag-5'>Docker</b>監(jiān)控實戰(zhàn)分析

    Linux容器和虛擬機之間的區(qū)別差異分析

    自從Linux上的容器變得流行以來,了解Linux容器和虛擬機之間的區(qū)別變得更加棘手。本文將向您提供詳細信息,以了解Linux容器和虛擬機之間的差異。
    的頭像 發(fā)表于 12-27 13:52 ?9018次閱讀

    什么是 DockerDocker與傳統(tǒng)的虛擬機什么區(qū)別

    Docker 容器將軟件以及它運行安裝所需的一切文件(代碼、運行時、系統(tǒng)工具、系統(tǒng)庫)打包到一起,這就保證了不管是在什么樣的運行環(huán)境,總是能以相同的方式運行。就好像 Java 虛擬機一樣,“一次編寫
    的頭像 發(fā)表于 03-16 14:28 ?5.2w次閱讀
    什么是 <b class='flag-5'>Docker</b>?<b class='flag-5'>Docker</b>與傳統(tǒng)的<b class='flag-5'>虛擬機</b><b class='flag-5'>有</b>什么<b class='flag-5'>區(qū)別</b>?

    什么是虛擬化?什么是DockerDocker容器與虛擬機區(qū)別

    Docker是一個虛擬環(huán)境容器,可以將你的可執(zhí)行文件、配置文件及一切其他你需要的文件一并打包到這個容器中,并發(fā)布和應用到任意平臺。比如,你在本地用Python開發(fā)了一個網(wǎng)站后臺,開發(fā)測試完成后
    發(fā)表于 05-03 14:18 ?2.4w次閱讀

    什么是區(qū)塊鏈虛擬機和普通虛擬機區(qū)別

    區(qū)塊鏈技術(shù)領(lǐng)域基礎設施——虛擬機,是實現(xiàn)智能合約系統(tǒng)最為關(guān)鍵和核心的技術(shù)。智能合約不僅是業(yè)務邏輯的載體,同時又扎扎實實地落在了技術(shù)實現(xiàn)的層面。由此可見,虛擬機是區(qū)塊鏈技術(shù)落地的基石,在如今技術(shù)快速發(fā)展乃至未來,區(qū)塊鏈技術(shù)都將離不開虛擬機
    發(fā)表于 03-04 10:50 ?4938次閱讀

    Docker容器與虛擬機區(qū)別

    我曾經(jīng)將Docker容器視為輕量級,精簡的虛擬機。 進行這種比較是有道理的,因為至少在Docker的最初市場中,總是將其與虛擬機進行比較-例如,"
    的頭像 發(fā)表于 05-03 17:17 ?7647次閱讀

    容器、Docker虛擬機區(qū)別

    移植的系統(tǒng)。它不僅簡化了打包應用的流程,也簡化了打包應用的庫和依賴,甚至整個操作系統(tǒng)的文件系統(tǒng)能被打包成一個簡單的可移植的包,這個包可以被用來在任何其他運行Docker的機器上使用。 容器和虛擬機具有相似的資源隔離和分配方式,容器虛擬
    的頭像 發(fā)表于 11-05 09:41 ?2956次閱讀

    如何區(qū)分虛擬機Docker

    首先,大家需要明確一點,Docker容器不是虛擬機。 2014年,當我第一次接觸Docker的時候,我把它比做一種輕量級的虛擬機。這樣做無可厚非,因為
    的頭像 發(fā)表于 02-14 11:36 ?1076次閱讀
    如何區(qū)分<b class='flag-5'>虛擬機</b>與<b class='flag-5'>Docker</b>

    Docker虛擬機區(qū)別

    Docker虛擬機是兩種不同的虛擬化技術(shù),它們在實現(xiàn)方式、資源消耗、運行性能等方面存在許多差異。本文將會詳細介紹它們的區(qū)別。 一、實現(xiàn)方式 1.1
    的頭像 發(fā)表于 11-23 09:37 ?9623次閱讀

    虛擬機和模擬器哪些異同點和區(qū)別

    虛擬機和模擬器哪些異同點和區(qū)別? 虛擬機和模擬器是計算機領(lǐng)域中常用的技術(shù),它們可以在一臺計算機上同時運行多個操作系統(tǒng)或環(huán)境。虛擬機和模擬器
    的頭像 發(fā)表于 12-27 16:26 ?2666次閱讀

    虛擬機ubuntu怎么聯(lián)網(wǎng)

    虛擬機ubuntu怎么聯(lián)網(wǎng)? 虛擬機(Virtual Machine)是運行在物理(Host Machine)上的虛擬操作系統(tǒng)環(huán)境。在虛擬機
    的頭像 發(fā)表于 12-27 16:51 ?947次閱讀

    Jtti:Docker會替代調(diào)虛

    Docker是計算虛擬化的一種方式,和使用虛擬機進行虛擬化是類似的。由于近幾年Docker技術(shù)的流行和發(fā)展。所以單獨介紹一下
    的頭像 發(fā)表于 07-12 14:38 ?281次閱讀
    Jtti:<b class='flag-5'>Docker</b>會替代調(diào)虛<b class='flag-5'>機</b>嗎

    虛擬機數(shù)據(jù)恢復—異常斷電導致XenServer虛擬機不可用的數(shù)據(jù)恢復案例

    虛擬機兩個虛擬機磁盤(系統(tǒng)盤 + 數(shù)據(jù)盤),虛擬機作為Web服務器使用。 虛擬機故障&分析: 機房異常斷電導致服務器中一臺VPS(
    的頭像 發(fā)表于 10-21 14:17 ?157次閱讀
    <b class='flag-5'>虛擬機</b>數(shù)據(jù)恢復—異常斷電導致XenServer<b class='flag-5'>虛擬機</b>不可用的數(shù)據(jù)恢復案例