Tiempo estimado de lectura: 3 minutos
La mayoría de los archivos Docker parten de una imagen padre. Si necesita controlar completamente el contenido de su imagen, es posible que necesite crear una imagen base en su lugar.Aquí está la diferencia:
-
Una imagen padre es la imagen en la que se basa su imagen. Se refiere al contenido de la directiva
FROM
en elDockerfile. Cada declaración posterior en el Dockerfile modifica esta parentimage. La mayoría de los Dockerfiles parten de una imagen padre, en lugar de una imagen base.Sin embargo, los términos se utilizan a veces indistintamente. -
Una imagen base tiene
FROM scratch
en su Dockerfile.
Este tema muestra varias formas de crear una imagen base. El proceso específico dependerá en gran medida de la distribución de Linux que quieras empaquetar. Tenemos algunos ejemplos a continuación, y se le anima a enviar solicitudes de extracción para contribuir con nuevos.
Crear una imagen completa usando tar
En general, comience con una máquina de trabajo que está ejecutando la distribución que le gustaría empaquetar como una imagen padre, aunque eso no es necesario para algunas herramientas como Debian’sDebootstrap, que también puede utilizar para construir imágenes de Ubuntu.
Puede ser tan simple como esto para crear una imagen padre de Ubuntu:
$ sudo debootstrap xenial xenial > /dev/null$ sudo tar -C xenial -c . | docker import - xeniala29c15f1bf7a$ docker run xenial cat /etc/lsb-releaseDISTRIB_ID=UbuntuDISTRIB_RELEASE=16.04DISTRIB_CODENAME=xenialDISTRIB_DESCRIPTION="Ubuntu 16.04 LTS"
Hay más scripts de ejemplo para crear imágenes padre en el repositorio de DockerGitHub.
Crear una imagen padre simple usando scratch
Puedes usar la imagen mínima y reservada de Docker, scratch
, como punto de partida para construir contenedores. El uso de la scratch
«imagen» indica al proceso de construcción que quieres que el siguiente comando en el Dockerfile
sea la primera capa del sistema de archivos en tu imagen.
Si bien scratch
aparece en el repositorio de Docker en el hub, no puedes sacarlo, ejecutarlo o etiquetar cualquier imagen con el nombre scratch
. En cambio, puedes hacer referencia a ella en tu Dockerfile
. Por ejemplo, para crear un contenedor mínimo usandoscratch
:
FROM scratchADD hello /CMD
Suponiendo que has construido el ejemplo del ejecutable «hello» siguiendo las instruccionesenhttps://github.com/docker-library/hello-world/,y lo has compilado con la bandera -static
, puedes construir este Dockerimage usando este comando docker build
:
docker build --tag hello .
No olvides el carácter .
al final, que establece el contexto de construcción en el directorio actual.
Nota: Debido a que Docker Desktop para Mac y Docker Desktop para Windows utilizan una VM de Linux, necesitas un binario de Linux, en lugar de un binario de Mac o Windows.Puedes utilizar un contenedor Docker para construirlo:
$ docker run --rm -it -v $PWD:/build ubuntu:16.04container# apt-get update && apt-get install build-essentialcontainer# cd /buildcontainer# gcc -o hello -static -nostartfiles hello.c
Para ejecutar tu nueva imagen, utiliza el comando
docker run
:docker run --rm hello
Este ejemplo crea la imagen hello-world utilizada en los tutoriales.Si quieres probarlo, puedes clonar el repo de la imagen.
Más recursos
Hay muchos recursos disponibles para ayudarte a escribir tu
Dockerfile
.