Atualizações de aplicativos dentro de contêineres do Docker?

9

Normalmente, em um servidor, as atualizações automáticas de patches relacionados à segurança são configuradas. Portanto, se eu estiver executando o MySQL 5.5 e for lançado um novo patch de segurança, o Ubuntu Server aplicará a atualização e reiniciará o MySQL para me manter protegido de forma automatizada. Obviamente, isso pode ser desativado, mas é útil para aqueles que são um pouco preguiçosos;)

Esse conceito existe dentro de um contêiner do Docker? Se eu estiver executando o MySQL em um contêiner Docker, preciso parar constantemente o contêiner, abrir um shell nele, atualizar e atualizar o MySQL?

Naftuli Kay
fonte
Esta é a pergunta do Docker, e não da LXC. Como os contêineres LXC são apenas outra distribuição linux em execução no mesmo kernel, você usaria os mesmos comandos para atualizar o sistema de contêineres LXC.
phoops 5/05

Respostas:

13

Eu discordo da resposta aceita. Primeiro, você deve projetar seus contêineres com a separação de estado em mente (no caso do MySQL, isso significa que pelo menos /var/lib/mysqlentra em seu próprio volume ). Em segundo lugar, você deve determinar uma estratégia para atualizações; o estado da arte seria criar imagens com versão para cada conjunto de atualização de pacotes apt e testá-las antes de trocar o volume de dados do contêiner em execução para o novo. Isso pode incluir um tempo de inatividade ou nenhum tempo de inatividade, se você usar algo como hipache .

Essa configuração, embora seja mais cara para a configuração inicial, é a mesma usada pelas empresas com uma escala massiva de contêineres e será mais barata de manter ao longo do tempo.

Além disso, as atualizações de pacotes podem eventualmente quebrar seus contêineres em execução, portanto, aplicá-los a contêineres em execução não é uma prática recomendada - pois não é para executar software desatualizado.

Deim0s
fonte
+1 é a melhor prática. armazenar dados em um contêiner de servidor está apenas pedindo problemas.
booyaa
4

TL; DR : Se você não construir em si mesmo, isso não vai acontecer.

A maneira eficaz de fazer isso é simplesmente escrever um script inicial personalizado para o seu contêiner especificado CMDem Dockerfile. Neste arquivo, execute um apt-get update && apt-get upgrade -qqyantes de iniciar o que estiver executando.

Você tem algumas maneiras de garantir que as atualizações cheguem ao contêiner:

  1. Defina uma tarefa cron no sistema operacional host para reiniciar o contêiner em um agendamento, fazendo com que ele seja atualizado e atualizado em um agendamento.
  2. Inscreva-se nas atualizações de segurança dos componentes do software e, na atualização de um pacote afetado, reinicie o contêiner.

Não é a coisa mais fácil de otimizar e automatizar, mas é possível.

Naftuli Kay
fonte
1
Continue lendo a página. deim0s tem uma resposta melhor.
Mc0e