Alguns poderiam explicar o que o comando apt-get update faz e quando devo usá-lo?
apt-get update
baixa índices atualizados dos repositórios de pacotes da distribuição, listando todos os pacotes disponíveis e suas versões precisas.
Distribuições comuns como Ubuntu e Debian são geralmente conservadoras e compatíveis com versões anteriores em suas ofertas de pacotes, portanto as versões não mudam muito com o tempo; eles serão alterados devido a atualizações de segurança ou correções de bugs. Por exemplo, o mysql pode ser atualizado de 5.7.18
para, 5.7.19
mas não para 6.x
.
Onde está armazenado o índice do pacote? Em um banco de dados? Em um arquivo?
Geralmente é armazenado em um ou mais arquivos dentro /var/lib/apt
. No contexto do Docker, esses arquivos estão dentro da imagem. Ao criar o Dockerfile, eles são armazenados nas novas camadas do sistema de arquivos que são criadas e persistidas como a imagem recém-criada.
O que acontece se eu instalar o apt-get sem atualizar o cache?
Você pode tentar baixar versões de pacotes que não existem mais. Isso é bastante comum em máquinas virtuais, mas também é possível dentro de contêineres se os repositórios de distribuição tiverem liberado novos pacotes após a criação da imagem base. Pode não haver coordenação entre os mantenedores da distribuição e os mantenedores do Dockerfile, que estão a jusante da distribuição e podem ser maiores em número. Existe apenas um repositório Debian, mas milhares de jessie
imagens de contêineres e Dockerfile.
Além disso, algumas imagens upstream como a do ubuntu removem o índice baixado para diminuir a imagem e evitar arquivos desatualizados. Portanto, espera-se que um índice atualizado seja baixado ao criar uma imagem de base, não para que cada versão de uma imagem de base seja enviada com o índice mais recente.
Existe uma chance de que o pacote remoto não exista mais e que o link seja quebrado?
Definitivamente, porque as versões armazenadas no índice são muito precisas 5.7.19
(simplificação; são mais parecidas com 5.7.19-0ubuntu1
).
Existe alguma política acordada sobre repositórios deb? Por exemplo, um repositório deve conter apenas a última versão de um pacote ou, pelo contrário, deve conter todas as versões disponíveis para uma liberação de distribuição específica?
É comum que as versões secundárias antigas sejam removidas rapidamente assim que uma atualização estiver disponível; Suponho que isso economize espaço nos servidores, pois os binários podem pesar várias dezenas de megabytes, multiplicados por todas as versões e arquiteturas suportadas. Portanto, geralmente é impossível fixar, digamos, mysql-5.7.18
no subsequente apt-get install
; assim quemysql-5.7.19
for lançado na distribuição, o anterior será removido.
Para ser justo com Docker, esse não determinismo de apt-get update
é um problema trazido como parte do gerenciamento de pacotes de cada distribuição. Você teria o mesmo problema ao tentar criar repetidamente uma máquina virtual EC2 ou Vagrant.
Alguns administradores de sistema usam serviços como o Aptly para espelhar os repositórios originais e podem fixar uma versão específica, mas você corre o risco de perder atualizações de segurança, a menos que tenha um processo separado, frequentemente executado, para testar as atualizações e alterar o que você deseja. estão fixando.