Docker kapsayıcıları genellikle dahili durumu olmayan geçici uygulama örnekleridir. Bu, kapsayıcılarınızı istediğiniz zaman durdurmanıza veya yeniden başlatmanıza olanak tanıyan en iyi uygulama yöntemidir.
Bazen bir kapsayıcının dosya sisteminde değişiklikler yapılması kaçınılmazdır. Belki de yazılımı deniyorsunuz ve daha sonra geri dönmek için bir anlık görüntü istiyorsunuz. Başka bir kullanım durumu, bir kapsayıcının içindeki yazılımın çalışmayı durdurduğu ve gelecekte hatalarını ayıklayabileceğiniz bir kopyayı kaydetmek istediğiniz durumlar olabilir.
Mevcut bir kapsayıcıdan yeni bir Docker görüntüsünün nasıl oluşturulacağı aşağıda açıklanmıştır. sonra başlayabileceksiniz bir diğeri ilkinden dosya sistemi ile doldurulacak olan bu görüntüden kapsayıcı.
Taahhüt Konteynerleri
bu docker commit
Komut, bir kapsayıcı almak ve ondan yeni bir görüntü oluşturmak için kullanılır. Durmuş veya çalışan kapsayıcılarla çalışır.
Temel sözdizimi aşağıdaki gibidir:
docker commit example-container example-image:latest
Bu, adlı kapsayıcıdan bir görüntü oluşturur. example-container
. İsterseniz kabı kimliğine göre de tanımlayabilirsiniz. Her iki bilgi de çıktıdan elde edilebilir. docker ps
bu, ana makinenizdeki tüm kapsayıcıları listeler.
Ortaya çıkan görüntüye komutun ikinci parametresi olarak verilen etiket atanır. Bu example-image:latest
yukarıda gösterilen örnekte. Normal bir resim etiketleme işlemi gibi, yeni resim zaten varsa etiketin referansının yerini alacaktır.
Artık dosya sistemini geri yüklemek için resminizi kullanabilirsiniz. example-container
yeni bir kapsayıcı örneğine:
docker run -d example-image:latest
Dosya sistemi içeriği, example-container
o sırada konteyner docker commit
Komut yürütüldü Önemli bir uyarı var: monte edilen birimlerin içeriği dahil edilmeyecek, bu nedenle oluşturulan kapsayıcı görüntüsünde montaj konumları boş olacak. Hacim verileri bozulmamış yeni bir kapsayıcı çalıştırmak için -v
ile ikinci örneği başlattığınızda, birimleri ilk kapsayıcıdan yeniden eklemek için bayrak docker run
.
Dikkate değer bir başka yapışma noktası, Docker’ın çalışan konteyner taahhütlerini nasıl ele aldığıdır. Çoğunlukla, bu sorunsuz çalışmalıdır, ancak varsayılan olarak, taahhüt oluşturulmadan önce hedef kapsayıcıyı duraklatmak için kullanılır. Kapsayıcı içindeki tüm işlemler askıya alınacak ve görüntü oluşturma tamamlandıktan sonra devam ettirilecektir. Bu, yeni görüntüdeki veri tutarlılığını iyileştirir ancak kapsayıcıyı anlık olarak erişilemez hale getirir. Dahil ederek bu davranışı devre dışı bırakabilirsiniz. --pause false
seninki ile docker commit
emretmek.
Taahhüt Mesajları Ekleme
bu docker commit
komutu, Git gibi sürüm kontrol yazılımlarına benzer şekilde taahhüt mesajlarını destekler. Bir kapsayıcıdan görüntü oluşturduğunuzda bir mesaj eklemek, neyin değiştiğini ve taahhüdünüzün arkasındaki nedeni belgelemenize olanak tanır.
Kullan --message
veya -m
bir taahhüt mesajı uygulamak için bayrak:
docker commit -m "Example commit" example-container example-image:latest
Özel bir bayrakla yazarlık bilgilerini de ekleyebilirsiniz. Ortak bir dize sağlayın First Name <email@example.com>
biçimlendirmek --author
veya -a
bayrak. Taahhüt mesajının yanında kaydedilecektir.
docker commit -a "Example Author <example@example.com>" -m "Example commit" example-container example-image:latest
Kullandığınızda taahhüt mesajları görüntülenir. docker history
bir görüntüdeki katmanları görüntüleme komutu. içinde görünecekler COMMENT
en sağdaki sütun.
Bu bilgilere erişmenin başka bir yolu da kullanmaktır. docker inspect
ile paralel olarak grep
bir görüntünün JSON temsilinden yazarlık ve yorum değerlerini çıkarmak için:
docker inspect <image-id> | grep 'Created|Author|Comment'
Bu, görüntüdeki en üst katmanla ilişkili verileri gösterecektir.
Dockerfile Talimatlarını Değiştirme
Bir görüntüyü işlemek, size Dockerfile talimatlarının bazılarını değiştirme şansı verir. Yeni görüntünüzde aşağıdaki değerleri geçersiz kılabilirsiniz:
CMD
ENTRYPOINT
ENV
EXPOSE
LABEL
ONBUILD
USER
VOLUME
WORKDIR
Bir talimat ayarlamak için, --change
veya -c
bayrak:
docker commit --change 'ENTRYPOINT ["sh"]' example-container example-image:latest
İstediğiniz tüm değişiklikleri uygulamak için bayrağı gerektiği kadar tekrarlayabilirsiniz.
Yalnızca en üstteki dosya sistemi katmanını etkileyen talimatlar desteklenir. Aşağıdaki gibi talimatlar aracılığıyla taahhüt edilen bir görüntüyü yeni katmanlarla sorunsuz bir şekilde genişletemezsiniz. RUN
ve COPY
. Ancak, bir taahhüdün sonucunu alabilir ve gerekirse yeni içerik ekleyen yeni bir Dockerfile yazabilirsiniz:
# Created via `docker commit` FROM example-image:latest RUN apt install example-package
Dockerfile talimatlarını taahhüt zamanında değiştirirseniz, neyi ve neden değiştirdiğinizi açıklayan bir taahhüt mesajı eklemeye değer. Bu, görüntüye erişimi olan herkesin, görüntünün oluşturulduğu kapsayıcıya kıyasla herhangi bir davranış farkını anlamasına yardımcı olacaktır.
Özet
Docker görüntüleri genellikle Dockerfiles’den oluşturulur ve tek kullanımlık kapsayıcıları başlatmak için kullanılır. Bir kapsayıcının dosya sisteminin durumundaki değişiklikler, görüntüyü yeniden oluşturarak, mevcut kapsayıcıyı yok ederek ve yeni bir kapsayıcı başlatarak yapılır. İdeal bir dünyada, kapsayıcıların herhangi bir dahili durumu yoktur, ancak bu pratikte her zaman doğru değildir.
Bir kapsayıcıyı taahhüt etmek, gelecekte mevcut dosya sistemini geri yüklemenin bir yolunu sunar. Taahhütler, daha önce oluşturulmuş günlüklere ve geçici dosyalara erişimi korurken ayrı bir ortamda hata ayıklayabilmeniz için zahmetli kapsayıcıların kopyalarını oluşturmak için kullanışlıdır.
Kapsayıcı taahhütleri genellikle VM anlık görüntülerine benzer görünse de, bunlar tamamen aynı şey değildir. VM’ler sanal donanımı kontrol eder ve bu donanımın durumu anlık görüntüde bulunur. Docker kapsayıcıları, yalnızca ana bilgisayarda çalışan bir dizi işlemdir; taahhüt, kapsayıcıyı temsil eden yeni bir Docker görüntüsüdür. dosya sistemi ancak süreçlerin durumu, çekirdek ve donanımınız hakkında mutlaka herhangi bir veriden yoksundur.