Окна: Как запустить docker VM при загрузке системы

Я нахожусь в ситуации, когда мне нужно запустить docker на сервере сборки под управлением Windows (обычно я работаю с Arch / Debian Linux), и я не могу найти способ заставить виртуальную машину docker автоматически запускаться при загрузке системы. В Linux это была бы служба, но в Windows, похоже, это не так.

Я следовал инструкциям по https://docs.docker.com/engine/installation/windows/ и все запускается, когда я запускаю виртуальную машину docker с помощью $ docker-machine create, но как использовать это как службу Windows или аналогичную?

Цель состоит в том, чтобы иметь возможность использовать образы build Docker, запускать их как контейнеры и запускать тесты e2e против них. Поскольку мы используем TeamCity для создания любых идей о решении этой проблемы с помощью TeamCity, я думаю, это тоже сработает.

Некоторое время назад я написал небольшое веб-приложение, у которого есть системная зависимость, доступная только для систем unix, поэтому docker был естественным выбором (хотя у меня был довольно большой успех с vagrant ..)

Я использую Windows для разработки, а также запускаю это веб-приложение в его контейнере docker.

Итак, я столкнулся с той же проблемой: "как запустить это при загрузке системы"?

В итоге я получил небольшой пакетный файл в моем каталоге автозапуска, содержащий что-то вроде следующих строк:

docker-machine start defaultdocker run -d -p 8080:8080 -v //c/Users/%USERNAME%/somepath:/c/Users/%USERNAME%/somepath my/image --some.webapp.param=some-webapp-param-value

Первый вызов запускает виртуальную машину "по умолчанию", хотя вы должны иметь возможность указать там другую виртуальную машину. Второй вызов запускает контейнер docker "my/image", предоставляя порт 8080 хост-системе и монтируя "somepath" из домашнего каталога моего пользователя. Обязательно укажите параметр "-d", поскольку он запускает контейнер "в фоновом режиме" (проверьте "docker run --help").

После этого к моему веб-приложению можно получить доступ по IP-адресу "виртуальной машины по умолчанию" (в моем случае это было 192.168.99.100, это может отличаться в вашей системе, вы можете проверить вывод при первом запуске этого "терминала быстрого запуска docker", поскольку ip-адрес будет зарегистрирован в консоли.)

При этом я могу использовать свой браузер как обычно, указать его на "http://192.168.99.100:8080" и может работать с моим веб-приложением.

Надеюсь, это поможет =)


редактировать

теперь, когда указанный пакетный файл находится под рукой, у вас есть 3 варианта:

  • поместите пакетный файл в свой каталог автозапуска (требуются интерактивные сеансы пользователя, поэтому, вероятно, не подходит для экземпляров сервера ..)

  • запланируйте выполнение пакетного файла с помощью планировщика задач Windows. там вы можете установить "запуск при запуске компьютера" в качестве триггера для задачи. задача выполняется независимо от того, доступен интерактивный сеанс (пользователь, вошедший в систему..) или нет

  • используйте служебную оболочку, такую как НССМ чтобы установить пакетный файл в качестве службы Windows

Просто небольшое дополнение: когда вы запускаете свои образы docker и хотите, чтобы они запускались при загрузке docker (в данном случае virtualmachine под управлением docker), вы можете использовать опцию --restart always в команде запуска docker. Затем вы можете удалить команду docker run из ваших пакетных файлов. Контейнер должен запуститься автоматически после запуска виртуальной машины.

Я расширил Чарли Карверэто ответ.

С помощью следующего скрипта вы можете указать, какая машина boot2docker запускается. Поскольку папка Docker Toolbox может отсутствовать на вашем пути, и все соответствующие переменные среды могут быть установлены неправильно, я написал несколько инструкций по инициализации.

Поместите этот скрипт в bat-файл и используйте один из вариантов, упомянутых Чарли, чтобы заставить его запускаться во время загрузки.

@echo offREM Set the name of the VM configuration where dockerd will be hostedset BOOT2DOCKER_VM=defaultset PATH=%PATH%;"C:\Program Files\Docker Toolbox\"REM Start the default machine (or any other machine)docker-machine start %BOOT2DOCKER_VM%REM Set the environment variables to use docker-machine and docker commands@FOR /f "tokens=*" %i IN ('docker-machine env --shell cmd %BOOT2DOCKER_VM%') DO @%iREM Start the image detacheddocker run --detach --publish 5000:5000 foo-service

Если вас волнует, что в случае фатальной ошибки внутри контейнер, пожалуйста, используйте опцию --restart в команде docker run.

Вы также можете использовать NSSM (Non-Sucking Service Manager).

Запустите NSSM из командной строки promt или powershell windows с параметром install (nssm.exe установить)

Это запустит графический интерфейс, введет следующие параметры;

  • Путь: [Каталог установки Docker]\Docker\resources\bin\docker-compose.exe
  • Каталог запуска: [Путь к вашему контейнеру docker]
  • Аргументы: любые аргументы, которые вам нужны для вашего контейнера docker (т.Е. вверх)

Наконец, введите имя вашей службы в поле внизу графического интерфейса, после чего вы можете смело протестировать другие параметры на дополнительных вкладках.