Docker Dağıtımlarını Otomatikleştirme ile ilgili makalemden :
Docker Görüntüleri ve Konteynerler
Dockerland'da görüntüler ve konteynerler var . İkisi birbiriyle yakından ilişkili, ancak farklı. Benim için bu ikilemi anlamak Docker'ı son derece açıklığa kavuşturdu.
Görüntü nedir?
Bir görüntü, aslında bir kabın anlık görüntüsü olan inert, değişmez bir dosyadır. Resimler build komutuyla oluşturulur ve run ile başladığında bir kap oluştururlar . Görüntüler gibi bir Docker kayıt defterinde saklanır registry.hub.docker.com . Oldukça büyük olabildikleri için, görüntüler diğer görüntülerin katmanlarından oluşacak şekilde tasarlanır ve böylece ağ üzerinden görüntü aktarılırken minimum miktarda veri gönderilir.
Yerel görüntüler çalıştırılarak listelenebilir docker images
:
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu 13.10 5e019ab7bf6d 2 months ago 180 MB
ubuntu 14.04 99ec81b80c55 2 months ago 266 MB
ubuntu latest 99ec81b80c55 2 months ago 266 MB
ubuntu trusty 99ec81b80c55 2 months ago 266 MB
<none> <none> 4ab0d9120985 3 months ago 486.5 MB
Dikkat edilmesi gereken bazı noktalar:
- IMAGE ID, bir görüntü için gerçek tanımlayıcının ilk 12 karakteridir. Belirli bir görüntünün birçok etiketini oluşturabilirsiniz, ancak kimliklerinin hepsi aynı olacaktır (yukarıdaki gibi).
- SANAL BOYUT sanaldır, çünkü alttaki tüm katmanların boyutlarını toplar. Bu, bu sütundaki tüm değerlerin toplamının muhtemelen tüm bu görüntüler tarafından kullanılan disk alanından çok daha büyük olduğu anlamına gelir.
- REPOSITORY sütunundaki değer
-t
, docker build
komutun bayrağından veya docker tag
var olan bir görüntüyü -ing'den alır. Sizin için anlamlı bir adlandırma kullanarak görüntüleri etiketlemekte özgürsünüz, ancak docker'ın etiketi bir docker push
veya docker pull
.
- Bir etiketin tam biçimi
[REGISTRYHOST/][USERNAME/]NAME[:TAG]
. İçin ubuntu
yukarıda, REGISTRYHOST olduğu anlaşılmaktadır registry.hub.docker.com
. Bu nedenle, adlı my-application
kayıt defterinde çağırılan resminizi saklamayı planlıyorsanız, docker.example.com
bu resmi etiketlemelisinizdocker.example.com/my-application
.
- TAG sütunu, tam etiketin yalnızca [: TAG] kısmıdır . Bu talihsiz bir terminolojidir.
-
latest
Etiketi basitçe Bir etiket belirtmeyen varsayılan etiketi, büyülü değildir.
- Etiketlenmemiş resimleriniz yalnızca IMAGE kimlikleriyle tanımlanabilir. Bunlar,
<none>
ETİKET ve TEKLİF ALACAKTIR. Onları unutmak kolaydır.
Görüntüler hakkında daha fazla bilgi Docker belgelerinden ve sözlüğünden edinilebilir .
Konteyner nedir?
Bir programlama metaforunu kullanmak için, eğer görüntü bir sınıfsa, bir kap bir sınıfın bir örneğidir - bir çalışma zamanı nesnesi. Kapsayıcılar Docker'ı neden kullandığınızdır; uygulamaları çalıştırabileceğiniz bir ortamın hafif ve taşınabilir kapsüllemeleri.
Çalışan yerel konteynerleri şununla görüntüleyin docker ps
:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f2ff1af05450 samalba/docker-registry:latest /bin/sh -c 'exec doc 4 months ago Up 12 weeks 0.0.0.0:5000->5000/tcp docker-registry
Burada docker kayıt defterinin dockerized bir sürümünü çalıştırıyorum, böylece benim görüntüleri saklamak için özel bir yer var. Yine, dikkat edilmesi gereken bazı şeyler:
- IMAGE ID gibi, CONTAINER ID de kapsayıcı için gerçek tanımlayıcıdır. Aynı forma sahiptir, ancak farklı bir nesne türünü tanımlar.
docker ps
sadece çalışan kapları çıkarır. İle tüm konteynerleri ( çalışıyor veya durdurulmuş ) görüntüleyebilirsinizdocker ps -a
.
- NAMES, başlatılan bir kapsayıcıyı
--name
bayrak yoluyla tanımlamak için kullanılabilir .
Görüntü ve kap oluşturmayı önleme
Docker ile ilgili ilk hayal kırıklığımdan biri, etiketsiz görüntülerin ve durdurulmuş kapların görünüşte sürekli birikmesiydi . Bir kaç kez bu birikim, dizüstü bilgisayarımı yavaşlatan veya otomatik inşa boru hattımı durduran maksimum sabit disklerle sonuçlandı. "Her yerde konteyner" hakkında konuşun!
Etiketlenmemiş tüm görüntüleri docker rmi
son dangling=true
sorgu ile birleştirerek kaldırabiliriz :
docker images -q --filter "dangling=true" | xargs docker rmi
Docker, mevcut kapsayıcıların arkasındaki görüntüleri kaldıramayacak, bu nedenle docker rm
önce durdurulan kapsayıcıları kaldırmanız gerekebilir :
docker rm `docker ps --no-trunc -aq`
Bunlar Docker ile bilinen ağrı noktalarıdır ve gelecekteki sürümlerde ele alınabilir. Bununla birlikte, görüntüleri ve kapsayıcıları net bir şekilde anlayarak, bu durumlardan birkaç uygulama ile kaçınılabilir:
- Daima yararsız, durmuş bir kabı çıkarın
docker rm [CONTAINER_ID]
.
- Her zaman ile gereksiz, durmuş bir kabın arkasındaki görüntüyü kaldırın
docker rmi [IMAGE_ID]
.