Ao implantar aplicativos em servidores, normalmente há uma separação entre o que o aplicativo agrupa e o que espera da plataforma (sistema operacional e pacotes instalados) a fornecer. Um ponto disso é que a plataforma pode ser atualizada independentemente do aplicativo. Isso é útil, por exemplo, quando as atualizações de segurança precisam ser aplicadas urgentemente aos pacotes fornecidos pela plataforma sem reconstruir o aplicativo inteiro.
Tradicionalmente, as atualizações de segurança são aplicadas simplesmente executando um comando do gerenciador de pacotes para instalar versões atualizadas dos pacotes no sistema operacional (por exemplo, "yum update" no RHEL). Mas com o advento da tecnologia de contêineres, como o Docker, onde as imagens do contêiner agrupam essencialmente o aplicativo e a plataforma, qual é a maneira canônica de manter um sistema com contêineres atualizado? O host e os contêineres têm seus próprios conjuntos de pacotes independentes, que precisam ser atualizados e atualizados no host, não atualizarão nenhum pacote dentro dos contêineres. Com o lançamento do RHEL 7, onde os contêineres do Docker são especialmente apresentados, seria interessante saber qual é a maneira recomendada pela Redhat de lidar com as atualizações de segurança dos contêineres.
Reflexões sobre algumas das opções:
- Permitir que o gerenciador de pacotes atualize pacotes no host não atualizará pacotes dentro dos contêineres.
- Ter que regenerar todas as imagens de contêiner para aplicar atualizações parece interromper a separação entre o aplicativo e a plataforma (a atualização da plataforma requer acesso ao processo de criação do aplicativo que gera as imagens do Docker).
- A execução de comandos manuais em cada um dos contêineres em execução parece complicada e as alterações correm o risco de serem substituídas na próxima vez que os contêineres forem atualizados a partir dos artefatos de liberação do aplicativo.
Portanto, nenhuma dessas abordagens parece satisfatória.
docker pull debian/jessie
atualizar a imagem, reconstruir minhas imagens existentes, interromper os contêineres e executá-los novamente ( com a nova imagem). As imagens que eu construo têm o mesmo nome que as anteriores, então a inicialização é feita através do script. Em seguida, removo imagens "sem nome". Eu certamente apreciaria um melhor fluxo de trabalho.