На практиці для запуску контейнера я роблю:
docker run a8asd8f9asdf0
Якщо це так, то що:
docker start
робити?
У посібнику сказано
Запустіть один або кілька зупинених контейнерів
execute
?
На практиці для запуску контейнера я роблю:
docker run a8asd8f9asdf0
Якщо це так, то що:
docker start
робити?
У посібнику сказано
Запустіть один або кілька зупинених контейнерів
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 run
Команда першим створює записується контейнер шар над зазначеним зображенням, і потім запускає його з допомогою зазначеної команди.Тобто запуск докера еквівалентний API
/containers/create
тоді/containers/(id)/start
.
Ви не запускаєте існуючий контейнер, ви докеріть його до нього (оскільки докер 1.3) .
Ви можете перезапустити контейнер, що вийшов .
-i
до docker run
інтерактивного процесу? Я маю на увазі, для запуску докера потрібне зображення для запуску контейнера.
Пояснення з прикладом:
Подумайте, що у вас на комп’ютері є ігрове (ізо) зображення.
Коли ви run
(монтуєте зображення як віртуальний привід), створюється віртуальний привід зі всім вмістом гри у віртуальному накопичувачі та автоматично встановлюється інсталяційний файл гри. [Запуск зображення докера - створення контейнера, а потім його запуск.]
Але коли ви stop
(як і докер зупиняєте) це, віртуальний диск все ще існує, але зупиняє всі процеси. [Оскільки контейнер існує, поки він не буде видалений]
А коли ви це робите start
(подібно до запуску докера), з віртуального диска файли ігор починають його виконання. [запуск існуючого контейнера]
У цьому прикладі - Ігровий образ - це ваше зображення 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 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 run --rm -d --name dname image_name tail -f /dev/null
docker exec dname bash -c "whoami"
docker exec dname bash -c "echo 'Nnice'"
Навіщо нам це потрібно docker stop
? Щоб зупинити цей затяжний контейнер, який ми запустили в попередньому фрагменті за допомогою нескінченної командиtail -f /dev/null
.