<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Docker 用了那么久,還不知道它是如何工作的?

          共 3091字,需瀏覽 7分鐘

           ·

          2024-08-06 13:15

          在我的電腦上,Docker 服務(wù)一直都是自動(dòng)啟動(dòng)的,除非電腦真的卡的不行了,我才會(huì)把Docker 服務(wù)停掉,節(jié)省點(diǎn)兒資源。

          相信很多朋友也經(jīng)常用 Docker,那你了解過(guò) Docker 是如何工作的么?

          Docker 構(gòu)成三大件

          Docker的架構(gòu)主要由三個(gè)核心組件構(gòu)成,這是 Docker 三大件。

          Docker Client

          這是開(kāi)發(fā)者與Docker交互的部分。無(wú)論你是直接使用 Docker 命令行,還是用 Docker desktop、OrbStack這些 GUI 工具,實(shí)際上都是在使用Docker客戶(hù)端。包括使用 Dockerfile 實(shí)際上也是對(duì) Client 命令的包裝。

          它負(fù)責(zé)將你輸入的指令傳遞給Docker守護(hù)進(jìn)程(Docker daemon),并顯示出執(zhí)行結(jié)果。

          Docker Host

          這是Docker運(yùn)行的核心環(huán)境。在Docker主機(jī)上,最關(guān)鍵的部分就是Docker守護(hù)進(jìn)程(Docker daemon)。它負(fù)責(zé)處理 Docker API 的請(qǐng)求,管理各種Docker對(duì)象,包括下面這幾個(gè):

          ? 鏡像(Images):容器的只讀模板,包含了運(yùn)行應(yīng)用所需的所有依賴(lài)和配置。? 容器(Containers):鏡像的運(yùn)行實(shí)例,可以被啟動(dòng)、停止、刪除等。? 網(wǎng)絡(luò)(Networks):容器間通信的橋梁。? 數(shù)據(jù)卷(Volumes):用于數(shù)據(jù)持久化的機(jī)制。

          Docker Registry

          這是存儲(chǔ)Docker鏡像的地方。Docker Hub是默認(rèn)的公共鏡像倉(cāng)庫(kù),國(guó)內(nèi)也有不少的鏡像站,雖然現(xiàn)在很多不能用了,包括各個(gè)云平臺(tái)一般也有自己的鏡像倉(cāng)庫(kù),很多公司也會(huì)搭建公司內(nèi)部的鏡像倉(cāng)庫(kù)。

          我記得15年我做 devops 的時(shí)候,公司就搭了鏡像倉(cāng)庫(kù),因?yàn)楫?dāng)時(shí)公司用的那些鏡像都是高度定制化的,而且配置略復(fù)雜,搭建鏡像倉(cāng)庫(kù)就很合適。

          Docker 如何工作的

          好了,了解了 Docker 核心組件后,我們?cè)賮?lái)看看Docker是如何工作的吧。

          使用者啟動(dòng)一個(gè)容器一定是從一個(gè)鏡像創(chuàng)建出來(lái)的,那就從鏡像的構(gòu)建、鏡像上傳、鏡像拉取直到容器運(yùn)行這幾個(gè)階段來(lái)看一下 Docker 的工作過(guò)程。

          構(gòu)建階段

          鏡像的發(fā)布者可以通過(guò) docker save 命令將自己的容器打包成一個(gè)鏡像,但是更好的方式是直接編寫(xiě)Dockerfile,定義好各種依賴(lài)和參數(shù)。

          最后使用docker build命令構(gòu)建鏡像,Docker客戶(hù)端將指令發(fā)送給Docker守護(hù)進(jìn)程。守護(hù)進(jìn)程解析Dockerfile文件,根據(jù)其指定的參數(shù)和配置,創(chuàng)建一個(gè)符合要求的鏡像。

          分發(fā)階段

          使用docker push命令,將構(gòu)建好的鏡像上傳到Docker倉(cāng)庫(kù),不管是公共倉(cāng)庫(kù)還是內(nèi)部倉(cāng)庫(kù)。

          之后其他人就可以通過(guò)docker pull命令從倉(cāng)庫(kù)中獲取這個(gè)鏡像。到這一步大部分人應(yīng)該都很熟悉了,鏡像可能沒(méi)打包過(guò),但是用鏡像啟動(dòng)容器應(yīng)該是輕車(chē)熟路的。

          運(yùn)行階段

          使用docker run命令,Docker守護(hù)進(jìn)程會(huì)基于指定的鏡像創(chuàng)建并啟動(dòng)一個(gè)新的容器,如果之前沒(méi)有用 docker pull命令拉取過(guò),那會(huì)自動(dòng)拉取。

          容器在一個(gè)隔離的環(huán)境中運(yùn)行,擁有自己的文件系統(tǒng)、網(wǎng)絡(luò)和進(jìn)程空間。

          Docker的工作原理保證了所有使用這個(gè)鏡像的環(huán)境都是一致的,這樣就不會(huì)出現(xiàn)開(kāi)發(fā)說(shuō):“在我的機(jī)器上是沒(méi)問(wèn)題的呀?在測(cè)試環(huán)境是可以的呀?”這樣的問(wèn)題了。

          通過(guò)將應(yīng)用及其依賴(lài)打包到一個(gè)標(biāo)準(zhǔn)化的單元(容器)中,Docker確保了應(yīng)用可以在任何支持Docker的環(huán)境中一致地運(yùn)行。

          此外,Docker的輕量級(jí)特性使得它可以在同一臺(tái)主機(jī)上同時(shí)運(yùn)行多個(gè)容器,每個(gè)容器都是相互隔離的。這種隔離性和可移植性使得Docker在微服務(wù)架構(gòu)、持續(xù)集成/持續(xù)部署(CI/CD)流程中發(fā)揮著重要作用。

          Docker 、Dockerfile、Docker Swarm、K8S 之間的關(guān)系

          Docker 和 Dockerfile

          Dockerfile是一個(gè)文本文件,包含了一系列指令和參數(shù)。它用于定義如何構(gòu)建Docker鏡像。

          當(dāng)執(zhí)行docker build命令時(shí),Docker會(huì)讀取Dockerfile中的指令,并據(jù)此創(chuàng)建一個(gè)Docker鏡像。

          可以將Dockerfile理解為鏡像的"配方",而Docker則是"廚師",按照這個(gè)配方烹飪出最終的"菜肴"(鏡像)。

          Dockerfile是輸入,Docker鏡像是輸出,而Docker平臺(tái)則是將輸入轉(zhuǎn)化為輸出的工具。

          Docker 和 Docker Swarm

          Docker Swarm是Docker原生的集群管理和編排工具。

          當(dāng)需要的容器變多了,并且經(jīng)常有需要擴(kuò)展容器的需求時(shí),就需要編排工具了。

          Docker Swarm則用于管理多個(gè)Docker主機(jī)組成的集群。可以將多個(gè)運(yùn)行Docker的機(jī)器組合成一個(gè)虛擬的Docker主機(jī),讓運(yùn)維人員輕松地在多臺(tái)機(jī)器上部署和擴(kuò)展Docker容器。

          它提供了一些基本的編排功能,如服務(wù)發(fā)現(xiàn)、負(fù)載均衡、滾動(dòng)更新等。

          可以將Docker Swarm視為Docker的擴(kuò)展,它使得Docker能夠在集群環(huán)境中更好地工作。

          Docker 和 K8s

          Kubernetes,通常簡(jiǎn)稱(chēng)為K8s,是一個(gè)更加強(qiáng)大和復(fù)雜的容器編排平臺(tái)。

          Kubernetes最初是為Docker容器設(shè)計(jì)的,但它現(xiàn)在支持多種容器運(yùn)行時(shí),包括Docker和Containerd。

          雖然 Kubernetes 宣布不再直接支持 Docker 了,但是實(shí)際上支持Containerd 就是支持 Docker了,所以默認(rèn) K8s 就是Docker 的編排工具。

          Kubernetes提供了比Docker Swarm更豐富的功能,包括自動(dòng)擴(kuò)縮容、自我修復(fù)、批處理、水平擴(kuò)展等。

          本文作者是朋友風(fēng)箏哥,也是一位經(jīng)驗(yàn)豐富的程序員和文章質(zhì)量很高的博主,推薦給大家:


          ???? 點(diǎn)擊下方閱讀原文,獲取魚(yú)皮往期編程干貨。

          往期推薦

          魚(yú)皮原創(chuàng)實(shí)戰(zhàn)項(xiàng)目,保姆級(jí)教程!

          每天那么多工作,我為什么能做到 "不忘事" ?

          我用這個(gè)工具,一分鐘搞定了簡(jiǎn)歷!

          25 屆秋招交流群,限時(shí)開(kāi)放

          我用這個(gè)程序員面試刷題工具,吊打了面試官!

          魚(yú)皮的保姆級(jí)寫(xiě)簡(jiǎn)歷指南,免費(fèi)領(lǐng)

          我開(kāi)源了一套 RPC 框架,學(xué)爆它!

          瀏覽 389
          1點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          1點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美午夜在线 | 伊人色色色| 国产欧美一区二区三区精品酒店 | 人人摸人人操人人干 | 久久色婷婷 |