Como eu inicio automaticamente contêineres docker na inicialização do sistema?

102

Qual é uma boa maneira de iniciar automaticamente os contêineres do Docker quando o sistema é inicializado?

Existe uma maneira preferida de fazer isso no Ubuntu 14.04?

Eu usei supervisord no passado para iniciar automaticamente os aplicativos da web. Mas isso não parece ser a coisa certa para o Docker.

    
por Stefan Arentz 02.10.2014 / 16:25

3 respostas

123

Aparentemente, o método atual de iniciar automaticamente os contêineres do Docker ( do Docker 1.2 ) é usar reiniciar as políticas . Isso controlará como o Docker deve manipular a inicialização do contêiner na inicialização e reinicialização do contêiner quando ele sair. Eu usei a opção 'always' até agora e posso confirmar que o Docker inicia automaticamente o contêiner na inicialização do sistema:

sudo docker run --restart=always -d myimage

Trecho de Documentação

Restart Policies Using the --restart flag on Docker run you can specify a restart policy for how a container should or should not be restarted on exit.

no - Do not restart the container when it exits.

on-failure - Restart the container only if it exits with a non zero exit status.

always - Always restart the container regardless of the exit status.

You can also specify the maximum amount of times Docker will try to restart the container when using the on-failure policy. The default is that Docker will try forever to restart the container.

$ sudo docker run --restart=always redis

This will run the redis container with a restart policy of always so that if the container exits, Docker will restart it.

$ sudo docker run --restart=on-failure:10 redis

This will run the redis container with a restart policy of on-failure and a maximum restart count of 10. If the redis container exits with a non-zero exit status more than 10 times in a row Docker will abort trying to restart the container. Providing a maximum restart limit is only valid for the on-failure policy.

    
por 07.12.2014 / 21:18
7

O Docker tem esta página que explica como fazer isso com o upstart e o systemd. Concordo que não parece ser a coisa certa para o Docker. Sua solução é executar docker start , o que pressupõe que você já tenha criado seu contêiner. Eu acho que você faria ou docker run --rm no script upstart (tratando-o como um novo processo e recipiente de uma imagem) ou apenas deixar o daemon do docker reiniciar os próprios containers na inicialização (como ele será por padrão se você fazer mais nada). O Upstart tem a vantagem de permitir fácil inicialização / parada de processos, mas você também consegue isso com o início / parada do docker!

Acho estranho forçar o usuário a criar manualmente um contêiner (com todas as ligações de porta / volume corretas) antes que o script iniciante funcione.

    
por 14.10.2014 / 06:49
4

But that doesn't feel like the right thing for Docker.

Por que não?

Eu uso o supervisord para isso com grande sucesso.

Use o que você sabe, use o que funciona, use algo que você possa facilmente manter e entender.

    
por 02.10.2014 / 16:27