Różnica między uruchomieniem a uruchomieniem kontenera Docker

306

W praktyce na początek pojemnik, robię:

docker run a8asd8f9asdf0

Jeśli tak jest, co:

docker start

zrobić?

W instrukcji jest napisane

Uruchom jeden lub więcej zatrzymanych pojemników

mskw
źródło
101
uruchom = utwórz + uruchom
Fumisky Wells
4
Chciałbym, aby PO również zawierało „wykonanie”
Monica Heddneck,
Może być pomocny: chat.stackoverflow.com/transcript/76919
Shubham
@MonicaHeddneck Jest doker execute?
Koray Tugay,
Użyj start do kontenera, jeśli wcześniej go zatrzymałeś . Używasz polecenia Uruchom do obrazu, jeśli wcześniej usunąłeś kontener tego obrazu. Myślę, że to podstawowe użycie.
CodeSlave,

Odpowiedzi:

349

To bardzo ważne pytanie, a odpowiedź jest bardzo prosta, ale fundamentalna:

  1. Uruchom: utwórz nowy kontener obrazu i uruchom kontener. Możesz utworzyć N klonów tego samego obrazu. Komenda brzmi: docker run IMAGE_ID i nie docker run CONTAINER_ID

wprowadź opis zdjęcia tutaj

  1. Start: Uruchom kontener, który został wcześniej zatrzymany. Na przykład, jeśli zatrzymałeś bazę danych za pomocą polecenia docker stop CONTAINER_ID, możesz ponownie uruchomić ten sam pojemnik za pomocą polecenia docker start CONTAINER_ID, a dane i ustawienia będą takie same.

wprowadź opis zdjęcia tutaj

daniele3004
źródło
1
Czy konieczne jest utworzenie woluminu dla zatrzymanego kontenera, aby dane pozostały?
Logan Phillips
Różnica między Lifecycle @LoganPhillips plików zapisywanych domyślnym kontenera związkowej warstwie systemu plików i plików zapisanych do objętości jest: dane warstwa unia plików kontenera jest zawsze utracone po wyjęciu pojemnika ( docker rm container_id). Z drugiej strony dane woluminów przetrwają usunięcie kontenera, chyba że -vw wierszu poleceń podano wyraźnie opcję. Lokalizacja woluminu w systemie hosta może być bezpośrednio sprawdzona. Zobacz ten artykuł
Stphane
O procesie potrzebujesz & na końcu runwiersza poleceń? Potrzebuję go jako nabożeństwa (24 godziny)
Peter Krauss
Więc jaki jest cel „tworzenia okna dokowanego”? Jak / kiedy miałoby to zostać wykorzystane?
Joseph Gagnon
100
  • runuruchamia obraz
  • starturuchamia pojemnik .

docker runDoc wspomina:

docker runPolecenie najpierw tworzy zapisywalną warstwę kontenera po określonym obrazie, a następnie rozpoczyna się go przy użyciu określonego polecenia.

Oznacza to, że doker prowadzony jest odpowiednikiem API /containers/createpotem /containers/(id)/start.

Nie uruchamiasz istniejącego kontenera, dokujesz do niego exec (od docker 1.3) .
Możesz zrestartować opuszczony kontener .

VonC
źródło
@Tarik, czy nie musisz dodawać -ido docker runinteraktywnego procesu? Chodzi mi o to, że uruchomienie dokera wymaga obrazu do uruchomienia kontenera.
VonC
10
Wydaje się, że jest miejsce dla kogoś, aby napisać bardziej skomplikowaną odpowiedź. Odpowiedź nie wygląda na wyjaśniającą.
kwartał
4
Następnym pytaniem było dla mnie: jaka jest różnica między pojemnikiem a obrazem stackoverflow.com/questions/21498832/...
Alex Punnen
18

Objaśnienie na przykładzie:

Załóżmy, że masz na komputerze obraz gry (ISO).

Po runzamontowaniu obrazu jako dysku wirtualnego tworzony jest dysk wirtualny z całą zawartością gry na dysku wirtualnym, a plik instalacyjny gry jest automatycznie uruchamiany. [Uruchamianie obrazu dokera - tworzenie kontenera, a następnie uruchamianie go.]

Ale kiedy go stop(podobnie jak przystanek dokera), dysk wirtualny nadal istnieje, ale zatrzymuje wszystkie procesy. [Ponieważ kontener istnieje, dopóki nie zostanie usunięty]

A kiedy to zrobisz start (podobnie do startu dokera), z dysku wirtualnego pliki gier zaczną się uruchamiać. [uruchamianie istniejącego kontenera]

W tym przykładzie - Obraz gry jest obrazem Dockera, a dysk wirtualny jest kontenerem.

Apb
źródło
8

Odpowiedź daniele3004 jest już całkiem dobra.

Tylko szybkie i brudne formuła dla ludzi takich jak ja, którzy Mieszanki się runi startod czasu do czasu:

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

Bowen
źródło
2
To nie do końca prawda. Według oficjalnego dokumentu, "...docker run is equivalent to the API /containers/create then /containers/(id)/start.(źródło: docs.docker.com/engine/reference/commandline/run )
sshh
2

runpolecenie tworzy kontener z obrazu, a następnie uruchamia proces rootowania na tym kontenerze. Uruchomienie go z run --rmflagą można by oszczędzić kłopotu z wyjęciem bezużyteczną martwego pojemnik później i pozwoli Ci ignorować istnienie docker starti docker removecałkowicie.

wprowadź opis zdjęcia tutaj

run polecenie wykonuje kilka różnych czynności:

docker run --name dname image_name bash -c "whoami"
  1. Tworzy pojemnik z obrazu. W tym momencie kontener będzie miał identyfikator, może mieć nazwę, jeśli zostanie podany, pojawi się wdocker ps
  2. Uruchamia / wykonuje proces rootowania kontenera. W powyższym kodzie to by się wykonało bash -c "whoami". Jeśli ktoś biegniedocker run --name dname image_name bez polecenia wykonania kontenera, natychmiast przejdzie w stan zatrzymania.
  3. Po zakończeniu procesu rootowania pojemnik jest zatrzymywany. W tym momencie jest to prawie bezużyteczne. Nie można już nic wykonać ani wskrzesić kontenera. Istnieją zasadniczo 2 wyjścia ze stanu zatrzymania: usuń kontener lub utwórz punkt kontrolny (tj. Obraz) z zatrzymanego kontenera, aby uruchomić coś innego. Należy uruchomić docker removeprzed uruchomieniem kontenera o tej samej nazwie.

Jak usunąć pojemnik, gdy zostanie automatycznie zatrzymany? Dodaj--rmflagę dorunpolecenia:

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

Jak wykonać wiele poleceń w jednym kontenerze? Zapobiegając śmierci tego procesu root. Można to zrobić, uruchamiając jakieś bezużyteczne polecenie na początku z--detachedflagą, a następnie używając polecenia „wykonaj”, aby uruchomić rzeczywiste polecenia:

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'"

Dlaczego więc potrzebujemy docker stop? Aby zatrzymać ten trwały kontener, który uruchomiliśmy w poprzednim fragmencie za pomocą niekończącego się poleceniatail -f /dev/null.

y.selivonchyk
źródło