Docker görüntüsü ile konteyner arasındaki fark nedir?
Docker kullanırken, bir temel imaj ile başlarız. Onu başlatırız, değişiklikler yaparız ve bu değişiklikler başka bir imaj oluşturan katmanlara kaydedilir.
Sonuçta PostgreSQL örneğim için bir imajım ve web uygulamam için bir imajım var ve bunlardaki değişiklikler kalıcı hale getirilmeye devam ediyor.
Konteyner nedir?
802
3
Bir imaj örneğine konteyner denir. Tanımladığınız gibi bir katmanlar kümesi olan bir imajınız var. Bu imajı başlatırsanız, bu imajın çalışan bir konteynerine sahip olursunuz. Aynı imajın çalışan birçok konteynerine sahip olabilirsiniz.
Tüm imajlarınızı
docker images
ile, çalışan konteynerlerinizi isedocker ps
ile görebilirsiniz (ve tüm konteynerleridocker ps -a
ile görebilirsiniz).Yani bir imajın çalışan bir örneği bir konteynerdir.
Docker Dağıtımlarını Otomatikleştirme]1 başlıklı makalemden:
Docker Görüntüleri vs Konteynerler
Dockerland'de images ve containers vardır. İkisi yakından ilişkilidir, ancak farklıdır. Benim için bu ikiliği kavramak Docker'ı son derece netleştirdi.
İmaj nedir?
İmaj, esasen bir konteynerin anlık görüntüsü olan atıl, değişmez bir dosyadır. İmajlar build komutu ile oluşturulur ve run ile başlatıldığında bir konteyner üretirler. Görüntüler registry.hub.docker.com gibi bir Docker kayıt defterinde saklanır. Oldukça büyük olabildikleri için, imajlar diğer imajların katmanlarından oluşacak şekilde tasarlanmıştır ve imajları ağ üzerinden aktarırken minimum miktarda veri gönderilmesine izin verir.
Yerel görüntüler
docker images
çalıştırılarak listelenebilir:Not edilmesi gereken bazı şeyler:__
docker build
komutunun-t
bayrağından veya mevcut bir görüntünündocker tag
lenmesinden gelir. Görüntüleri sizin için anlamlı olan bir isimlendirme kullanarak etiketlemekte özgürsünüz, ancak docker'ın birdocker push' veya
docker pull' işleminde etiketi kayıt yeri olarak kullanacağını bilin.[REGISTRYHOST/][USERNAME/]NAME[:TAG]
şeklindedir. Yukarıdakiubuntu
için, REGISTRYHOSTregistry.hub.docker.com
olarak çıkarılır. Dolayısıyla,my-application
adlı görüntünüzüdocker.example.com
adresindeki bir kayıt defterinde depolamayı planlıyorsanız, bu görüntüyüdocker.example.com/my-application
olarak etiketlemelisiniz.Görüntüler hakkında daha fazla bilgi Docker belgeleri ve sözlük'dan edinilebilir.
Konteyner nedir?
Bir programlama metaforu kullanmak gerekirse, eğer bir görüntü bir sınıfsa, bir konteyner de bir sınıfın örneğidir - bir çalışma zamanı nesnesi. Konteynerler umarım Docker'ı kullanmanızın nedenidir; uygulamaları çalıştırmak için bir ortamın hafif ve taşınabilir kapsülleridir.
Docker ps` ile yerel çalışan konteynerleri görüntüleyin:
Burada docker kayıt defterinin dockerize edilmiş bir versiyonunu çalıştırıyorum, böylece görüntülerimi saklamak için özel bir yerim var. Yine, dikkat edilmesi gereken bazı şeyler var:
sadece _çalışan_ konteynerlerin çıktısını verir. Tüm konteynerleri (_running_ veya _stopped_)
docker ps -a` ile görüntüleyebilirsiniz.--name
bayrağı aracılığıyla başlatılan bir konteyneri tanımlamak için kullanılabilir.Görüntü ve konteyner birikimi nasıl önlenir
Docker ile yaşadığım ilk hayal kırıklıklarından biri, etiketlenmemiş imajların ve durdurulmuş konteynerlerin görünüşte sürekli birikmesiydi. Birkaç kez bu birikim, sabit disklerin maksimuma çıkmasına, dizüstü bilgisayarımın yavaşlamasına veya otomatik derleme hattımın durmasına neden oldu. Konteynerler her yerde" hakkında konuşun!
Etiketlenmemiş tüm görüntüleri
docker rmi
ile sondangling=true
sorgusunu birleştirerek kaldırabiliriz:docker images -q --filter "dangling=true" | xargs docker rmi
Docker, mevcut konteynerlerin arkasındaki görüntüleri kaldıramayacaktır, bu nedenle önce
docker rm
ile durdurulmuş konteynerleri kaldırmanız gerekebilir:Bunlar Docker ile ilgili bilinen sorunlu noktalar ve gelecekteki sürümlerde ele alınabilir. Ancak, imajların ve konteynerlerin net bir şekilde anlaşılmasıyla, bu durumlardan birkaç uygulama ile kaçınılabilir:
docker rm [CONTAINER_ID]
ile kaldırın.docker rmi [IMAGE_ID]
ile işe yaramaz, durdurulmuş bir konteynerin arkasındaki görüntüyü kaldırın.Bir konteyneri çalışan bir imaj olarak düşünmek en basit yol olsa da, bu tam olarak doğru değildir.
Bir resim gerçekten de bir konteynere dönüştürülebilen bir şablondur. Bir imajı konteynere dönüştürmek için Docker motoru imajı alır, üstüne bir okuma-yazma dosya sistemi ekler ve ağ bağlantı noktaları, konteyner adı, kimliği ve kaynak sınırları gibi çeşitli ayarları başlatır. Çalışan bir konteynerin o anda yürütülmekte olan bir süreci vardır, ancak bir konteyner de durdurulabilir (veya Docker terminolojisinde exited). Çıkmış bir konteyner, yeniden başlatılabildiği ve ayarlarını ve tüm dosya sistemi değişikliklerini koruyacağı için bir imajla aynı değildir.