Tengo Dockerfile
que construir una imagen Docker que se base en Alpine Linux. Ahora necesito instalar un paquete como parte de esto Dockerfile
.
Actualmente tengo:
RUN apk update && \
apk upgrade && \
apk add git
Aparentemente, esta es una mala idea, ya que el resultado no es determinista. En cambio, depende del momento en el que construyo la imagen, de qué versión git
se está instalando.
¿Cuál es la forma correcta de hacer esto?
Supongo que tengo que decir updated
, upgrade
y add
qué versiones de usar, pero ¿cómo puedo hacer esto?
He visto que apk
admite la fijación de repositorios, pero eso no es lo que quiero (al menos eso creo), porque no quiero anclar un repositorio, sino un paquete.
En otras palabras: si git
pudiera instalarse a través de npm
, podría ejecutar:
npm install [email protected]
(o cualquier versión que quiera tener). ¿Cuál es el equivalente a esto para Alpine Linux?
fuente
apk add ansible~=2.4.1
significado>=2.4.1 <2.5.0
. Echa un vistazo a jubianchi.github.io/semver-check para probar tus propios rangos.Actualmente, no hay forma de instalar versiones anteriores arbitrarias de un paquete desde repositorios oficiales en Alpine Linux. Lo mejor que puede lograr es usar repositorios de las versiones anteriores:
fuente
Porque estaba usando el
testing
repositorio. Terminé construyendo mi propia copia. Pasos:Ir a los detalles del paquete. Ex:
https://pkgs.alpinelinux.org/package/edge/testing/armhf/watchman
Haga clic en la confirmación, haga clic en los enlaces del archivo APKBUILD y "Registro" en el menú para obtener el registro de confirmación del archivo APKBUILD. Luego elija un commit para su archivo APKBUILD y descárguelo. Ex:
https://git.alpinelinux.org/cgit/aports/tree/testing/watchman/APKBUILD?id=63f5e7d295659a855709901ce22a3e5f40fce455
Instale las herramientas de compilación:
Debes no ser
root
usuario, así que crea unpackager
usuario con contraseña:Luego
packager
compílelo como en el mismo directorio que el archivo APKBUILD:Es posible que deba descubrir errores e instalar dependencias. En mi ejemplo, necesitaba hacer esto en mi imagen existente de Docker como
root
:Después de una compilación exitosa como
packager
, instálela comoroot
:No estoy seguro de cómo quitar la
--allow-untrusted
pieza, pero los pasos funcionaron para mí.fuente