Ana bilgisayarda depolanan Docker görüntüleri ve kapsayıcılar nerede? - CloudSavvy BT
Web ajansı » Dijital haberler » Docker Inside Docker nasıl (ve neden) çalıştırılır - CloudSavvy BT

Docker Inside Docker nasıl (ve neden) çalıştırılır - CloudSavvy BT

Docker'ı Docker'da ç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 kapsayıcısının içinden erişmek, ç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. Ardışık düzen aşamalarınızdan herhangi biri kapsayıcıları görüntüler veya bunlarla etkileşim kurarsa, Docker-in-Docker stratejisini kullanırsınız.

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

Docker, tek başına bir görüntü olarak teslim edilir. docker:dind Docker Hub'da etiket. Bu görüntünün önyüklenmesi size yeni kapsayıcınızda Docker arka plan programının çalışan bir kurulumunu verecektir. Sunucunuzun çalıştıran arka plan programı ne olursa olsun çalışacaktır. dind konteyner, bu nedenle 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 kullanmanın önemli bir dezavantajı, ayrıcalıklı modu kullanmak zorunda olmanızdır. Bu kısıtlama, kapsayıcıları kök olmadan kullanıyor olsanız bile geçerlidir. Ayrıcalıklı mod tarafından etkinleştirilir --privileged yukarıdaki komutta bayrak.

Ayrıcalıklı modun kullanılması, kapsayıcıya ana bilgisayar sisteminize tam erişim sağlar. Bu, bir Docker-in-Docker senaryosunda, dahili Docker'ınızın yeni kapsayıcılar oluşturabilmesi için gereklidir. Ancak bu, bazı ortamlarda kabul edilemez bir güvenlik riskini temsil edebilir.

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

Başka bir zorluk, kapsayıcı dosya sistemleriyle ilgilidir. Harici arka plan programı, ana makinenizin aşağıdaki gibi normal dosya sisteminde çalışır: ext4. Ancak, dahili Docker arka plan programı da dahil olmak üzere tüm kapsayıcıları, yazma üzerine kopyalama (CoW) dosya sistemine güvenecektir. Dahili arka plan programı bir p kullanmak üzere yapılandırılmışsa, bu uyumsuzluklara neden olabilir.iloMevcut bir CoW dosya sisteminde kullanılamayan depolama.

Bunun yerine ana makinenizin Docker fişini takın

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

docker run -d --name docker -v /var/run/docker.sock:/var/run/docker.sock docker:en son

İçindeki Docker CLI docker görüntü, bulduğu Docker daemon soketi ile 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ızda çalışır.

Bu, dahili Docker tarafından oluşturulan kapsayıcıların, Docker kapsayıcısının yanında ana bilgisayar sisteminizde bulunacağı anlamına gelir. İç içe geçmiş Docker ebeveynin çocuğu gibi görünse de tüm kapsayıcılar kardeş olarak var olacaktır. işleyen docker ps ana bilgisayarda veya kapsayıcınızın içinde çalıştırılsa da aynı sonuçları üretecektir.

Bu teknik, uygulamanın zorluklarını hafifletir. 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 herkes, ana makinenizde kapsayıcı başlatma, görüntüleri çıkarma veya verileri silme yeteneği sağlayan Docker arka plan programına talimatlar gönderebilir.

Her bir yaklaşım ne zaman kullanılır?

Docker-in-Docker aracılığıyla dind CI ortamlarında her zaman yaygın olarak kullanılmıştır. Bu, "iç" kapsayıcıların ana bilgisayardan bir yalıtım katmanına sahip olduğu anlamına gelir. Tek bir CI çalışma zamanı kapsayıcısı, ana bilgisayarın Docker arka planını kirletmeden her bir ardışık düzen kapsayıcısını destekler.

Bu genellikle işe yarasa da yan etkilerle doludur ve amaçlanan kullanım durumu değildir. dind. İç içe Docker kurulumları için son kullanıcı desteği sağlamak için değil, Docker'ın geliştirilmesini kolaylaştırmak için eklenmiştir.

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 soket arka plan programını bağlamak daha güvenli, daha esnek ve bir dind alıcı.

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ı sanal makinelere benzer hale gelir, böylece fiziksel veya sanal bir makinede tipik olarak işletim sistemi olmadan çalışan yazılımları destekleyebilirler. Bu, herhangi bir özel yapılandırma olmadan Docker ve Kubernetes'i içerir.

Sonuç

Docker'ı Docker'da çalıştırmak nispeten yaygın bir gereksinimdir. Kullanıcı tarafından oluşturulan ardışık düzenlerden kapsayıcı görüntü derlemelerini desteklemesi gereken CI Sunucularını yapılandırırken bunu büyük olasılıkla göreceksiniz.

kullanma docker:dind size kendi kapsayıcısında çalışan bağımsız bir Docker arka plan programı sunar. Ana bilgisayardan doğrudan görülemeyen alt kapsayıcıları verimli bir şekilde oluşturur. Güçlü bir izolasyon sunuyor gibi görünse de, dind aslında birçok çevresel vaka sorununa ve güvenlik sorununa ev sahipliği yapar. Bunlar Docker işletim sisteminin etkileşimlerinden kaynaklanmaktadır.

Ana makinenizin Docker soketini, aşağıdakileri içeren bir kapsayıcıya monte edin: 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ı kullanırken başka hiçbir parametre gerekli değildir.

★ ★ ★ ★ ★