¿Cómo puedo crear mi propia imagen base para Docker?


97

De acuerdo con la documentación de Docker , para construir su propia imagen, siempre debe especificar una imagen base usando la FROMinstrucción.

Obviamente, hay muchas imágenes para elegir en el índice de Docker , pero ¿y si quisiera crear una propia? ¿Es eso posible?

La imagen baseestá basada en Ubuntu si la entiendo correctamente y quiero experimentar con una imagen de Debian. Además, quiero entender realmente cómo funciona Docker, y la baseimagen sigue siendo una caja negra para mí.


Editar: documentación oficial sobre la creación de una imagen base


No importa. :-) Las preguntas aquí todavía deben estar relacionadas con el tema de acuerdo con las pautas del sitio. Están cubiertos en el Centro de ayuda y en las páginas del recorrido . (El enlace también parece pertenecer a los desarrolladores de contenedores Docker). Si está preguntando sobre su propia imagen de contenedor, hay una herramienta para eso en su sitio
Ken White

@KenWhite: meta pregunta relevante: meta.stackexchange.com/questions/179249/…
Flimm

:-) Meta respuesta relevante en este momento, que es la respuesta justo encima de la tuya. (Vea especialmente el segundo comentario a la respuesta que vinculé, sobre la claridad de lo que pregunta su pregunta).
Ken White

9
@Ken White: la pregunta es cómo 'hacer' una imagen base, no cómo implementar una 'imagen'. Flimm está intentando programar algo que pueda ser implementado posteriormente, por él o por otros. Amazon EC2 está relacionado con la implementación, pero creo que todavía tienen un par de programadores programando cosas de programación :). La creación de imágenes base es un ejemplo de cosas de programación, diría yo.
qkrijger

@qkrijger: Esto se está discutiendo en la meta pregunta vinculada. Dado que esa discusión está abierta, publique cualquier discusión sobre la actualidad allí (donde el consenso parece ser que no es un tema de "cosas de programación").
Ken White

Respuestas:



32

Citando a Solomon Hykes :

Puede crear fácilmente un nuevo contenedor desde cualquier tarball con "docker import". Por ejemplo:

debootstrap raring ./rootfs
tar -C ./rootfs -c . | docker import - flimm/mybase

Quizás publique la edición / actualización en un comentario para que otros puedan verla y tal vez alguien pueda volver a enviar la edición.
Bdoserror

1
@Flimm ¿Por qué debería usar sudo en este caso? Ejecute estos comandos en su directorio de usuario y no debería tener ningún motivo para la elevación de privilegios. Estás creando una imagen, no instalándola.
rancidfishbreath

Ni siquiera necesita root para el uso normal de Docker; simplemente agréguese al dockergrupo.
tekknolagi

1
Pero el guión en el comando de importación, recomendado por Flimm es necesario: en docker import - flimm/mybaselugar dedocker import flimm/mybase
Daniel Alder

La propiedad de los archivos en el tar se verá afectada por si está ejecutando como root o no. Si no como root, entoncesdebootstrap y taral menos debería ser ejecutado bajo fakeroot.
clacke

21

(crédito a fatherlinux) Obtenga información de http://developerblog.redhat.com/2014/05/15/practical-introduction-to-docker-containers/ , que explica mejor

  1. Cree los archivos tar para su sistema de archivos, simplemente podría

    tar --numeric-owner --exclude=/proc --exclude=/sys -cvf centos6-base.tar /
    
  2. Transferir el archivo tar a otro sistema de cargador de muelle si no se instala localmente y importse

    cat centos6-base.tar | docker import - centos6-base
    
  3. Ahora puede verificar ejecutándolo.

    docker run -i -t centos6-base cat /etc/redhat-release
    

Los scripts de dotcloud combinan los dos primeros pasos juntos, lo que me confunde y parece complicado al principio.

La directriz oficial de Docker usandodebootstrap también trata de hacer que el sistema de archivos limpios.

Puede juzgar por sí mismo cómo realizar el paso 1.


14

Para comenzar a construir su propia imagen desde cero, puede usar la scratchimagen.

El uso de la "imagen" desde cero le indica al proceso de compilación que desea que el siguiente comando en el Dockerfile sea la primera capa del sistema de archivos en su imagen.

FROM scratch
ADD hello /
CMD ["/hello"]

http://docs.docker.com/engine/articles/baseimages/#creating-a-simple-base-image-using-scratch


1
Esta ventaja importde un archivo tar, son las dos respuestas canónicas, y ese enlace es el recurso canónico.
clacke

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.