Docker apt-get update como funciona?

1

Portanto, sei que com cada janela de comando RUN cria uma camada ou intimida imagens, e isso leva ao armazenamento em cache apt-get update . Mas eu estou tendo momentos muito difíceis com a instalação de novos pacotes com apt-get no docker, e não tenho certeza do que está acontecendo, eu passei horas agora mexendo em ficar sem lugar, estou usando principalmente o Ubuntu como base imagem.

Certos pacotes parecem não ser instalados aleatoriamente, por exemplo, wget. Se eu entrar no terminal no meu contêiner, e fizer um apt-get update , então, um apt-get install wget eu posso instalar o wget. Mas no arquivo docker, mesmo quando eu apago todas as imagens criadas por cada linha RUN para impedir que a atualização seja armazenada em cache, não consigo instalar o wget com os mesmos comandos, é loucura absoluta e sinto como se estivesse enlouquecendo. .

Outros pacotes parecem funcionar aleatoriamente e não funcionam. Eu mesmo tive este pacote: python-glpk que estava instalando no Dockerfile em primeiro lugar, mas não mais ... Eu não consigo ver nenhum comportamento determinístico para atualizar e instalar, eles parecem funcionar quando o vento está soprando apenas um certa direção.

Demora muito tempo para fazer uma atualização com minha internet e estou em uma máquina virtual, então meu fluxo de trabalho está completamente quebrado, perdido muito tempo, alguém mais está tendo problemas com apt-get update && apt-get install ? Quais são as melhores práticas ao lidar com apt-get no docker, para garantir que tudo esteja funcionando como deveria?

    
por Snickers3192 20.02.2017 / 13:02

1 resposta

0

Alguns resultados ou registros seriam bons para responder sua pergunta.

Às vezes, o apt-get update está ficando lento, não tem nada a ver com o próprio docker. Se você tiver pacotes de conexão defeituosos, poderá falhar o download completamente.

Como você disse, cada linha no Dockerfile criará uma camada de imagem, e o cache será salvo localmente, para acelerar a criação da imagem. Existem algumas práticas para minimizar o tamanho da imagem do docker, e colocar o mínimo possível de linhas, combinando-as, portanto, no caso de instalação do pacote, o seguinte padrão é usado:

RUN \
  apt-get update &&\
  apt-get install -y zip &&\
  rm -rf /var/lib/apt/lists/*

Isso levará algum tempo para atualizar o cache, instalar o pacote e limpar o espaço, e ele irá gerar apenas uma camada de imagem, então qualquer outra instalação de pacote você precisará primeiro apt-get update para instalar pacotes.

Uma abordagem que você pode tentar é executar cada etapa em uma nova instrução RUN:

RUN \
  apt-get update

RUN \
  apt-get install -y zip

RUN \
  apt-get install -y curl

Dessa forma, você terá mais camadas, mas terá a camada de cache apt atualizada e instalará pacotes um por um.

    
por 20.02.2017 / 15:13