Вы используете start для контейнера, если вы ранее остановили этот контейнер. Вы используете run to image, если вы ранее удалили контейнер этого изображения. Это основное использование, я думаю.
CodeSlave
Ответы:
351
Это очень важный вопрос, и ответ очень простой, но фундаментальный:
Выполнить: создать новый контейнер изображения и выполнить контейнер. Вы можете создать N клонов одного изображения. Команда есть:
docker run IMAGE_IDа неdocker run CONTAINER_ID
Начало: запуск контейнера, ранее остановленного. Например, если вы остановили базу данных с помощью команды docker stop CONTAINER_ID, вы можете перезапустить тот же контейнер с помощью команды docker start CONTAINER_ID, и данные и параметры будут такими же.
Нужно ли создавать том для остановленного контейнера, чтобы данные сохранялись?
Логан Филлипс
@LoganPhillips Разница в жизненном цикле между файлами, записанными в слой файловой системы объединения по умолчанию контейнера и файлами, записанными в тома: данные слоя файловой системы объединения контейнера всегда теряются при удалении контейнера ( docker rm container_id). С другой стороны, данные томов переживают удаление контейнера, если -vв командной строке явно не указан параметр. Расположение тома в хост-системе может быть проверено напрямую. Смотрите эту статью
Stphane
О процессе, нужно & в конце runкомандной строки? Я нуждаюсь в этом в качестве местной службы (24 часа)
Питер Краусс
Итак, какова цель «создания докера»? Как / когда это будет использовано?
Предположим, у вас есть изображение игры (iso) на вашем компьютере.
Когда вы run(монтируете свой образ как виртуальный диск), создается виртуальный диск со всем содержимым игры на виртуальном диске, и автоматически запускается установочный файл игры. [Запуск вашего образа докера - создание контейнера и его запуск.]
Но когда вы stop(по аналогии с остановкой Docker), виртуальный диск все еще существует, но останавливает все процессы. [Поскольку контейнер существует до тех пор, пока он не будет удален]
И когда вы делаете start (аналогично запуску Docker), с виртуального диска запускаются файлы игр. [запуск существующего контейнера]
В этом примере - образ игры - это ваш образ Docker, а виртуальный диск - ваш контейнер.
Это не совсем так. Согласно официальному документу, "...docker run is equivalent to the API /containers/create then /containers/(id)/start.(источник: docs.docker.com/engine/reference/commandline/run )
СГО
2
runКоманда создает контейнер из образа и затем запускает корневой процесс для этого контейнера. Запуск его с run --rmфлагом избавит вас от необходимости удалять ненужный мертвый контейнер после этого и позволит вам игнорировать существование docker startи docker removeвообще.
run Команда делает несколько разных вещей:
docker run --name dname image_name bash -c "whoami"
Создает контейнер из изображения. В этот момент контейнер будет иметь идентификатор, может иметь имя, если оно задано, будет отображаться вdocker ps
Запускает / выполняет корневой процесс контейнера. В приведенном выше коде это будет выполняться bash -c "whoami". Если запустить docker run --name dname image_nameбез команды на выполнение, контейнер немедленно перейдет в остановленное состояние.
После завершения корневого процесса контейнер останавливается. На данный момент, это в значительной степени бесполезно. Никто больше не может выполнить или воскресить контейнер. В основном есть два выхода из остановленного состояния: удалить контейнер или создать контрольную точку (то есть изображение) из остановленного контейнера, чтобы запустить что-то еще. Нужно запустить docker removeперед запуском контейнера под тем же именем.
Как удалить контейнер, если он автоматически остановлен? Добавьте--rmфлаг вrunкоманду:
docker run --rm --name dname image_name bash -c "whoami"
Как выполнить несколько команд в одном контейнере? Предотвращая отмирание этого корневого процесса. Это можно сделать, запустив какую-то бесполезную команду при запуске с--detachedфлагом, а затем используя «execute» для запуска реальных команд:
Зачем нам docker stopтогда? Чтобы остановить этот затяжной контейнер, который мы запустили в предыдущем фрагменте с помощью бесконечной командыtail -f /dev/null.
execute
?Ответы:
Это очень важный вопрос, и ответ очень простой, но фундаментальный:
docker run IMAGE_ID
а неdocker run CONTAINER_ID
docker stop CONTAINER_ID
, вы можете перезапустить тот же контейнер с помощью командыdocker start CONTAINER_ID
, и данные и параметры будут такими же.источник
docker rm container_id
). С другой стороны, данные томов переживают удаление контейнера, если-v
в командной строке явно не указан параметр. Расположение тома в хост-системе может быть проверено напрямую. Смотрите эту статью&
в концеrun
командной строки? Я нуждаюсь в этом в качестве местной службы (24 часа)run
запускает изображениеstart
запускает контейнер .docker run
Документ упоминает:Вы не запускаете существующий контейнер, вы исполняете его с помощью docker (начиная с docker 1.3) .
Вы можете перезапустить покинутый контейнер .
источник
-i
кdocker run
для интерактивного процесса? Я имею в виду, что для запуска Docker необходим образ для запуска контейнера.Пояснение с примером:
Предположим, у вас есть изображение игры (iso) на вашем компьютере.
Когда вы
run
(монтируете свой образ как виртуальный диск), создается виртуальный диск со всем содержимым игры на виртуальном диске, и автоматически запускается установочный файл игры. [Запуск вашего образа докера - создание контейнера и его запуск.]Но когда вы
stop
(по аналогии с остановкой Docker), виртуальный диск все еще существует, но останавливает все процессы. [Поскольку контейнер существует до тех пор, пока он не будет удален]И когда вы делаете
start
(аналогично запуску Docker), с виртуального диска запускаются файлы игр. [запуск существующего контейнера]В этом примере - образ игры - это ваш образ Docker, а виртуальный диск - ваш контейнер.
источник
Ответ daniele3004 уже довольно хорош.
Просто быстрая и грязная формула для таких людей , как я , кто путает
run
иstart
время от времени:docker run [...]
=docker pull [...]
+docker start [...]
источник
"...docker run is equivalent to the API /containers/create then /containers/(id)/start.
(источник: docs.docker.com/engine/reference/commandline/run )run
Команда создает контейнер из образа и затем запускает корневой процесс для этого контейнера. Запуск его сrun --rm
флагом избавит вас от необходимости удалять ненужный мертвый контейнер после этого и позволит вам игнорировать существованиеdocker start
иdocker remove
вообще.run
Команда делает несколько разных вещей:docker ps
bash -c "whoami"
. Если запуститьdocker run --name dname image_name
без команды на выполнение, контейнер немедленно перейдет в остановленное состояние.docker remove
перед запуском контейнера под тем же именем.Как удалить контейнер, если он автоматически остановлен? Добавьте
--rm
флаг вrun
команду:Как выполнить несколько команд в одном контейнере? Предотвращая отмирание этого корневого процесса. Это можно сделать, запустив какую-то бесполезную команду при запуске с
--detached
флагом, а затем используя «execute» для запуска реальных команд:Зачем нам
docker stop
тогда? Чтобы остановить этот затяжной контейнер, который мы запустили в предыдущем фрагменте с помощью бесконечной командыtail -f /dev/null
.источник