Ответ
Команды docker create и docker run обе создают контейнер из образа, но отличаются моментом его запуска.
-
docker create: Только создает файловую систему контейнера и подготавливает его к запуску. Контейнер остается в статусеCreatedи не выполняет никаких процессов.# Создаем контейнер, но не запускаем его $ docker create --name my-nginx nginx # Проверяем статус (статус будет "Created") $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c1a2b3c4d5e6 nginx "/docker-entrypoint.…" 5 seconds ago Created my-nginx -
docker run: Это составная команда, которая выполняетdocker createи сразу жеdocker start. Она создает и запускает контейнер.# Создаем и сразу запускаем контейнер в фоновом режиме (-d) $ docker run -d --name my-running-nginx nginx # Проверяем статус (статус будет "Up ...") $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f6e5d4c3b2a1 nginx "/docker-entrypoint.…" 3 seconds ago Up 2 seconds 80/tcp my-running-nginx
Основное правило:
docker run = docker create + docker start
Когда что использовать:
docker create: Если нужно подготовить контейнер (например, подключить к нему сеть, настроить тома) перед тем, как его запустить вручную командойdocker start <container_id>.docker run: В большинстве случаев для немедленного запуска контейнера.
Ответ 18+ 🔞
Давай разберём эту дичь с Docker, как будто я тебе на кухне объясняю, пока чайник кипит.
Представь, что у тебя есть коробка с конструктором — это образ (nginx). Так вот, команда docker create — это когда ты эту коробку принёс, распаковал, все детальки разложил по столу и даже инструкцию прочитал. Но сам конструктор ещё не собрал, он просто лежит, готовый к работе. Контейнер создан, но он спит, как сурок после завтрака. Статус Created, и всё.
# Говорим: "Докер, приготовь мне Nginx, но не трогай!"
$ docker create --name my-nginx nginx
# Смотрим, что получилось — видишь? Создан, но не запущен.
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c1a2b3c4d5e6 nginx "/docker-entrypoint.…" 5 seconds ago Created my-nginx
А теперь команда docker run — это когда ты взял эту же коробку, высыпал детали, собрал по инструкции и тут же нажал кнопку «Пуск». Всё, конструктор ожил, работает, светится и делает, что должен. Контейнер создан и сразу запущен.
# Говорим: "Докер, давай Nginx, и чтобы сразу работал, на фоне!"
$ docker run -d --name my-running-nginx nginx
# Проверяем — о, ёпта, уже бежит!
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f6e5d4c3b2a1 nginx "/docker-entrypoint.…" 3 seconds ago Up 2 seconds 80/tcp my-running-nginx
Короче, правило простое, как три копейки:
docker run — это docker create плюс docker start. Всё, точка.
Когда какую юзать?
docker create— если ты хитрожопый и хочешь всё подготовить заранее: сети там подцепить, тома настроить, конфиги подшаманить, а запустить потом, когда сам захочешь, командойdocker start. Типа отложенный старт.docker run— в 99% случаев, когда тебе нужно просто взять и запустить контейнер прямо сейчас. Не мудри, просто жмиrun.
Вот и вся магия, без ёбаного шаманства. Понял? Если нет — повтори, пока не дойдёт, как до жирафа.