Docker görüntüleri bir Dockerfile
bu, bir temel görüntüyü ve kendi dosya sistemi katmanlarınızı ekleyen bir dizi talimatı tanımlar. yapmak istersen ne olur sahip olmak Yine de “temel görüntü”? İşte sıfırdan nasıl başlayacağınız ve sıfırdan eksiksiz bir kapsayıcı dosya sistemi nasıl oluşturacağınız.
Resim Nedir?
Docker görüntüleri, temel görüntü olarak genellikle popüler bir Linux dağıtımını kullanır. eğer yazdıysan FROM ubuntu:latest
, FROM debian:latest
veya FROM alpine:latest
, temeliniz olarak bir işletim sistemi kullandınız. Ayrıca, belirli bir programlama dili veya çerçevesi için önceden yapılandırılmış bir görüntü kullanıyor olabilirsiniz, örneğin: FROM php:8.0
veya FROM node:16
.
Bu görüntülerin tümü, uygulamalarınız için faydalı bir başlangıç noktası sağlar. Ortak Unix yardımcı programları ve temel yazılım paketleri ile birlikte gelirler. Bunların hepsi, son görüntünüzün boyutunu artırır. İlk ilkelerden kendi dosya sisteminizi oluşturarak gerçekten minimal bir görüntü oluşturulmalıdır.
“Çizik” Görüntü
Docker, ilk dosya sistemi katmanını kontrol etmek istediğinizi belirten özel bir temel görüntü sağlar. Bu, resminizin en alt katmanıdır ve genellikle sizin tarafınızdan belirtilen temel resimle tanımlanır. FROM
talimat.
“Sıfırdan” bir görüntü oluşturmak istediğinizde, yazı FROM scratch
Dockerfile’ınızda bunun için gitmenin yolu budur! Bu size başlangıçta boş bir sayfa olan bir dosya sistemi verir.
FROM scratch
Ardından, konteynerin dosya sistemini ihtiyacınız olan ikili dosyalar ve kitaplıklarla doldurmak için Dockerfile’nizin geri kalanını her zamanki gibi kullanmalısınız.
“Çizik” nedir?
NS scratch
“image” normal bir Docker görüntüsü gibi görünür ve hissedilir. Docker Hub’da bile listeleniyor. scratch
aslında bir resim değil – işleyen bir resmin en düşük dosya sistemi katmanını gösteren ayrılmış bir anahtar kelimedir. Tüm Docker görüntüleri en üstte bulunur scratch
onların ortak temeli olarak.
yapamazsın docker pull scratch
ve onu kullanarak kapları çalıştırmak mümkün değildir. Boş bir görüntü katmanını temsil eder, bu nedenle Docker’ın çalıştıracağı hiçbir şey yoktur. Resimler şu şekilde etiketlenemez: scratch
ya saklı doğası nedeniyle.
Çizik Görüntülere Neler Eklenebilir?
Üstüne işleyen bir görüntü oluşturmak için çok fazla şeye ihtiyacınız yok scratch
. Eklemeniz gereken tek şey, görüntünüzün komutu olarak kullanabileceğiniz statik olarak derlenmiş bir Linux ikili dosyasıdır.
İşte C’den derlenmiş küçük bir “merhaba dünya” programını çalıştıran çalışan bir demo:
#include <stdio.h> int main() { printf("Hello World"); return 0; }
C kodunuzu bir ikili dosyaya derleyin:
gcc -o helloworld hello.c
İkili dosyanızı çalıştırın ve terminalinize “merhaba dünya” yazdırıldığını gözlemleyin:
./helloworld
Artık ikili sisteminizi çalıştıran sıfırdan tabanlı bir Docker kapsayıcısı oluşturabilirsiniz:
FROM scratch COPY helloworld / CMD ["helloworld"]
Resminizi oluşturun:
docker build -t hello:latest .
ile görüntünün incelenmesi docker inspect
tek bir katmana sahip olduğunu gösterecektir. Bu görüntünün dosya sistemi yalnızca bir dosya içerir, helloworld
ikili.
Şimdi resminizi kullanarak bir kapsayıcı çalıştırın:
docker run hello:latest
Derlenmiş ikili dosyanız yürütülürken terminalinizde “merhaba dünya” göreceksiniz. Çizik tabanlı görüntünüz yalnızca ikili dosyanızı içerir, bu nedenle boyutu yalnızca birkaç KB olacaktır. Herhangi bir işletim sistemi temel görüntüsünün kullanılması, Alpine gibi minimum bir dağıtımla bile bunu birden çok megabayta yükseltir.
Hemen hemen tüm görüntüler, basit bir statik ikili programın ötesinde bazı bağımlılıklara sahip olacaktır. Bunları Docker dosyanızın bir parçası olarak resminize eklemeniz gerekecek. Standart Linux dağıtımlarında olduğu gibi kabul ettiğiniz araçların hiçbirinin, onları görüntünün dosya sistemine manuel olarak ekleyene kadar kullanılamayacağını unutmayın.
Scratch’i Ne Zaman Kullanmalı?
itibaren başlama kararı scratch
uygulamanızın bağımlılıklarına ve görüntü taşınabilirliği konusundaki hedeflerinize dayanmalıdır. Görüntüler scratch
görüntü boyutunun ve oluşturma sürelerinin önemli olduğu statik olarak derlenmiş ikili dosyaları barındırmak için en uygundur.
scratch
size çalışmanız için temiz bir sayfa sağlar, bu nedenle doğru bir şekilde yazmak için bir miktar ilk yatırım gerektirir. Dockerfile
ve zamanla koruyun. Gibi bazı Docker komutları attach
siz eklemediğiniz sürece kapsayıcınızın içinde kabuk olmayacağından varsayılan olarak çalışmayacaktır.
kullanma scratch
ağır çevresel bağımlılıkları olan yorumlanmış dilleri kullanırken değerinden daha fazla sorun olabilir. Bu paketlerin en son sürümlerine başvurmak için temel resminizi sürekli olarak güncellemeniz gerekir. Varolan bir Docker Hub temel görüntüsünün minimal bir lezzetini kullanmak genellikle daha kullanışlı ve sürdürülebilirdir.
Özet
FROM scratch
Dockerfile’de, eklenen her katmanın kontrolünün sizde olduğu boş bir dosya sisteminden başlamak istediğinizi belirtir. Uygulamanızın ihtiyaç duyduğu bağımlılıklar dışında her şeyden arındırılmış son derece akıcı görüntüleri kolaylaştırır.
Çoğu geliştiricinin kullanması olası değildir scratch
doğrudan konteyner kullanım durumlarının çoğu için uygun olmadığı için. Kendi kendine yeten statik ikili dosyaları birkaç çevresel gereksinimle kapsayıcı hale getirmek istiyorsanız bunu kullanmayı seçebilirsiniz.
scratch
ayrıca “konteynerler” ve sanal makineler arasındaki farkın açık bir göstergesi olarak işlev görür. Yalnızca bir yürütülebilir dosya içeren bir görüntü, işlem ana makinenizin çekirdeğinde çalıştırıldığı için kullanılabilir bir Docker kapsayıcıdır. Normal bir sanal makinenin ana bilgisayarından bağımsız olarak başlatılması gerekir, bu nedenle görüntüsünde tam bir işletim sistemi çekirdeği içermelidir.