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.Respostas:
Uma imagem do Docker agrupa aplicativo e "plataforma", isso está correto. Mas geralmente a imagem é composta de uma imagem base e da aplicação real.
Portanto, a maneira canônica de lidar com as atualizações de segurança é atualizar a imagem base e, em seguida, reconstruir a imagem do aplicativo.
fonte
Os recipientes devem ser leves e intercambiáveis. Se o seu contêiner tiver um problema de segurança, você recriará uma versão do contêiner corrigida e implantará o novo contêiner. (muitos contêineres usam uma imagem base padrão que usa ferramentas de gerenciamento de pacotes padrão, como o apt-get para instalar suas dependências, a reconstrução puxará as atualizações dos repositórios)
Embora você possa remendar dentro de contêineres, isso não vai escalar bem.
fonte
Isso é tratado automaticamente no SUSE Enterprise Linux usando o zypper-docker (1)
SUSE / zypper-docker
Início rápido do Docker
fonte
Antes de tudo, muitas de suas atualizações que você executou no passado simplesmente não estarão no próprio contêiner. O contêiner deve ser um subconjunto pequeno e bastante leve do sistema de arquivos completo que você está acostumado a ver no passado. Os pacotes que você deve atualizar devem ser aqueles que fazem parte do seu DockerFile e, como você possui o DockerFile, deve poder acompanhar os pacotes e IDs de contêiner que precisam de atualizações. A interface do usuário do Cloudstein, que será lançada em breve, controla esses ingredientes do DockerFile para você, para que você possa criar o esquema de atualização mais adequado para seus contêineres. Espero que isto ajude
fonte
geralmente é ainda pior do que as três opções que você forneceu. A maioria das imagens de janela de encaixe não é criada com gerenciadores de pacotes; portanto, você não pode simplesmente fazer um shell na imagem de janela de encaixe e emitir uma atualização. Você precisará reconstruir ou obter novamente a imagem da janela de encaixe.
O fato de que você precisa reconstruir ou está prestando atenção a outras pessoas para reconstruir para patches de segurança não parece razoável na maioria dos casos.
Eu estava pensando em implantar sonarr e radarr em contêineres de docker, mas saber que eles não receberão as atualizações de segurança regulares que meu contêiner recebe é uma quebra de negócio. O gerenciamento de atualizações de segurança para meu contêiner é bastante complicado, sem que seja necessário, de alguma forma, aplicar manualmente as atualizações de segurança a cada imagem do docker individualmente.
fonte