¿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

Flimm
fuente
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:

38

Puede echar un vistazo a cómo se crean las imágenes base y partir de ahí.

Puede encontrarlos aquí: https://github.com/dotcloud/docker/tree/master/contrib . Hay mkimage-busybox.sh, mkimage-unittest.sh, mkimage-debian.sh

chirriar
fuente
1
Los scripts mkimage- * se han movido y cambiado de nombre (al igual que el repositorio oficial) aquí
tsalaroth
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
Flimm
fuente
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.

Larry Cai
fuente
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

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

Si desea crear su propia imagen base, primero echaría un vistazo a las imágenes oficiales , específicamente stackbrewdentro de ese repositorio.

De lo contrario, existen excelentes referencias para imágenes mínimas de SO en el repositorio de la ventana acoplable .

Por ejemplo, aquí hay un script para hacer una imagen de arco mínima y hay más aquí .

Jessie Frazelle
fuente