
Tengo un contenedor que está construido encima dedebian:jessie(Hay algo de compilación de openssl y algunas cosas personalizadas). quiero que mi imagen sealanzableen diferentes arquitecturas, por ejemplo en sistemas operativos x86_64 "normales" pero también en arquitecturas basadas en ARM como RaspberryPI.
Descubrí que cuando construyo la imagen en x86_64 y la publico en HUB, no funciona cuando se extrae en un dispositivo ARM y viceversa. Intentar hacerlo da como resultado algunos errores de "no se pueden encontrar algunas bibliotecas" o "comandos no reconocidos".
La pregunta es: ¿cómo crear y publicar mi imagen para que esté disponible para otras arquitecturas (y, lo que es importante, cómo decirle a Docker que seleccione automáticamente la apropiada al descargar)?
Puedo ver esolos contenedores de Debian "han sido portados" a diferentes arquitecturaspero no puedo encontrar ninguna información sobre cómo lograr esto para mi imagen.
Respuesta1
Las imágenes de múltiples arcos en la ventana acoplable se encuentran en desarrollo activo. La pieza clave de esto es un docker manifest
cli que esaún en desarrollo en este PR.
Primero debe crear sus imágenes para diferentes arquitecturas, que siempre puede ejecutar directamente en el sistema de arquitectura apropiado. Una imagen de múltiples arcos es una "lista de manifiesto" que apuntará a estas imágenes. Luego, el cliente de Docker extraerá la imagen apropiada de esa lista cuando extraiga la imagen de múltiples arcos.
Hasta que el PR anterior esté integrado en Docker, puede usar elherramienta de manifiestoque le permite definir la lista de manifiesto y enviarla al servidor de registro. Esto permite un archivo yaml de entrada como el siguiente ejemplo:
image: myprivreg:5000/someimage:latest
manifests:
-
image: myprivreg:5000/someimage:ppc64le
platform:
architecture: ppc64le
os: linux
-
image: myprivreg:5000/someimage:amd64
platform:
architecture: amd64
features:
- sse
os: linux
Luego ejecuta lo siguiente para tomar el archivo yaml anterior y convertirlo en una lista de manifiesto que se envía al registro definido:
./manifest-tool push from-spec someimage.yaml
Respuesta2
- Construya su imagen contra la imagen de la arquitectura relevante.
- por ejemplo:
arm32v7/debian:jessie
en lugar dedebian:jessie
- por ejemplo:
- Etiquétalo como otra cosa.
- p.ej:
fracz/fooapp:arm32-latest
,fracz/fooapp:raspi-latest
,fracz/fooapp:grandma-use-this-one
- p.ej:
- Quien quiera publicar su imagen es responsable de seleccionar la etiqueta adecuada.
- Aunque probablemente quieras incluir información relevante en tus documentos/léames/etc.