Назад | Перейти на главную страницу

Windows: как запустить загрузку системы docker VM att

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

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

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

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

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

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

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

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

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

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

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

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


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

Теперь с указанным пакетным файлом есть 3 варианта:

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

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

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

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

Я продлил Чарли Карверответ.

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

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

@echo off

REM Set the name of the VM configuration where dockerd will be hosted
set BOOT2DOCKER_VM=default

set 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 @%i

REM Start the image detached
docker run --detach --publish 5000:5000 foo-service

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

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

Запустите NSSM из командной строки или Windows PowerShell с параметром установки (установка nssm.exe)

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

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

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