Windows: como iniciar a inicialização do sistema docker VM att

Estou em uma situação em que preciso executar o docker em um servidor de compilação baseado no windows (normalmente estou trabalhando com Arch/Debian Linux) e não consigo encontrar uma maneira de ter a VM do docker para iniciar automaticamente na inicialização do sistema. No Linux, seria um serviço, mas no windows isso não parece ser o caso.

Eu segui as instruções sobre https://docs.docker.com/engine/installation/windows/ e tudo é executado quando eu inicio a VM do docker com $ docker-machine create, mas como ter isso como um serviço do Windows ou similar?

O objetivo é poder usar imagens do Docker de construção, começar como contêineres e executar testes e2e contra eles. Como estamos usando o TeamCity para criar ideias sobre como resolver isso com o TeamCity também funcionaria, acho.

Eu escrevi um pequeno webapp há algum tempo que tem uma dependência do sistema que está disponível apenas para sistemas unix, então o docker foi a escolha natural (embora eu tenha tido algum sucesso com o vagrant ..)

Estou usando o windows para desenvolvimento e também executando este webapp em seu contêiner docker.

Então me deparei com o mesmo problema, "como iniciar isso na inicialização do sistema"?

Acabei com um pequeno arquivo em lote no meu diretório de inicialização automática contendo algo como as seguintes linhas:

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

A primeira chamada inicia a máquina virtual "padrão", embora você possa especificar uma vm diferente lá. A segunda chamada executa o contêiner docker "my / image", expondo a porta 8080 ao sistema host e montando" somepath " no diretório inicial do meu usuário. Certifique-se de especificar o parâmetro "- d", pois ele executa o contêiner " em segundo plano "(verifique "docker run --help")

Depois disso, meu webapp pode ser acessado no endereço ip da " VM padrão "(no meu caso, que foi 192.168.99.100, isso pode diferir em seu sistema, você pode verificar a saída ao iniciar este" docker quickstart terminal", pois o endereço ip será registrado no console.)

Com isso eu sou capaz de usar meu navegador como de costume, apontá-lo para "http://192.168.99.100:8080"e pode trabalhar com meu webapp.

Espero que ajude =)


editar

com o referido arquivo de lote agora em mãos, um tem 3 opções:

  • coloque o arquivo em lote em seu diretório de inicialização automática (requer sessões de usuário interativas, portanto, provavelmente não é adequado para instâncias de servidor..)

  • agende a execução do arquivo em lote por meio do Agendador de tarefas do windows. lá você pode definir "executar na inicialização do computador" como um gatilho para a tarefa. a tarefa é executada independentemente de uma sessão interativa (um usuário conectado..) estar disponível ou não

  • use um wrapper de serviço como NSSM para instalar o arquivo em lote como um serviço do windows

Apenas um pequeno addon: quando você inicia suas imagens do docker e deseja que elas comecem na inicialização do docker (neste caso, o virtualmachine executando o docker), você pode usar a opção --restart always no comando docker run. Em seguida, você pode remover o comando docker run de seus arquivos em lote. O contêiner deve ser iniciado automaticamente após o início da vm.

Eu tenho estendido Charlie Carvera resposta.

Com o seguinte script, você pode especificar qual inicialização da máquina boot2docker. Como a pasta Docker Toolbox pode não estar em seu caminho e todas as variáveis ambientais adequadas podem não estar definidas, escrevi algumas instruções de inicialização.

Coloque este script em um arquivo bat e use uma das opções citadas por Charlie para fazê-lo funcionar no momento da inicialização.

@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

Se você se importa com isso em caso de erro fatal dentro o contêiner, use a opção -- restart no comando docker run.

Você também pode usar o Nssm (Gerenciador de serviços sem sucção)

Inicie o NSSM a partir de um comando promt ou powershell windows com o param de instalação (nssm.instalação exe)

Isso iniciará GUI, eneter os seguintes detials;

  • Caminho: [Docker Install DIR]\Docker\resources\bin\docker-compose.exe
  • Diretório de inicialização: [caminho para o contêiner do docker]
  • Argumentos: quaisquer argumentos necessários para o contêiner do docker (ou seja, para cima)

Finalmente digite o nome do serviço na caixa na parte inferior da GUI, você pode então sentir-se livre para testar com as outras opções nas guias adicionais.