Eu tenho Dockerfile
que construir uma imagem do Docker baseada no Alpine Linux. Agora eu preciso instalar um pacote como parte disso Dockerfile
.
Atualmente tenho:
RUN apk update && \
apk upgrade && \
apk add git
Aparentemente, essa é uma péssima idéia, pois o resultado é não determinístico. Em vez disso, depende do momento em que eu construo a imagem, qual versão git
está sendo instalada.
Qual é a maneira correta de fazer isso?
Eu acho que eu tenho que dizer updated
, upgrade
e add
quais versões de usar, mas como posso fazer isso?
Eu já vi que apk
suporta a fixação de repositórios, mas não é isso que eu quero (pelo menos acho que sim), porque não quero fixar um repositório, mas um pacote.
Em outras palavras: se git
pudesse ser instalado via npm
, eu seria capaz de executar:
npm install [email protected]
(ou qualquer versão que eu queira ter). Qual é o equivalente a isso para o Alpine Linux?
fonte
apk add ansible~=2.4.1
significado>=2.4.1 <2.5.0
. Confira jubianchi.github.io/semver-check para testar seus próprios intervalos.Atualmente, não há como instalar versões antigas arbitrárias de um pacote a partir de repositórios oficiais no Alpine Linux. A melhor coisa que você pode conseguir é usar repositórios das versões anteriores:
fonte
Porque eu estava usando o
testing
repositório. Acabei construindo minha própria cópia. Passos:Vá para os detalhes do pacote. Ex:
https://pkgs.alpinelinux.org/package/edge/testing/armhf/watchman
Clique no commit, clique nos links do arquivo APKBUILD e em "Log" no menu para obter o log de confirmação do arquivo APKBUILD. Em seguida, escolha uma confirmação para o seu arquivo APKBUILD e faça o download. Ex:
https://git.alpinelinux.org/cgit/aports/tree/testing/watchman/APKBUILD?id=63f5e7d295659a855709901ce22a3e5f40fce455
Instale as ferramentas de construção:
Como você não é
root
usuário, crie umpackager
usuário com senha:Em seguida, crie-o
packager
no mesmo diretório que o arquivo APKBUILD:Pode ser necessário descobrir erros e instalar dependências. No meu exemplo, eu precisava fazer isso na minha imagem existente do Docker como
root
:Após uma compilação bem-sucedida como
packager
, instale-a comoroot
:Não sei como remover a
--allow-untrusted
peça, mas as etapas funcionaram para mim.fonte