Docker İçinde Docker Nasıl (ve Neden) Çalıştırılır Docker Konteynerine Tek Bir Dosya Nasıl Monte Edilir veya Symlink Yapılır Github’dan Bir Taahhüt Nasıl Kaldırılır “İç Kaynak” Geliştirme Nedir ve Onu Kullanmalı mısınız? DigitalOcean Droplet Meta Verilerine Nasıl Erişilir ve Kullanılır Yerel Ağınızda Kendi DNS Sunucunuzu Nasıl Çalıştırırsınız C# 10’daki Yenilikler?

0
11

Docker’ı Docker içinde çalıştırmak, zaten kapsayıcılı bir ortamda görüntüler oluşturmanıza ve kapsayıcıları başlatmanıza olanak tanır. Alt veya kardeş kapsayıcıları başlatmak isteyip istemediğinize bağlı olarak bunu başarmak için iki olası yaklaşım vardır.

Docker’a bir Docker konteynerinin içinden erişim, çoğunlukla CI ve CD sistemleri bağlamında arzu edilir. İşlem hattınızı çalıştıran aracıları bir Docker kapsayıcısında barındırmak yaygındır. İşlem hattı aşamalarınızdan biri bir görüntü oluşturursa veya kapsayıcılarla etkileşime girerse, Docker-in-Docker stratejisini kullanırsınız.

Docker-in-Docker Görüntüsü

Docker, aşağıdakiler aracılığıyla bağımsız bir görüntü olarak sağlanır: docker:dind Docker Hub’da etiket. Bu görüntüyü başlatmak size yeni kapsayıcınızın içinde çalışan bir Docker arka plan programı yüklemesi sağlayacaktır. Sunucunuzu çalıştıran sunucunuzun arka plan programından bağımsız olarak çalışır. dind konteyner, yani docker ps konteynerin içinde farklı sonuçlar verecektir docker ps ev sahibinizde.

docker run -d --privileged --name docker 
    -e DOCKER_TLS_CERTDIR=/certs 
    -v docker-certs-ca:/certs/ca 
    -v docker-certs-client:/certs/client 
    docker:dind

Docker-in-Docker’ı bu şekilde kullanmak büyük bir uyarı ile birlikte gelir: ayrıcalıklı modu kullanmanız gerekir. Bu kısıtlama, köksüz kaplar kullanıyor olsanız bile geçerlidir. Ayrıcalıklı mod tarafından etkinleştirilir --privileged bayrak yukarıda gösterilen komutta.

Ayrıcalıklı modun kullanılması, kapsayıcıya ana bilgisayar sisteminize tam erişim sağlar. Bu, Docker-in-Docker senaryosunda gereklidir, böylece iç Docker’ınız yeni kapsayıcılar oluşturabilir. Yine de bazı ortamlarda kabul edilemez bir güvenlik riski olabilir.

Reklamcılık

ile ilgili başka sorunlar var dind fazla. Bazı sistemler, AppArmor ve SELinux gibi Linux Güvenlik Modülleri (LSM) ile çakışmalar yaşayabilir. Bu, iç Docker, dış arka plan programının tahmin edemediği LSM ilkeleri uyguladığında oluşur.

Başka bir zorluk, kapsayıcı dosya sistemleriyle ilgilidir. Dış arka plan programı, ana makinenizin aşağıdaki gibi normal dosya sisteminin üzerinde çalışır: ext4. İç Docker arka plan programı da dahil olmak üzere tüm kapsayıcıları, yazma üzerine kopyalama (CoW) dosya sistemine oturacaktır. Dahili arka plan programı, mevcut bir CoW dosya sisteminin üzerinde kullanılamayan bir depolama sürücüsü kullanacak şekilde yapılandırılmışsa, bu uyumsuzluklara neden olabilir.

Bunun Yerine Ana Bilgisayarınızın Docker Soketini Takma

ile ilgili zorluklar dind kullanımından tamamen kaçınarak en iyi şekilde ele alınır. Birçok senaryoda, ana makinenizin Docker soketini normal bir yuvaya monte ederek istediğiniz efekti elde edebilirsiniz. docker konteyner:

docker run -d --name docker
    -v /var/run/docker.sock:/var/run/docker.sock 
    docker:latest

İçindeki Docker CLI docker görüntü, bulduğu Docker arka plan programı soketiyle etkileşime girer /var/run/docker.sock. Ana bilgisayarınızın soketini bu yola monte etmek şu anlama gelir: docker kapsayıcının içinde çalıştırılan komutlar, mevcut Docker arka plan programınıza karşı yürütülür.

Bu, iç Docker tarafından oluşturulan kapsayıcıların, Docker kapsayıcısının yanı sıra ana bilgisayar sisteminizde bulunacağı anlamına gelir. Tüm kapsayıcılar, yuvalanmış Docker ebeveynin çocuğu gibi görünse bile kardeş olarak var olacaktır. Koşma docker ps ana bilgisayarda veya kapsayıcınızın içinde çalıştırılsa da aynı sonuçları üretecektir.

Bu teknik, uygulama zorluklarını azaltır. dind. Docker soketinin montajının kendisi potansiyel bir güvenlik sorunu olmasına rağmen, ayrıcalıklı modu kullanma ihtiyacını da ortadan kaldırır. Sokete erişimi olan herhangi bir şey, Docker arka plan programına talimatlar gönderebilir, bu da ana makinenizde kapsayıcıları başlatma, görüntü çekme veya verileri silme yeteneği sağlar.

Her Yaklaşımın Ne Zaman Kullanılacağı

Docker-in-Docker aracılığıyla dind tarihsel olarak CI ortamlarında yaygın olarak kullanılmaktadır. Bu, “iç” kapların ana bilgisayardan bir izolasyon katmanına sahip olduğu anlamına gelir. Tek bir CI koşucu kapsayıcı, ana bilgisayarın Docker arka planını kirletmeden her boru hattı kapsayıcısını destekler.

Reklamcılık

Sıklıkla işe yarasa da, bu yan etkilerle doludur ve amaçlanan kullanım durumu değildir. dind. Docker’ın gelişimini kolaylaştırmak için eklendi, iç içe Docker kurulumları için son kullanıcı desteği sağlamadı.

Yaratıcısı Jérôme Petazzoni’ye göre dind Soket tabanlı yaklaşımı benimsemek tercih ettiğiniz çözüm olmalıdır. Ana makinenizin arka plan programı soketini bağlama, daha güvenli, daha esnek ve bir dind konteyner.

Kullanım durumunuz, kesinlikle ihtiyacınız olduğu anlamına geliyorsa dind, onu dağıtmanın daha güvenli bir yolu var. Modern Sysbox projesi, ayrıcalıklı modu kullanmadan diğer çalışma zamanlarını iç içe geçirebilen özel bir kapsayıcı çalışma zamanıdır. Sysbox kapsayıcıları VM benzeri hale gelir, böylece genellikle fiziksel veya sanal bir makinede tam anlamıyla çalışan yazılımları destekleyebilirler. Bu, herhangi bir özel yapılandırma olmadan Docker ve Kubernetes’i içerir.

Çözüm

Docker’ı Docker içinde çalıştırmak nispeten yaygın bir gereksinimdir. Kullanıcı tarafından oluşturulan ardışık düzenlerden kapsayıcı görüntü oluşturmalarını desteklemesi gereken CI sunucularını kurarken görmeniz daha olasıdır.

kullanma docker:dind size kendi konteynerinin içinde çalışan bağımsız bir Docker arka plan programı sunar. Ana bilgisayardan doğrudan görünmeyen alt kapsayıcıları etkili bir şekilde oluşturur. Güçlü bir izolasyon sunuyor gibi görünse de, dind aslında birçok uç vaka sorununu ve güvenlik endişesini barındırır. Bunlar Docker’ın işletim sistemi etkileşimlerinden kaynaklanmaktadır.

Reklamcılık

Ana makinenizin Docker soketini aşağıdakileri içeren bir konteynere monte etmek docker ikili daha basit ve daha öngörülebilir bir alternatiftir. Bu, iç içe Docker işleminin kendi kardeşleri haline gelen kapsayıcıları başlatmasını sağlar. Soket tabanlı yaklaşımı kullandığınızda başka ayar gerekmez.

LEAVE A REPLY

Please enter your comment!
Please enter your name here