2015-02-14 6 views
13

Bir örnek verelim. nginx görüntü için VOLUME talimatDockerfile: anlama SES talimat

şudur:

İşte
VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"] 

sorularım şunlardır:

  1. Eğer konteyner başlatmak bu dizinler benim ana bilgisayarda görünecek? Konteynımı durdurduğumda dizinler kalacak mı? Bu dizinlerin bazı (veya tüm) zaten benim konakta varsa

  2. , ne olacak? Örneğin, görüntü kabın /etc/nginx dizin içinde varsayılan bir yapılandırma dosyası ile gelir diyelim, ben de benim ana bilgisayarda /etc/nginx içinde bir yapılandırma dosyası var. Konteyner başladığında, bu dosyalardan hangisi öncelik kazanacak?

  3. -v /host/dir:container/dir ve VOLUME arasındaki önemli fark nedir?

Referanslar:

cevap

16

Bir kabın hacmi th sadece dizinleri vardır e-host hangi yöntem tarafından yaratıldığına bakılmaksızın. Eğer ana bilgisayardaki bir dizin belirtmezseniz, Docker normalde /var/lib/docker/vfs altında, hacim için yeni bir dizin oluşturacaktır.

$ ID=$(docker run -d -v /data debian echo "Data container") 
$ docker inspect -f {{.Mounts}} $ID 
[{0d7adb21591798357ac1e140735150192903daf3de775105c18149552a26f951 /var/lib/docker/volumes/0d7adb21591798357ac1e140735150192903daf3de775105c18149552a26f951/_data /data local true }] 

Biz Docker /var/lib/docker/volumes/0d7adb21591798357ac1e140735150192903daf3de775105c18149552a26f951/_data de hacmi için bir dizin yarattığını görebilirsiniz:

hacim yaratıldı Ancak

, bunun docker inspect komutunu örn kullanarak ana bilgisayarda olduğu bulmak kolaydır.

Sen/değiştirme ekleme/ana bilgisayardan bu dizinde dosyaları silmek için serbesttir, ancak izinleri için sudo kullanması gerekebilir unutmayın. --rm seçenek docker run verilir Bir kap docker rm -v CONTAINER ile silinirse konteyner
  • çıktığında, herhangi hacimler silinecek

    • herhangi:

      Docker sadece iki koşulda hacim dizinleri siler birimler kaldırılacak.

    Her iki durumda da, yalnızca başka bir kapsayıcı söz konusu değilse, birimler silinecektir. Belirli konakçı dizinleri (-v HOST_DIR:CON_DIR sözdizimi) eşlenen Birimleri Docker tarafından hiçbir zaman silinmez. Ancak, bir birim için kapsayıcıyı kaldırırsanız, adlandırma düzeni, hangi dizinin birimi içerdiğini anlamanız için zor bir süreye sahip olacağınız anlamına gelir.yukarıdaki uyarılar ile

    1. Evet ve evet:

      Yani, özel sorular.

    2. Her Docker hacmi konak dir belirtmeden -v için VOLUME talimat aynıdır konak
    3. üzerinde yeni bir dizin alır başardı. Ana bilgisayar dizini belirtildiğinde, Docker birim için dizin oluşturmaz, görüntüdeki dosyaları kopyalamaz ve birimi silmez (docker rm -v CONTAINER kullanıcı tarafından belirtilen ana makine dizinleriyle eşlenen birimleri silmez). Burada

    fazla bilgi:

    http://container-solutions.com/2014/12/understanding-volumes-docker/

  • +1

    Bravo! Makalenize ek olarak, cpuguy83'ten (Docker'da Geliştirici) [Container42] (http://container42.com/2014/11/03/docker-indepth-volumes/) adresindeki birimler hakkındaki tartışmaları ve çok ayrıntılı tartışmayı buldum. [Mark Lamourine] (http://cloud-mechanic.blogspot.de/2014/10/storage-concepts-in-docker.html) inanılmaz derecede değerli. –

    +0

    İyi cevap, çok yararlı. Sadece docker teftişinin çıktısı, docker 1.8'den sonra değişti. Artık hacim bilgisini '$ docker inspect -f '{{.Config.Volumes}}' $ ID' ve' $ docker inspect -f '{{.Mounts}}' $ ID' – gengmao

    +0

    @gengmao üzerinden bulabilirsiniz. , Teşekkürler. –