На практиці для запуску контейнера я роблю:
docker run a8asd8f9asdf0
Якщо це так, то що:
docker start
робити?
У посібнику сказано
Запустіть один або кілька зупинених контейнерів
execute?
На практиці для запуску контейнера я роблю:
docker run a8asd8f9asdf0
Якщо це так, то що:
docker start
робити?
У посібнику сказано
Запустіть один або кілька зупинених контейнерів
execute?
Відповіді:
Це дуже важливе питання, і відповідь дуже проста, але принципова:
docker run IMAGE_ID а ні docker run CONTAINER_IDdocker 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 psbash -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.