O próprio Cron pode ser instalado e executado em primeiro plano ( cron -f
), facilitando a instalação em um contêiner. Para acessar outros contêineres, você provavelmente instalaria o docker no mesmo contêiner para o cliente CLI (para não executar o daemon). Em seguida, para acessar o ambiente do docker do host, a solução mais comum é vincular a montagem do soquete do docker ( -v /var/run/docker.sock:/var/run/docker.sock
). A única pegadinha é que você precisa configurar o docker gid dentro de seu contêiner para corresponder ao host gid e, em seguida, adicionar usuários dentro do contêiner ao grupo de encaixe.
Isso significa que esses usuários têm o mesmo acesso de qualquer usuário da janela de encaixe no host, por exemplo, acesso ao nível de raiz, portanto, você precisa confiar totalmente no usuário que os envia ou limitar os comandos que podem ser executados com algum tipo de sudo equivalente. A outra desvantagem é que isso é menos portável, e é pouco provável que os administradores com conhecimento de segurança aprovem a execução de seus contêineres em seus sistemas.
O retorno para a opção B é muito fácil com uma ferramenta como o supervisord. Embora seja menos do que o ideal "um processo por contêiner", não é exatamente um antipadrão, pois mantém todo o contêiner e as dependências juntos e remove quaisquer riscos de segurança para o host.
Se você escolher a primeira ou a segunda opção, o ambiente, quem está enviando os trabalhos, quantos contêineres precisam ter trabalhos enviados, etc. Se for um administrador enviando trabalhos contra vários contêineres, então um O contêiner cron faz sentido. Mas se você for o desenvolvedor de aplicativos que precisa incluir um trabalho agendado com seu aplicativo como um pacote, vá para a segunda opção.