Я нахожусь в ситуации, когда мне нужно запустить докер на сервере сборки на базе 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)
Это запустит графический интерфейс, введите следующие данные;
Наконец, введите имя своей службы в поле в нижней части графического интерфейса, после чего вы можете свободно протестировать другие параметры на дополнительных вкладках.