Docker Run vs Create

93

Jaka jest różnica między poleceniami docker runi docker create?

Zwykle używam, runale czasami widzę w dokumentacji create.

Docker --helpopowiada

create    Create a new container
run       Run a command in a new container

Czy to oznacza, że runjest używany, gdy musimy przekazać polecenie do nowego kontenera? Jaki jest zatem cel create?

Fred Mériot
źródło

Odpowiedzi:

105

Z dokumentacji dockera

Polecenie docker create tworzy zapisywalną warstwę kontenera na określonym obrazie i przygotowuje go do uruchomienia określonego polecenia. Identyfikator kontenera jest następnie drukowany do STDOUT. Jest to podobne do docker run -d, z wyjątkiem tego, że kontener nigdy nie jest uruchamiany . Następnie możesz użyć polecenia docker start, aby uruchomić kontener w dowolnym momencie.

Jest to przydatne, gdy chcesz założyć pojemnik konfigurację do przodu od czasu tak, że jest gotowy, aby rozpocząć, gdy jest to potrzebne. Zostaje utworzony początkowy status nowego kontenera.

DAXaholic
źródło
2
Podkreślając podobieństwo, --run akceptuje WSZYSTKIE te same argumenty co --create (z dodatkiem tylko --detach, --detach-keys i --sig-proxy), patrz docs.docker.com/v17.09 / engine / reference / commandline / run /…
Marvin
117

Technicznie, docker run= docker create+ docker start.

sriram926
źródło
42
Właściwie, spędziłem kilka godzin, ucząc się tego docker run= docker create+ docker start+ docker attach. Bez attach, uruchomiony kontener działa w tle
webbower
19

docker createpolecenie tworzy zapisywalny kontener z obrazu i przygotowuje go do uruchomienia .

docker runpolecenie tworzy kontener (tak samo jak docker create) i uruchamia go .

NetworkMeister
źródło
1
U napisał: „docker run tworzy kontener (tak samo jak docker create) i uruchamia go”. <--- cykliczna definicja, a nie ustaliłeś różnicy między exec i start, a tym, co nazywasz „uruchamia to”. (A kiedy powiesz "uruchamia to", jeśli spojrzymy na twoją definicję uruchamiania w trybie docker run, oznacza to tworzenie i uruchamianie, więc otrzymasz nieskończoną liczbę ... więc prawdopodobnie masz na myśli coś mniejszego, kiedy mówisz "uruchamia to" ... ale wtedy powinieneś odróżnić "uruchamia to" od exec i start, czy masz na myśli start i exec czy po prostu start). Być może -d oznacza brak exec. a bez -d to start, a exec
barlop
8

Inne odpowiedzi obejmują to, ale pomyślałem, że pokażę równoważne wiersze poleceń powłoki, ponieważ wyjaśnia to naprawdę:

$ docker run myimage

jest taki sam jak

$ docker start -a $(docker create myimage)

W tym przypadku docker createsłuży do tworzenia kontenera z nazwanego obrazu i wyprowadza utworzony identyfikator kontenera i docker startjest używany do uruchamiania kontenera z tym identyfikatorem. Ta -aopcja powoduje dołączenie terminala, tak aby kontener działał na pierwszym planie, co jest domyślnym zachowaniem docker run.

Kontener, który został utworzony, ale nigdy nie został uruchomiony, będzie miał Createdstatus; można to zobaczyć z docker container ls -a.

starfry
źródło
6

Jestem nowy w dockerze i właśnie zacząłem się nim bawić;

Uważam, że docker run zasadniczo wykonuje następujące czynności: (w kolejności ...) docker create , docker start , docker attach , ponieważ natychmiast dołącza się do aktywnej powłoki po wykonaniu polecenia „run” .

aaronlhe
źródło
1
Właśnie opublikowałem powyższy komentarz na ten temat, zanim zauważyłem twoją odpowiedź. Żałuję, że nie widziałem tego godzinę temu.
webbower
-3

Uruchomienie Dockera służy głównie do uruchamiania poleceń w kontenerze.

docker run -it <Container Name> /bin/bash

Powyższe służy do tworzenia terminala bash. I każ nam używać poleceń bash w kontenerze.

Tworzenie platformy Docker polega na utworzeniu kontenera z obrazu platformy Docker.

docker create -d /var/lib:/var/lib --name docker-ubuntu ubuntu

Powyższe ma na celu utworzenie dockera kontenera o nazwie „docker-ubuntu” z obrazu „ubuntu”

Venkat Sudharsanam
źródło
1
Możesz obejść się docker run -it <Container name>bez wykonywania / bin / bash. Na przykład ruby ​​automatycznie uruchomi plik wykonywalny o nazwie irb. Możesz również uruchomić -d, co jest zrobione z dockersamples / static-site, które się nie logują. Więc myślę, że nie wykonuje, ale po prostu go uruchamia.
barlop
z 'docker run' możesz uruchomić, jeśli kontener jest już utworzony i utworzyć, a następnie uruchomić, jeśli nie
Sergii Getman