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?

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.


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.


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

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.


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” .


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”


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.