Si es un desarrollador de Docker, es posible que haya notado que cuando crea una imagen de Docker, ya sea utilizando un archivo docker o extrayendo directamente una imagen del registro de Docker, el tamaño de la imagen puede ser considerablemente grande según su contexto de compilación de Docker.
Dado que Docker es una aplicación cliente-servidor, sabemos que Docker Client es la interfaz de línea de comandos real que usamos para acceder a Docker Containers y Docker Server en realidad se llama Docker Daemon, que lo ayuda a mantener los contenedores. Cuando intentamos construir una imagen de Docker, necesitamos enviar algunos archivos al Daemon de Docker o al servidor para que esos archivos puedan usarse e incluirse dentro del contenedor de Docker que estamos tratando de construir. Este conjunto de archivos y directorios se denomina Docker Build Context.
Es obvio que cuanto mayor sea el tamaño de los archivos y carpetas dentro del contexto de compilación de Docker, mayor será el tamaño de la imagen de Docker. Ahora, dentro de la carpeta donde guarda su dockerfile y a través de la cual intenta construir la imagen, es posible que contenga algunos archivos y carpetas que son parte del proyecto y no desea incluir esos archivos en Docker Build. Contexto. Veamos algunas razones para no incluir estos archivos y directorios.
- Problemas de seguridad : algunos archivos importantes, como contraseñas, claves secretas, carpetas .git, etc., contienen mucha información sobre su proyecto y es posible que desee exponer esos detalles al mundo exterior para evitar intrusiones.
- Invalidación de caché : cuando escribe el Dockerfile , es una práctica general usar la instrucción COPY para copiar los archivos y las carpetas dentro del contexto de compilación de Docker. Cada declaración dentro del Dockerfile da como resultado la creación de una nueva capa de imagen intermedia. Por lo tanto, cuando realiza cambios en su dockerfile una y otra vez, esto puede conducir a múltiples invalidaciones de caché y al desperdicio de recursos.
- Además, excluir archivos grandes innecesarios de su Docker Build Context conducirá a un tamaño de imagen de Docker más bajo.
- Acelera el proceso de creación de la imagen de Docker.
Por todos estos motivos, es posible que desee excluir algunos archivos y carpetas de su contexto de compilación de Docker.
Ahora, de manera similar a un archivo .gitignore que se usa comúnmente cuando crea repositorios de Git, un archivo .dockerignore se usa para ignorar archivos y carpetas cuando intenta crear una imagen de Docker. Puede especificar la lista de archivos y directorios dentro del archivo .dockerignore .
Veamos un ejemplo de archivo .dockerignore .
passphrase.txt logs/ .git *.md .cache
Echemos un vistazo a un ejemplo práctico del uso de un archivo .dockerignore.
Paso 1: Cree un directorio que contenga un dockerfile donde especifique las instrucciones y una carpeta que desea ignorar (diga ignore-this).
En este caso, el dockerfile simplemente extrae la imagen de Ubuntu del repositorio y copia el contexto de compilación.
FROM ubuntu:latest COPY . .
Paso 2: dentro del mismo directorio, cree un archivo .dockerignore e incluya el nombre de la carpeta que desea excluir del Docker Build Context.
ignore-this
Ahora, el directorio principal contiene un dockerfile , un archivo . dockerignore file y una carpeta llamada ignore-this.
Paso 3: Cree la imagen de Docker.
sudo docker build -t sample-image .
Paso 4: Ejecute Docker Container y verifique la carpeta.
sudo docker run -it sample-image bash ls
Encontrará que el Contenedor solo contiene el archivo acoplable y no la carpeta «ignorar esto». No es que tampoco contenga el archivo .dockerignore.
¿Qué pasa si ignoras el dockerfile?
Es cierto que también puede mencionar el dockerfile dentro del archivo .dockerignore y excluirlo del contexto de compilación de Docker. De hecho, es una práctica común de lo que podrías haber pensado. Esto le permite no exponer todo el proyecto de su aplicación Docker.