2022 için en iyi Docker alternatifleri

En yaygın kullanılan kapsayıcı platformlarından biri olan monolitik bir araç olan Docker, kapsayıcı görüntülerinin oluşturulmasından çalıştırılmasına ve denetlenmesine kadar kapsayıcılaştırma sürecinin her yönünü ele alır.

Ağustos 2021’de Docker Desktop, lisanslamasında değişiklik yaptığını duyurdu; bu, 250’den fazla çalışanı veya 10 milyon doların üzerinde geliri olan şirketler için artık ücretsiz olmayacağı anlamına geliyor. Bununla birlikte, bazı durumlarda Docker’ın sunduğundan daha iyi bir sonuç sunan, genellikle bağımsız araçlar biçiminde konteynerleştirmeye yönelik birkaç alternatif yaklaşım vardır.

Bu makalede, Docker ekosisteminin çeşitli yönleri için doğrudan ikame işlevi gören birkaç Docker alternatifini ele alacağız. Bu öğreticide ele alınan her araç , kapsayıcı çalışma zamanı, kapsayıcı dağıtımı ve kapsayıcı görüntüleri için belirtimleri içeren Açık Kapsayıcılar Girişimi (Open Containers Initiative OCI) özelliklerine uymaktadır. Haydi başlayalım!

1. Podman

RedHat tarafından geliştirilen bir konteyner motoru olan Podman, konteyner görüntülerini oluşturmak, çalıştırmak ve depolamak için Docker’ın en önde gelen alternatiflerinden biridir. Podman, Docker gibi OCI kapsayıcı görüntüsü spesifikasyonuyla uyumluluğu korur, yani Podman, Docker tarafından üretilen kapsayıcı görüntülerini çalıştırabilir ve bunun tersi de geçerlidir.

Podman’in komut satırı arayüzü, argümanlar da dahil olmak üzere Docker’ınkiyle aynıdır. Mevcut Docker kullanıcılarının Podman’e geçişini kolaylaştırarak, farkı fark etmeden Docker kullanıcılarının Podman’a geçişini kolaylaştırabilirsiniz:

# .bashrc takma ad docker = podman

Kontrolü altındaki tüm kapsayıcıları yönetmek için arka plan programını kullanan Docker’ın aksine, Podman arka plan programı içermez. Bu nedenle, uzun ömürlü bir süreçle kalıcı bir bağlantı yoktur, Docker’daki tek hata noktası sorununu ortadan kaldırır; burada daemon işlemindeki ani bir çökme, çalışan kapsayıcıları öldürebilir veya onların yetim kalmasına neden olabilir.

Podman, görüntü kaydı, depolama ve Linux çekirdeği ile etkileşime girer ve kapsayıcıları herhangi bir merkezi süreçten bağımsızdır. Bunun yerine, kapsayıcılar, kullanıcı ad alanlarını ve ağ ad alanlarını yoğun olarak kullanan Podman sürecinin alt süreçleri olarak başlatılır.

Podman ayrıca, varsayılan olarak köksüz kapsayıcıları kullanarak kendisini Docker’dan ayırır. Bir kapsayıcıyı başlatmak ve çalıştırmak için kök erişimi gerekli değildir, ancak kapsayıcı çalışma zamanında ayrıcalık yükselmesine neden olabilecek olası güvenlik açıklarını azaltmaya yardımcı olur.

Docker’ın artık, v20.10’da stabilize edilmeden önce Docker Engine v19.03’te deneysel bir özellik olarak piyasaya sürülen köksüz modu desteklediğini unutmayın. Ancak ekosistemde kullanımı henüz yaygın değildir.

Podman’in henüz Docker’da bulunmayan ek bir özelliği, bölmeler oluşturma ve çalıştırma yeteneğidir. Pod, paylaşılan bir kaynak havuzunu kullanan ve belirli bir işlevi gerçekleştirmek için birlikte çalışan bir veya daha fazla kapsayıcının bir koleksiyonudur. Pod’lar ayrıca Kubernetes’teki en küçük yürütme birimidir ve ihtiyaç duyulduğunda Kubernetes’e geçişi kolaylaştırır.

2. Buildah

Buildah, görüntüler oluşturmak için Docker’a bir alternatiftir. Yine RedHat tarafından geliştirilen Buildah, genellikle Podman ile birlikte kullanılır. Aslında, Podman, alt komutunu uygulamak için Buildah’ın işlevselliğinin bir alt kümesini kullanır.

Görüntüler üzerinde ayrıntılı kontrole ihtiyacınız varsa, tam Buildah CLI aracını kullanmalısınız. Yazma sırasında, Buildah birkaç Linux dağıtımında çalışır ancak Windows veya macOS’ta desteklenmez.

Buildah’ın ürettiği görüntüler, OCI spesifikasyonu ile tamamen uyumludur ve Docker ile oluşturulan görüntülerle aynı şekilde çalışır. Buildah ayrıca mevcut bir Dockerfileveya öğesini kullanarak görüntüler oluşturabilir ve bu da Containerfilegeçişi çok daha kolay hale getirir. Buildah ayrıca Dockerfiles’in sınırlamalarını aşan Bash komut dosyalarını kullanmanıza izin vererek süreci daha kolay otomatikleştirir.

Podman gibi, Buildah da çalışmak için merkezi bir arka plan programı veya kök erişimi gerektirmeyen bir çatal yürütme modelini izler.

Buildah’ı Docker’a göre kullanmanın bir avantajı, kapsayıcı kullanıcıları arasında uzun süredir istenen bir özellik olan birçok değişikliği tek bir katmanda gerçekleştirme yeteneğidir. Buildah ayrıca yalnızca meta verileri depolayan boş bir kapsayıcı görüntüsü oluşturma olanağı sağlayarak yalnızca görüntüde gerekli olan gerekli paketleri eklemeyi kolaylaştırır. Buna karşılık, nihai çıktı, Docker eşdeğerinden daha küçüktür.

Diğer bir fark ise, Buildah görsellerinin kullanıcıya özel olmasıdır, bu nedenle yalnızca bir kullanıcı tarafından oluşturulan görseller onlara görünür olacaktır.

3. Buildkit

Buildkit, Moby projesinin bir parçası olarak geliştirilen Docker için yeni bir görüntü oluşturma motorudur. Docker ≥v18.09’dan itibaren  , Buildkit ile entegre edilmiştir, ancak aynı zamanda bağımsız bir araç olarak da gelir.

Buildkit’in ana özelliklerinden biri, birbirine bağlı olmayan görüntü katmanlarının paralel işlenmesi yoluyla geliştirilmiş performansı içerir. Bir diğeri daha iyi önbelleğe almadır ve bu da görüntünün her katmanını yeniden oluşturma ihtiyacını azaltır. Son olarak, Buildkit daha takılabilir bir mimari aracılığıyla genişletilebilirlik sunar. Buildkit ayrıca köksüz yapılar ve kullanılmayan aşamaları atlama yeteneği sunar.

Yazma sırasında, Buildkit isteğe bağlı olarak mevcuttur. Bir görüntü oluşturmadan önce Buildkit’i etkinleştirmek DOCKER_BUILDKITiçin kabuğunuzdaki çevresel değişkeni kullanmanız gerekir:

$ DOCKER_BUILDKIT=1 docker build .

Ayrıca Docker’ı varsayılan olarak Buildkit’i kullanacak şekilde yapılandırabilirsiniz. Dosyayı aşağıdaki gibi düzenleyin veya oluşturun :/etc/docker/daemon.json

{
  "features": {
    "buildkit": true
  }
}

Dosyayı kaydettikten sonra değişikliği uygulamak için arka plan programını yeniden yükleyin:

$ systemctl reload docker

Varsayılan motordan farklı olan çıktısı nedeniyle Buildkit’in ne zaman kullanıldığını söylemek kolaydır:

$ DOCKER_BUILDKIT=1 docker build . [+] Building 30.8s (7/7) FINISHED => [internal] load build definition from Dockerfile 0.1s => => transferring dockerfile: 142B 0.1s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/centos:latest 0.6s => [auth] library/centos:pull token for registry-1.docker.io 0.0s => [1/2] FROM docker.io/library/centos:latest@sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6 14.3s => => resolve docker.io/library/centos:latest@sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c 0.0s => => sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177 762B / 762B 0.0s => => sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dc 529B / 529B 0.0s => => sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6 2.14kB / 2.14kB 0.0s => => sha256:a1d0c75327776413fa0db9ed3adcdbadedc95a662eb1d360dad82bb913f8a1d1 83.52MB / 83.52MB 2.0s => => extracting sha256:a1d0c75327776413fa0db9ed3adcdbadedc95a662eb1d360dad82bb913f8a1d1 10.8s => [2/2] RUN yum -y install httpd 14.7s => exporting to image 1.0s => => exporting layers 1.0s => => writing image sha256:c18170a407ca85218ee83526075a3f2a2e74f27d7bd5908ad68ba2328b4f4783 0.0s

4. Kaniko

Google tarafından geliştirilen Kaniko, bir kapsayıcı veya Kubernetes kümesi içinde kapsayıcı görüntüleri geliştirmek için kullanılır. Buildah gibi, Kaniko da bir arka plan programı gerektirmez ve Docker’a bağlı olmadan Dockerfiles’den görüntüler oluşturabilir.

Docker ve Kaniko arasındaki en büyük fark, Kaniko’nun daha çok Kubernetes iş akışlarına odaklanmış olması ve bir görüntü olarak çalıştırılması, yerel kalkınma için elverişsiz hale gelmesidir.

5. Skopeo

Skopeo, konteyner görüntüleri ve görüntü havuzları üzerinde çeşitli işlemler için RedHat tarafından geliştirilen bir başka araçtır. Skopeo, görüntüleri incelemek, bir kayıt defterinden diğerine aktarmak ve gerekirse toplu olarak silmek için tasarlanan Podman ve Buildah için eşlik eden bir araç olarak kullanılabilir.

Skopeo, inspect bir kapsayıcı görüntüsü hakkında benzer düşük seviyeli bilgiler sağlayan bir alt komut sağlar. docker inspect

Docker’ın aksine, Skopeo, önce indirmenize gerek kalmadan bir havuz veya etiket hakkında faydalı bilgiler toplamanıza yardımcı olabilir:

$ skopeo inspect docker://docker.io/fedora # inspect remote image
{
    "Name": "docker.io/library/fedora",
    "Digest": "sha256:72c6c48a902baff1ab9948558556ef59e3429c65697287791be3c709738955b3",
    "RepoTags": [
        "20",
        "21",
        "22",
        "23",
        "24",
        "25",
        "26",
        "26-modular",
        "27",
        "28",
        "29",
        "30",
        "31",
        "32",
        "33",
        "34",
        "35",
        "36",
        "branched",
        "heisenbug",
        "latest",
        "modular",
        "rawhide"
    ],
    "Created": "2021-11-02T21:29:22.547065293Z",
    "DockerVersion": "20.10.7",
    "Labels": {
        "maintainer": "Clement Verna \u003ccverna@fedoraproject.org\u003e"
    },
    "Architecture": "amd64",
    "Os": "linux",
    "Layers": [
        "sha256:fc811dadee2400b171b0e1eed1d973c4aa9459c6f81c77ce11c014a6104ae005"
    ],
    "Env": [
        "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
        "DISTTAG=f35container",
        "FGC=f35",
        "FBR=f35"
    ]
}

skopeo copy Bir kapsayıcı görüntüsünü bir uzak kayıt defterinden başka bir uzak kayıt defterine veya yerel bir dizine kopyalamak için kullanabilirsiniz . Bir diğer ilgili özellik, Skopeo’nun komutla konteyner kayıtları ve yerel dizinler arasında görüntüleri senkronize etme yeteneğidir. skopeo sync

6. Dive

Dive, konteyner görüntülerini incelemek, analiz etmek ve optimize etmek için bir araçtır. Dalış, her biri arasındaki farkları vurgulayarak, görüntü içeriklerini katmanlara göre gösterebilir. Dive ayrıca görüntünüzü analiz edebilir, boşa harcanan alanı tahmin ederek verimlilik için bir yüzde puanı sağlayarak görüntü boyutunuzu küçültmeye çalışırken yardımcı olur.

Diğer bir kullanışlı özellik, görüntünün verimliliğine ve boşa harcanan alan miktarına bağlı olarak başarılı veya başarısız sonucu sağlayan Dive’ın CI entegrasyonudur. CI entegrasyon özelliğine erişmek için, herhangi bir geçerli komutu çağırırken CIçevresel değişkeni şu şekilde ayarlayın:truedive

$ CI=true dive node:alpine
Dalış CI Entegrasyonu

7. runc and crun

runc, Linux’ta kapsayıcıları OCI belirtimine göre oluşturan ve çalıştıran bir CLI aracıdır. runc daha önce bir modül olarak Docker’a gömülüydü, ancak daha sonra 2015’te bağımsız bir araca dönüştürüldü.

runc, Docker, Podman ve diğer birçok kapsayıcı motorunda varsayılan kapsayıcı çalışma zamanı olarak kalır. runc’a bir alternatif, RedHat tarafından geliştirilen ve çoğu Linux kapsayıcı aracı gibi Go yerine C ile yazılan crun’dur.

crun, runc’ye kıyasla daha iyi performans ve daha düşük bellek kullanımının yanı sıra, kapta izin verilen bellek üzerinde daha katı sınırlar belirleme becerisine sahiptir. crun ayrıca OCI uyumludur ve runc ile özellik uyumludur, bu nedenle onu Docker, Podman containerdve OCI uyumlu kapsayıcı çalışma zamanlarını kullanan diğer tüm kapsayıcı motorlarında runc’nin yerine kullanabilirsiniz. runc ile daha ayrıntılı bir karşılaştırma için crun ile ilgili giriş makalesine bakın .

toparlayacak olursak

Bu makalede, konteyner görüntülerini oluşturmak, çalıştırmak ve dağıtmak için Docker’a çeşitli alternatifler açıkladık. Docker, konteynerleştirme ve konteyner yönetimi için baskın platform olmaya devam etse de, kullanım durumunuz için daha iyi sonuç verebilecek alternatif araçlar hakkında bilgi sahibi olmak iyidir.

Belirtilen her araç OCI belirtimine uyduğundan, belirli bir Docker yönünü değiştirmek oldukça sorunsuz olmalıdır. Kaçırdığımızı düşündüğünüz herhangi bir araç varsa yorum bırakmayı unutmayın. Okuduğunuz için teşekkürler!

Makalenin orjinal kaynağına bu linkten ulaşabilirsiniz.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.

This site uses Akismet to reduce spam. Learn how your comment data is processed.