Насколько я понял, 'docker create' создает новый контейнер из изображения, 'docker start' запускает контейнер (применяются условия, при которых контейнер не останавливается снова сразу) и 'docker run 'делает и то, и другое (с некоторыми различиями в деталях, но давайте пока проигнорируем их).
Что я не понимаю, так это когда использовать какой. Позвольте мне объяснить:
Для обычного исполняемого файла я запускаю его, начиная новый процесс. Когда процесс умирает, он исчезает, и я снова запускаю исполняемый файл, создавая новый процесс. Другого пути нет.
Некоторые исполняемые файлы становятся демонами и продолжают работать, поэтому теперь есть три способа: взаимодействовать с работающим демоном, запускать второй или останавливаться и перезапускаться. За очень немногими исключениями запуск второго экземпляра демона бесполезен, и вы обычно взаимодействуете с запущенным экземпляром, перезапуская его только тогда, когда он заблокирован или изменил свою конфигурацию. Итак, еще раз, мне понятно, как использовать такую программу.
Для docker приложений, мне все не так ясно. Конечно, у нас тоже есть демоны и не демоны, но для них обоих не ясно, стоит ли мне их использовать, создав новый контейнер или перезапустив существующий контейнер. Для демонов есть добавленное различие запуска неработающего демона и перезапуска работающего демона, каждый из которых может быть выполнен с существующим или новым контейнером. Кроме того, существует третий класс приложений, помимо fire-and-Forgot и daemons, а именно VM-подобные контейнеры, которые просто имеют файловую систему и оболочку и содержат несколько программ для запуска.
As Насколько мне известно, все это особенно важно, когда приложение хранит данные времени выполнения в файловой системе, которая является частной по отношению к контейнеру, поэтому создание второго контейнера создаст вторую файловую систему, независимую от первой (с важными файлами). возможно распространяться по этим файловым системам).
Из тех приложений, основанных на docker, которые я использовал, ни одно из них, по-видимому, не описало это в своем руководстве, так что, похоже, существуют рекомендации по созданию или повторному использованию контейнеров, но тогда я мог бы не найти ничего об этом на inte rnet либо. Я мог только найти сайты, которые объясняют механику этих команд, но не содержат лучших практик.
Когда я должен создать новый контейнер, и когда я должен перезапустить существующий? Если "это зависит", как вы узнаете?