Docker run vs create


93

У чому різниця між командами docker runта docker createкомандами?

Я зазвичай використовую, runале іноді в документації, яку бачу create.

Докер --helpрозповідає

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

Чи означає це, що runвикористовується, коли нам потрібно передати команду в новий контейнер? Яка мета createтоді?

Відповіді:


105

З документації докера

Команда docker create створює записний контейнерний шар над вказаним зображенням і готує його до запуску зазначеної команди. Потім ідентифікатор контейнера друкується на STDOUT. Це схоже на docker run -d, за винятком того, що контейнер ніколи не запускається . Потім ви можете використовувати команду запуску докера, щоб запустити контейнер у будь-який момент.

Це корисно , коли ви хочете створити контейнер конфігурації попереду часу , так що він готовий почати , коли вам це потрібно. Створюється початковий статус нового контейнера.


2
Підкреслюючи схожість, --run приймає ВСІ ті самі аргументи, що й --create (з додаванням просто --detach, --detach-ключів та --sig-proxy), див. Docs.docker.com/v17.09 / engine / reference / commandline / run /…
Марвін,

117

Технічно docker run= docker create+ docker start.


42
Власне, і я просто витратив пару годин, навчаючись цьому, docker run= docker create+ docker start+ docker attach. Без attachцього запущений контейнер працює у фоновому режимі
webbower

19

1
У написав "docker run створює контейнер (те саме, що docker create) і запускає його". <--- кругове визначення, і ви не встановили різницю між exec та start і тим, що ви називаєте "запускає". (І коли ви говорите "запустити", якщо ми подивимося на ваше визначення "запустити в докер-прогоні", це означає створити і запустити, тож у вас вийде нескінченне число .. так, мабуть, ви маєте на увазі щось менше, ніж це, коли ви говорите "запускає" .. але тоді слід відрізняти "запускає" від exec та start, ви маєте на увазі start і exec або просто start). Можливо, -d означає не запускати exec. а без -d - це start і exec
barlop

8

Інші відповіді це охоплюють, але я думав, що покажу еквівалентні командні рядки оболонки, оскільки це робить насправді зрозумілим:

$ docker run myimage

це те саме, що

$ docker start -a $(docker create myimage)

Тут docker createвикористовується для створення контейнера з названого зображення та видає створений ідентифікатор контейнера та docker startвикористовується для запуску контейнера з цим ідентифікатором. Ця -aопція змушує термінал приєднуватися так, щоб контейнер працював на передньому плані, що є поведінкою за замовчуванням docker run.

Створений, але ніколи не запущений контейнер матиме Createdстатус; це можна побачити за допомогою docker container ls -a.


6

Я новачок у докері, і я просто пограв із ним;

Я вважаю, що запуск docker по суті робить наступне: (у порядку ..) docker create , docker start , docker attach , оскільки він негайно приєднується до активної оболонки після того, як ви виконаєте команду 'run' .


1
Просто опублікував вище коментар щодо цього, перш ніж я помітив вашу відповідь. Я би хотів, щоб бачив це годину або близько того.
webbower

-3

Запуск Docker в основному призначений для запуску команд у контейнері.

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

Вищезазначене для створення терміналу bash. І змусимо нас використовувати команди bash у контейнері.

Docker create - це створення контейнера із зображення Docker.

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

Вищезазначене полягає у створенні докера контейнера з назвою "docker-ubuntu" із образу "ubuntu"


1
Ви можете обійтися, docker run -it <Container name>не виконуючи тоді / bin / bash. Наприклад, рубін автоматично запустить виконуваний файл з назвою irb. Крім того, ви можете виконати run -d, це зроблено з dockersamples / static-site, який не входить в систему. Тому я думаю, що це не виконує exec, а просто запускає його.
Барлоп

за допомогою 'docker run' ви можете запустити, якщо контейнер вже створений, і створити, а потім запустити, якщо ні
Сергій Гетман
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.