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:
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.
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.
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.