Docker kapsayıcısını Çalıştırma ve Başlatma arasındaki fark


307

Bir konteyner başlatmak için pratikte :

docker run a8asd8f9asdf0

Bu durumda, ne yapar:

docker start

yapmak?

Kılavuzda diyor ki

Bir veya daha fazla durdurulmuş kapsayıcı başlatın


101
run = create + start
Fumisky Wells

4
Keşke OP de 'yürütme' de dahil olsaydı
Monica Heddneck


@MonicaHeddneck Liman işçisi var executemı?
Koray Tugay

Sen kullanmak başlamak daha önce olsaydı, bir kaba durdu bu kabı. Bu görüntünün bir kabını kaldırmış olsaydınız, bir görüntüye koşmayı kullanırsınız . Bence temel kullanım bu.
CodeSlave

Yanıtlar:


350

Bu çok önemli bir soru ve cevap çok basit ama temel:

  1. Çalıştır: görüntünün yeni bir kapsayıcısını oluşturun ve kapsayıcıyı yürütün. Aynı görüntünün N klonunu oluşturabilirsiniz. Komut: docker run IMAGE_ID ve değil docker run CONTAINER_ID

resim açıklamasını buraya girin

  1. Başlat: Önceden durdurulmuş bir kapsayıcıyı başlatın. Örneğin, bir veritabanını komutla durdurduysanız docker stop CONTAINER_ID, aynı kapsayıcıyı komutla yeniden başlatabilirsiniz docker start CONTAINER_IDve veriler ve ayarlar aynı olacaktır.

resim açıklamasını buraya girin


1
Verinin devam etmesi için durdurulan kapsayıcı için bir birim oluşturulması gerekiyor mu?
Logan Phillips

@LoganPhillips Kapsayıcıların varsayılan sendika dosya sistemi katmanına yazılan dosyalar ile birimlere yazılan dosyalar arasındaki yaşam döngüsü farkı : kapsayıcı ( docker rm container_id) kaldırılırken kabın birleşik dosya sistemi katman verileri her zaman kaybolur . Öte yandan, -vkomut satırında seçenek açıkça sağlanmadıkça , birim verileri kapsayıcıyı kaldırır. Ana bilgisayar sistemindeki birim konumu doğrudan denetlenebilir. Bu makaleye bakın
Stphane

İşlem hakkında, komut satırının & sonunda runmı ihtiyacınız var ? Ben bir saygın (24 saat) hizmet olarak ihtiyacım var
Peter Krauss

Peki "docker oluşturma" nın amacı nedir? Bu nasıl / ne zaman kullanılır?
Joseph Gagnon

100
  • runbir görüntü çalıştırır
  • startbir kap başlatır .

docker runDoc söz yapar:

docker runKomut ilk yaratır belirtilen resmin üzerine yazılabilir bir konteyner tabakası ve sonra başlar belirtilen komutunu kullanarak bunu.

Yani liman işçisi olduğu çalışma API eşdeğerdir /containers/createsonra /containers/(id)/start.

Sen buna (docker 1.3 beri) exec liman işçisi, varolan kabı tüketmemek .
Şunları yapabilirsiniz Bir çıkıldı kabı yeniden .


Eklemek gerek yok @Tarik -iiçin docker runinteraktif bir süreç için? Yani, docker run bir konteyner çalıştırmak için bir görüntü gerekir.
VonC

10
Birisine daha ayrıntılı bir yanıt yazması için bir alan var gibi görünüyor. Cevap çok açıklayıcı görünmüyor.
qartal

4
Benim için bir sonraki soru, bir kapsayıcı ve bir görüntü arasındaki fark ne oldu stackoverflow.com/questions/21498832/…
Alex Punnen

18

Bir örnekle açıklama:

Bilgisayarınızda bir oyun (iso) resminizin olduğunu düşünün.

Siz run(görüntünüzü sanal sürücü olarak bağladığınızda), sanal sürücüdeki tüm oyun içeriğiyle bir sanal sürücü oluşturulur ve oyun yükleme dosyası otomatik olarak başlatılır. [Liman işçisi resminizi çalıştırma - bir kapsayıcı oluşturma ve ardından başlatma.]

Ancak siz stop(docker durdurmaya benzer), sanal sürücü hala var ama tüm işlemleri durduruyor. [Kap silinene kadar var olduğundan]

Ve bunu yaptığınızda start(docker başlatmaya benzer şekilde), sanal sürücüden oyun dosyaları yürütülmeye başlar. [mevcut kapsayıcının başlatılması]

Bu örnekte - Oyun görüntüsü Docker görüntünüzdür ve sanal sürücü konteynerinizdir.


8

daniele3004'ün cevabı zaten oldukça iyi.

Sadece bir hızlı ve kirli karıştırır benim gibi insanlar için formül runve startzaman zaman:

docker run [...]= docker pull [...]+docker start [...]


2
Bu tam olarak doğru değil. Resmi dokümana göre, "...docker run is equivalent to the API /containers/create then /containers/(id)/start.(kaynak: docs.docker.com/engine/reference/commandline/run )
sshh

2

runcommand, görüntüden bir kap oluşturur ve bu kapsayıcıda kök işlemini başlatır. run --rmBayrakla çalıştırmak, daha sonra işe yaramaz ölü kabı kaldırma zahmetinden kurtaracak ve varlığını docker startve docker removetamamen göz ardı etmenizi sağlayacaktır .

resim açıklamasını buraya girin

run komut birkaç farklı şey yapar:

docker run --name dname image_name bash -c "whoami"
  1. Görüntüden bir Kapsayıcı oluşturur. Bu noktada kapsayıcı bir kimliğe sahip olacak, bir ad verilirse bir adı olabilir,docker ps
  2. Kabın kök işlemini başlatır / yürütür. Yukarıdaki kodda bu yürütür bash -c "whoami". Biri çalışıyorsa docker run --name dname image_nameçalıştırılacak komut olmadan konteyner hemen durdurulması durumuna girecek.
  3. Kök işlemi tamamlandıktan sonra kap durdurulur. Bu noktada, neredeyse işe yaramaz. Artık hiçbir şey yürütülemez veya konteynırı yeniden dirilemez. Temel olarak durdurulmuş durumdan 2 yol vardır: başka bir şey çalıştırmak için kapsayıcıyı çıkarın veya durdurulmuş kapsayıcıdan bir kontrol noktası (örn. Bir görüntü) oluşturun. docker removeKapsayıcı aynı adla başlatılmadan önce çalıştırılmalıdır .

Kap otomatik olarak durdurulduktan sonra nasıl kaldırılır? Komuta--rmbayrakekleyinrun:

docker run --rm --name dname image_name bash -c "whoami"

Tek bir kapsayıcıda birden çok komut nasıl çalıştırılır? Kök sürecinin ölmesini engelleyerek. Bu,--detachedbayraklabaşlarken işe yaramaz bir komut çalıştırarakve ardından gerçek komutları çalıştırmak için "execute"komutunukullanarak yapılabilir:

docker run --rm -d --name dname image_name tail -f /dev/null
docker exec dname bash -c "whoami"
docker exec dname bash -c "echo 'Nnice'"

O zaman neden ihtiyacımız var docker stop? Sonsuz komutla önceki snippet'te başlattığımız bu kalan konteyneri durdurmak içintail -f /dev/null.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.