Como faço para iniciar automaticamente os contêineres do docker na inicialização do sistema?

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 aplicativos da web. Mas isso não parece a coisa certa para Docker.

Aparentemente, o método atual para iniciar automaticamente os contêineres Docker (da Docker 1.2) é usar reiniciar Políticas. Isso controlará como o Docker deve lidar com a inicialização do contêiner na inicialização e a reinicialização do contêiner quando ele sair. Eu usei a opção' Sempre ' até agora e posso confirmar que ela faz o Docker iniciar automaticamente o contêiner na inicialização do sistema:

sudo docker run --restart=always -d myimage

Trecho Da Documentação

Políticas de reinicialização usando o sinalizador -- restart no Docker run você pode especificar uma política de reinicialização para saber como um contêiner deve ou não ser reiniciado na saída.

Não-Não reinicie o contêiner quando ele sair.

on-failure-reinicie o contêiner somente se ele sair com um status de saída diferente de zero.

sempre-sempre reinicie o contêiner, independentemente do status de saída.

Você também pode especificar a quantidade máxima de vezes que o Docker tentará reiniciar o contêiner ao usar a Política on-failure. O padrão é que o Docker tentará para sempre reiniciar o contêiner.

$ sudo docker run --restart=always redis

Isso executará o contêiner redis com uma política de reinicialização de always para que, se o contêiner sair, o Docker o reinicie.

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

Isso executará o contêiner redis com uma política de reinicialização de falha e uma contagem máxima de reinicialização de 10. Se o contêiner redis sair com um status de saída diferente de zero mais de 10 vezes seguidas, o Docker interromperá a tentativa de reiniciar o contêiner. Fornecer um limite máximo de reinicialização só é válido para a Política de falha.

Docker tem pagina isso explica como fazer isso com upstart e systemd. Concordo que não parece a coisa certa para Docker. Sua solução é executar docker start, que assume que você já criou seu contêiner. Eu acho que você faria docker run --rm no script inicial (tratando - o como um novo processo e contêiner de uma imagem) ou apenas deixe o daemon do docker reiniciar os próprios contêineres na inicialização (como será por padrão se você não fizer mais nada). O Upstart tem a vantagem de permitir o início/parada fácil dos processos, mas você também obtém isso com o Start/stop 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 inicial funcione.

Mas isso não parece a coisa certa para Docker.

Porque não?

Eu uso supervisord para isso com grande sucesso.

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