chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

為什么說不要用Docker了?

Linux愛好者 ? 來源:架構頭條 ? 作者:架構頭條 ? 2021-03-03 15:31 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在容器的遠古時代 (差不多就是 4 年前),Docker 是這場游戲的唯一玩家。但現(xiàn)在情況已經(jīng)不一樣了,Docker 不再是唯一玩家,而只是一個容器引擎而已。我們可以用 Docker 構建、運行、拉取、推送或檢查容器鏡像,但對于這里的每一項任務,都有其他可替代的工具,它們可能比 Docker 做得更好。所以,讓我們來探究一下它們,然后卸載和忘掉 Docker……

為什么說不要用 Docker 了?

如果你已經(jīng)使用 Docker 很長時間了,那么要說服你考慮使用其他的工具可能需要費點唇舌。

首先,Docker 是一個整體性的工具,它試圖做所有的事情,但這通常不是最好的方法。大多數(shù)情況下,選擇一種專門的工具會更好,它可能只做一件事,但會做到最好。如果你害怕使用不同的工具,可能是因為你要學習使用不同的 CLI、不同的 API 或接受不同的概念。不過請放心,選擇本文介紹的工具都是完全無縫銜接的,因為它們 (包括 Docker) 都遵循 OCI (Open Container Initiative) 規(guī)范。OCI 包含了容器運行時、容器分發(fā)和容器鏡像的規(guī)范,涵蓋了使用容器所需的所有特性。多虧了 OCI,你可以選擇一套最適合自己的工具,同時又能夠繼續(xù)使用與 Docker 一樣的 API 和 CLI 命令。

所以,如果你愿意嘗試新的工具,那么就讓我們來比較一下 Docker 和其他工具的優(yōu)缺點和特性,看看是否有必要考慮放棄 Docker,并轉(zhuǎn)向其他一些新的工具。

容器引擎

在比較 Docker 和其他工具時,我們需要將其分解為組件,首先我們要討論的是容器引擎。容器引擎是一種工具,它為處理鏡像和容器提供了用戶界面,這樣你就不需要處理 SECCOMP 規(guī)則或 SELinux 策略之類的事情。它的工作還包括從遠程存儲庫提取鏡像并將其解壓到磁盤。它似乎也運行容器,但實際上它的工作是創(chuàng)建容器清單和包含了鏡像層的目錄。然后它將它們傳到容器運行時,例如使用 runc 或 crun(稍后我們將討論這個)。目前有很多可用的容器引擎,不過 Docker 最突出的競爭對手是由 Red Hat 開發(fā)的 Podman。與 Docker 不同,Podman 不需要守護進程,也不需要 root 特權,這是 Docker 長期以來一直存在的問題。從它的名字就可以看出來,Podman 不僅可以運行容器,還可以運行 Pod。Pod 是 Kubernetes 的最小計算單元,由一個或多個容器 (主容器和所謂的邊車) 組成,Podman 用戶在以后可以更容易地將他們的工作負載遷移到 Kubernetes。以下演示了如何在一個 Pod 中運行兩個容器:

~$podmanpodcreate--namemypod ~$podmanpodlist PODIDNAMESTATUSCREATED#OFCONTAINERSINFRAID 211eaecd307bmypodRunning2minutesago1a901868616a5 ~$podmanrun-d--podmypodnginx#Firstcontainer ~$podmanrun-d--podmypodnginx#Secondcontainer ~$podmanps-a--pod CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMESPODPODNAME 3b27d9eaa35cdocker.io/library/nginx:latestnginx-gdaemono...2secondsagoUp1secondagobrave_ritchie 211eaecd307bmypodd638ac011412docker.io/library/nginx:latestnginx-gdaemono...5minutesagoUp5minutesagocool_albattani 211eaecd307bmypoda901868616a5k8s.gcr.io/pause:3.26minutesagoUp5minutesago211eaecd307b-infra211eaecd307bmypod

Podman 提供了與 Docker 完全相同的 CLI 命令,因此你只需執(zhí)行 alias Docker=Podman,然后就像什么都沒有發(fā)生改變一樣。除了 Docker 和 Podman 之外,還有其他容器引擎,但我認為它們沒有出路或者都不適合用于本地開發(fā)。不過如果你想要對容器引擎有一個較為完整的了解,我們可以列出一些:

LXD——是 LXC (Linux 容器) 的容器管理器 (守護進程)。這個工具提供了運行系統(tǒng)容器的能力,這些系統(tǒng)容器提供了類似于 VM 的容器環(huán)境。它比較小眾,沒有很多用戶,所以除非你有特定的用例,否則最好使用 Docker 或 Podman。

CRI-O——如果你在網(wǎng)上搜索 cri-o 是什么東西,你可能會發(fā)現(xiàn)它被描述為一種容器引擎。不過,它實際上是一種容器運行時。除了不是容器引擎之外,它也不適合用于“一般”的情況。我的意思是,它是專門為 Kubernetes 運行時 (CRI) 而構建的,并不是給最終用戶使用的。

rkt——rkt(“rocket”) 是由 CoreOS 開發(fā)的容器引擎。這里提到這個項目只是為了清單的完整性,因為這個項目已經(jīng)結束了,它的開發(fā)也停止了——因此它不應該再被使用。

鏡像的構建

從容器引擎方面來說,除了 Docker 之外只有一種選擇。但是,在構建鏡像方面,我們有很多選擇。首先是 Buildah。Buildah 是 Red Hat 開發(fā)的一款工具,可以很好地與 Podman 配合使用。如果你已經(jīng)安裝了 Podman,可能會注意到 podman build 子命令,它實際上是經(jīng)過包裝的 Buildah。在特性方面,Buildah 遵循了與 Podman 相同的路線——它是無守護進程的,可以生成符合 OCI 的像,并保證以相同的方式來運行使用 Docker 構建的鏡像。它還能基于 Dockerfile 或 Containerfile(它們實際上是同一個東西,只是叫法不一樣)構建鏡像。

除此之外,Buildah 還提供了對鏡像層更精細的控制,支持提交大量的變更到單個層。在我看來,它與 Docker 之間有一個出乎人意料的區(qū)別,使用 Buildah 構建的鏡像是特定于用戶的,因此你可以只列出自己構建的鏡像。你可能會問,既然 Buildah 已經(jīng)被包含在 Podman CLI 中,為什么還要使用單獨的 Buildah CLI?buildah CLI 是 podman build 所包含的命令的超集,你可能不需要使用 buildah CLI,但是通過使用它,你可能會發(fā)現(xiàn)一些額外有用的特性。

我們來看看一個小演示:

~$buildahbud-fDockerfile. ~$buildahfromalpine:latest#Createstartingcontainer-equivalentto"FROMalpine:latest" Gettingimagesourcesignatures Copyingblobdf20fa9351a1done Copyingconfiga24bb40132done Writingmanifesttoimagedestination Storingsignatures alpine-working-container#Nameofthetemporarycontainer ~$buildahrunalpine-working-container--apkadd--update--no-cachepython3#equivalentto"RUNapkadd--update--no-cachepython3" fetchhttp://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz fetchhttp://dl-cdn.alpinelinux.org/alpine/v3.12/community/x86_64/APKINDEX.tar.gz ... ~$buildahcommitalpine-working-containermy-final-image#Createfinalimage Gettingimagesourcesignatures Copyingblob50644c29ef5askipped:alreadyexists Copyingblob362b9ae56246done Copyingconfig1ff90ec2e2done Writingmanifesttoimagedestination Storingsignatures 1ff90ec2e26e7c0a6b45b2c62901956d0eda138fa6093d8cbb29a88f6b95124c ~#buildahimages REPOSITORYTAGIMAGEIDCREATEDSIZE localhost/my-final-imagelatest1ff90ec2e26e22secondsago51.4MB

從上面的腳本可以看到,你可以直接使用 buildah bud 構建鏡像,其中 bud 表示使用 Dockerfile 來構建鏡像,你也可以使用其他更多的命令,如 from、run 和 copy,它們分別對應 Dockerfile 中的 FROM、RUN、COPY。

第二個工具是谷歌的 Kaniko。Kaniko 也基于 Dockerfile 構建容器鏡像,而且與 Buildah 類似,它也不需要守護進程。與 Buildah 的主要區(qū)別在于,Kaniko 更專注于在 Kubernetes 中構建鏡像。

Kaniko 本身是作為鏡像 (gcr.io/kaniko-project/executor) 運行的,這對于 Kubernetes 來說是沒有問題,但對于本地構建來說不是很方便,并且在某種程度上違背了構建鏡像的目的,因為你需要使用 Docker 來運行 Kaniko 鏡像來構建鏡像。

如果你正在尋找在 Kubernetes 集群中構建鏡像的工具 (例如在 CI/CD 管道中),那么 Kaniko 可能是一個不錯的選擇,因為它是無守護進程的,而且 (可能) 更安全。

從我個人的經(jīng)驗來看——我在 Kubernetes/OpenShift 集群中使用了 Kaniko 和 Buildah 來構建鏡像,我認為兩者都能很好地完成任務,但在使用 Kaniko 時會隨機出現(xiàn)構建故障,在將鏡像推送到注冊表時也會隨機地出現(xiàn)失敗的情況。

第三個是 buildkit,也可以稱之為下一代 docker build。它是 Moby 項目的一部分,在運行 Docker 時通過 DOCKER_BUILDKIT=1 docker build 就可以啟用它,作為 Docker 的一個實驗性特性。

那么,這到底會給你帶來什么呢?它帶來了很多改進和很酷的特性,包括并行構建步驟、跳過未使用的階段、更好的增量構建和無根構建。但是,它仍然需要運行守護進程 (buildkitd)。所以,如果你不想擺脫 Docker,同時又想要一些新的特性和更好的改進,那么使用 buildkit 可能是最好的選擇。

跟之前的章節(jié)一樣,這里也將提及一些工具,它們滿足了一些特定的使用場景,但并不是我的首選:Source-To-Image (S2I) 是一個不使用 Dockerfile 直接從源代碼構建鏡像的工具包。

這個工具在簡單可預期的場景和工作流中表現(xiàn)良好,但如果你需要多一些定制化,或者你的項目沒有預期的結構,那么它就會變得煩人和笨拙。如果你對 Docker 還不是很有信心,或者如果你在 OpenShift 集群上構建鏡像,可能可以考慮使用 S2I,因為使用 S2I 構建鏡像是它的一個內(nèi)置特性。

Jib是谷歌開發(fā)的一款工具,專門用于構建 Java 鏡像。它提供了 Maven 和 Gradle 插件,可以讓你輕松地構建鏡像,不需要理會 Dockerfile。

最后一個是 Bazel,它是谷歌的另一款工具。它不僅用于構建容器鏡像,而且是一個完整的構建系統(tǒng)。如果你只是想構建鏡像,那么使用 Bazel 可能有點大材小用,但這絕對是一個很好的學習體驗,所以如果你愿意,可以將 rules_docker為入手點。

容器運行時

最后一個是負責運行容器的容器運行時。

容器運行時是整個容器生命周期的一部分,除非你對速度、安全性等有一些非常具體的要求,否則你很可能不會對其加以干擾。所以,如果你已經(jīng)感到厭倦了,可以跳過這一部分。

但是,如果你想知道有哪些可選擇的容器運行時,可以看看以下這些:runc是符合 OCI 容器運行時規(guī)范的容器運行時。Docker(通過 containerd)、Podman 和 CRI-O 都在使用它,它是 (幾乎) 所有東西的默認配置,所以即使你在閱讀本文后放棄使用 Docker,很可能仍然會使用 runc。

runc 的另一種替代品是 crun。這是 Red Hat 開發(fā)的一款工具,完全用 C 語言開發(fā) (runc 是用 Go 開發(fā)的),所以它比 runc 更快,內(nèi)存效率更高。因為它也是兼容 OCI 的運行時,所以你應該可以很容易上手。盡管它現(xiàn)在還不是很流行,但作為 RHEL 8.3 版本的技術預覽,它將作為一個可選的 OCI 運行時,又因為它是 Red Hat 的產(chǎn)品,它可能最終會成為 Podman 或 CRI-O 的默認配置。

前面我說過,CRI-O 實際上不是容器引擎,而是容器運行時。這是因為 CRI-O 沒有提供諸如鏡像推送之類的特性,而這些特性是容器引擎應該具備的。

CRI-O 在內(nèi)部使用 runc 來運行容器。你不應該在自己的機器上嘗試使用這個運行時,因為它是作為運行在 Kubernetes 節(jié)點上的運行時而設計的,并被描述為“Kubernetes 所需的運行時”。因此,除非你正在運行 Kubernetes 集群 (或 OpenShift 集群——CRI-O 已經(jīng)是默認設置了),否則不應該接觸這個。

最后一個是 containerd,它是 CNCF 的一個畢業(yè)項目。它是一個守護進程,作為各種容器運行時和操作系統(tǒng)的 API 外觀。在后臺,它依賴 runc,是 Docker 引擎的默認運行時。谷歌 Kubernetes 引擎 (GKE) 和 IBM Kubernetes 服務 (IKS) 也在使用它。它是 Kubernetes 容器運行時接口的一個實現(xiàn) (與 CRI-O 一樣),因此它是 Kubernetes 集群運行時的一個很好的候選對象。

鏡像的檢查與分發(fā)

最后一部分內(nèi)容是鏡像的檢查與分發(fā),主要是替代 docker inspect,并 (可選地) 增加遠程注冊表之間復制鏡像的能力。

我這里要提到的一個可以完成這些任務的工具是 Skopeo。它由 Red Hat 公司開發(fā),可以與 Buildah、Podman 和 CRI-O 配套使用。除了基本的 inspect 之外,Skopeo 還提供了 skopeo copy 命令來復制鏡像,可以直接在遠程注冊表之間復制鏡像,無需將它們拉取到本地注冊表。如果你使用了本地注冊表,這個命令也可以作為拉取 / 推送的替代方案。

另外,我還想提一下 Dive,這是一個檢查、探索和分析鏡像的工具。它對用戶更友好一些,提供了更可讀的輸出,可以更深入地挖掘鏡像,并分析和衡量其效率。它也適合被用在 CI 管道中,用于衡量你的鏡像是否“足夠高效”,或者換句話說——它是否浪費了太多空間。

結論

本文的目的并不是要說服你完全拋棄 Docker,而是向你展示構建、運行、管理和分發(fā)容器及其鏡像的整個場景和所有可選項。包括 Docker 在內(nèi)的每一種工具都有其優(yōu)缺點,評估哪一組工具最適合你的工作流程和場景才是最重要的,希望本文能在這方面為你提供一些幫助。

責任編輯:lq

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

    關注

    0

    文章

    528

    瀏覽量

    22945
  • 鏡像
    +關注

    關注

    0

    文章

    178

    瀏覽量

    11626
  • Docker
    +關注

    關注

    0

    文章

    530

    瀏覽量

    14213

原文標題:是時候跟 Docker 說再見了

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    如何在2026年Rocky Linux(8、9和10)上安裝Docker

    Docker 已成為現(xiàn)代應用部署、開發(fā)和基礎設施自動化的核心技術。如果你在服務器或VPS上運行Rocky Linux,學會在Rocky Linux上安裝Docker是你2026年能掌握的最寶貴技能
    的頭像 發(fā)表于 01-12 17:21 ?1033次閱讀

    【HZ-T536開發(fā)板免費體驗】Docker 環(huán)境安裝及應用

    一、檢查 Docker 安裝狀態(tài) 板子提示“command not found”或無版本信息,說明 Docker 未安裝,如有需要請自行安裝 二、Docker 環(huán)境安裝 首先更新系統(tǒng)包索引并安裝
    發(fā)表于 09-01 17:59

    深入剖析Docker全鏈路安全防護策略

    在云原生時代,Docker容器安全已成為運維工程師必須面對的核心挑戰(zhàn)。本文將從實戰(zhàn)角度深入剖析Docker全鏈路安全防護策略,涵蓋鏡像構建、容器運行、網(wǎng)絡隔離等關鍵環(huán)節(jié),助你構建企業(yè)級安全防護體系。
    的頭像 發(fā)表于 08-18 11:17 ?1000次閱讀

    Docker容器安全攻防實戰(zhàn)案例

    在云原生時代,Docker已成為現(xiàn)代應用部署的基石。然而,容器化帶來便利的同時,也引入了新的安全挑戰(zhàn)。作為一名在生產(chǎn)環(huán)境中管理過數(shù)千個容器的運維工程師,我將通過真實的攻防實戰(zhàn)案例,帶你深入了解Docker安全的每一個細節(jié)。
    的頭像 發(fā)表于 08-05 09:52 ?1284次閱讀

    干貨分享 | RK3588 Ubuntu系統(tǒng)Docker容器使用指南

    前言:在瑞芯微RK3588高性能AIoT平臺上運行Ubuntu系統(tǒng)時,Docker容器技術能極大提升開發(fā)部署效率。通過輕量級虛擬化實現(xiàn)環(huán)境隔離與快速遷移,本文將從零開始詳解RK3588平臺
    的頭像 發(fā)表于 06-27 12:01 ?3776次閱讀
    干貨分享 | RK3588 Ubuntu系統(tǒng)<b class='flag-5'>Docker</b>容器使用指南

    docker無法啟用怎么解決?

    mengxing@mengxing-virtual-machine:/etc/docker$ sudo systemctl daemon-reload
    發(fā)表于 06-23 07:17

    Docker Volume管理命令大全

    Docker Volume管理命令大全
    的頭像 發(fā)表于 05-28 17:14 ?828次閱讀

    如何使用Docker部署大模型

    隨著深度學習和大模型的快速發(fā)展,如何高效地部署這些模型成為了一個重要的挑戰(zhàn)。Docker 作為一種輕量級的容器化技術,能夠?qū)⒛P图捌湟蕾嚟h(huán)境打包成一個可移植的容器,極大地簡化了部署流程。本文將詳細介紹如何使用 Docker 部署大模型,并給出具體的步驟和示例。
    的頭像 發(fā)表于 05-24 16:39 ?1072次閱讀

    Docker Compose的常用命令

    大家好,今天給大家分享Docker Compose的常用命令,以及docker-compose文件的屬性。Docker Compose 是一個用于定義和運行多容器 Docker 應用應
    的頭像 發(fā)表于 04-30 13:40 ?1163次閱讀

    Docker基本命令及其用例

    Docker 已迅速成為容器化應用程序的事實標準。作為開發(fā)人員或 DevOps 工程師/系統(tǒng)管理員,熟悉 Docker 對于高效部署現(xiàn)代、可移植的應用程序至關重要。
    的頭像 發(fā)表于 04-30 10:04 ?687次閱讀

    Docker常用命令大全

    Docker 是一種開源的應用容器引擎,廣泛應用于開發(fā)、部署和運行分布式應用。掌握 Docker 常用命令對于開發(fā)人員和運維人員來說非常重要。本文將為大家整理常用的Docker 命令,并按照功能分為多個部分,幫助你高效使用
    的頭像 發(fā)表于 04-22 12:47 ?846次閱讀

    【技術案例】Android in Docker

    Docker介紹Docker是一個開源的容器化平臺,用于打包、分發(fā)和運行應用程序。它通過將應用及其所有依賴打包到獨立的容器中,確保應用在不同環(huán)境中一致運行。Docker提供快速部署、隔離性強和高效
    的頭像 發(fā)表于 04-02 16:33 ?1732次閱讀
    【技術案例】Android in <b class='flag-5'>Docker</b>

    基于Docker鏡像逆向生成Dockerfile

    在本文中, 我們將通過理解Docker鏡像如何存儲數(shù)據(jù), 以及如何使用工具查看鏡像方方面面的信息來逆向工程一個Docker鏡像; 以及如何使用Python的Docker API來構建一個類似Dedockify的工具來創(chuàng)建Dock
    的頭像 發(fā)表于 03-10 09:45 ?1470次閱讀
    基于<b class='flag-5'>Docker</b>鏡像逆向生成Dockerfile

    docker-proxy鏡像加速倉庫

    自建多平臺容器鏡像代理服務,支持 Docker Hub, GitHub, Google, k8s, Quay, Microsoft 等鏡像倉庫。
    的頭像 發(fā)表于 03-06 16:06 ?999次閱讀
    <b class='flag-5'>docker</b>-proxy鏡像加速倉庫

    docker配置網(wǎng)絡代理

    有時因為網(wǎng)絡原因,比如公司 NAT,或其它啥的,需要使用代理。Docker 的代理配置,略顯復雜,因為有三種場景。但基本原理都是一致的,都是利用 Linux 的 http_proxy 等環(huán)境變量。
    的頭像 發(fā)表于 03-03 17:18 ?1051次閱讀