¿Cuál es una buena manera de iniciar automáticamente los contenedores docker cuando el sistema arranca?
¿Hay alguna forma preferida de hacerlo en Ubuntu 14.04?
He utilizado supervisord
en el pasado para iniciar automáticamente aplicaciones web. Pero eso no se siente como lo correcto para Docker.
Aparentemente, el método actual para auto-iniciar contenedores Docker (desde Docker 1.2) es usar restart policies. Esto controlará cómo Docker debe manejar el inicio del contenedor al arrancar y el reinicio del contenedor cuando sale. He utilizado la opción "always" hasta ahora, y puedo confirmar que hace que Docker auto-inicie el contenedor en el arranque del sistema:
sudo docker run --restart=always -d myimage
Políticas de reinicio Usando la opción --restart en la ejecución de Docker puedes
especificar una política de reinicio sobre cómo un contenedor debe o no ser reiniciado al salir.
no - No reiniciar el contenedor cuando sale. > on-failure - Reinicia el contenedor sólo si sale con un estado de salida distinto de cero. estado de salida. > always - Reinicia siempre el contenedor independientemente del estado de salida.
También puede especificar la cantidad máxima de veces que Docker intentará reiniciar el contenedor cuando utilice la política on-failure. El valor por defecto es que Docker intentará siempre reiniciar el contenedor.
$ sudo docker run --restart=always redis Esto ejecutará el contenedor redis con una política de reinicio de siempre de modo que si el contenedor sale, Docker lo reiniciará. > $ sudo docker run --restart=on-failure:10 redis Esto ejecutará el contenedor redis con una política de reinicio de on-failure y un número máximo de reinicios de máximo de 10 reinicios. Si el contenedor redis sale con un estado exit más de 10 veces seguidas, Docker abortará el intento de reiniciar el contenedor. el contenedor. Proporcionar un límite máximo de reinicio sólo es válido para la opción política on-failure.
Docker tiene esta página que explica cómo hacerlo con upstart y systemd. Estoy de acuerdo en que no parece lo más adecuado para Docker. Su solución es ejecutar docker start
, que asume que ya has creado tu contenedor. Yo pensaría que o bien ejecutas docker run --rm
en el script upstart (tratándolo como un nuevo proceso y contenedor a partir de una imagen) o simplemente dejas que el demonio docker reinicie los contenedores por sí mismo en el arranque (como lo hará por defecto si no haces nada más). Upstart tiene la ventaja de permitir un arranque/parada fácil de los procesos, ¡pero eso también se consigue con el arranque/parada de docker!
Creo que es raro forzar al usuario a crear manualmente un contenedor (con todos los puertos/volúmenes correctos) antes de que el script upstart funcione.