{"id":1375,"date":"2024-07-23T12:39:18","date_gmt":"2024-07-23T12:39:18","guid":{"rendered":"https:\/\/dockerpros.com\/?post_type=glossary&#038;p=1375"},"modified":"2024-07-23T12:39:18","modified_gmt":"2024-07-23T12:39:18","slug":"exportacion-de-clave-de-cache-de-dockerfileen-el-contexto-de-docker-la-exportacion-de-la-clave-de-cache-de-un-dockerfile-se-refiere-al-proceso-de-guardar-y-reutilizar-las-capas-de-imagen-construida","status":"publish","type":"glossary","link":"https:\/\/dockerpros.com\/es\/wiki\/dockerfile-export-cache-key\/","title":{"rendered":"Dockerfile \u2013export-cache-key"},"content":{"rendered":"<h2>Understanding Dockerfile \u2013export-cache-key: An In-Depth Exploration<\/h2>\n<p>El <code>--export-cache-key<\/code> opci\u00f3n <span class=\"glossaryai-tooltip glossary-term-652\"><span class=\"glossaryai-link\"><a href=\"https:\/\/dockerpros.com\/es\/wiki\/dockerfile\/\" target=\"_blank\">Dockerfile<\/a><\/span><span class=\"gai-content-hidden glossaryai-tooltip-content\"><span class=\"gai-tooltip-body\"><span class=\"glossaryai-tooltip-text\">Un Dockerfile es un script que contiene una serie de instrucciones para automatizar la creaci\u00f3n de im\u00e1genes Docker. Especifica la imagen base, las dependencias de la aplicaci\u00f3n y la configuraci\u00f3n, facilitando el despliegue consistente en diferentes entornos.<span class=\"glossaryai-more-link\"> <a href=\"https:\/\/dockerpros.com\/es\/wiki\/dockerfile\/\">More \u00bb<\/a><\/span><\/span><\/span><\/span><\/span> is a powerful feature introduced in Docker 20.10 that allows users to specify a cache key for the build context, facilitating improved cache management and more efficient Docker <span class=\"glossaryai-tooltip glossary-term-651\"><span class=\"glossaryai-link\"><a href=\"https:\/\/dockerpros.com\/es\/wiki\/image\/\" target=\"_blank\">imagen<\/a><\/span><span class=\"gai-content-hidden glossaryai-tooltip-content\"><span class=\"gai-tooltip-body\"><span class=\"glossaryai-tooltip-text\">An image is a visual representation of an object or scene, typically composed of pixels in digital formats. It can convey information, evoke emotions, and facilitate communication across various media.<span class=\"glossaryai-more-link\"> <a href=\"https:\/\/dockerpros.com\/es\/wiki\/image\/\">More \u00bb<\/a><\/span><\/span><\/span><\/span><\/span> construcciones. Al definir una clave de cach\u00e9 \u00fanica, los desarrolladores pueden optimizar sus procesos de construcci\u00f3n, reducir los tiempos de construcci\u00f3n y mantener la consistencia en diferentes entornos. Este art\u00edculo tiene como objetivo profundizar en los mecanismos, el uso y las mejores pr\u00e1cticas de la <code>--export-cache-key<\/code> option, providing insights that will enhance your <span class=\"glossaryai-tooltip glossary-term-652\"><span class=\"glossaryai-link\"><a href=\"https:\/\/dockerpros.com\/es\/wiki\/dockerfile\/\" target=\"_blank\">Dockerfile<\/a><\/span><span class=\"gai-content-hidden glossaryai-tooltip-content\"><span class=\"gai-tooltip-body\"><span class=\"glossaryai-tooltip-text\">Un Dockerfile es un script que contiene una serie de instrucciones para automatizar la creaci\u00f3n de im\u00e1genes Docker. Especifica la imagen base, las dependencias de la aplicaci\u00f3n y la configuraci\u00f3n, facilitando el despliegue consistente en diferentes entornos.<span class=\"glossaryai-more-link\"> <a href=\"https:\/\/dockerpros.com\/es\/wiki\/dockerfile\/\">More \u00bb<\/a><\/span><\/span><\/span><\/span><\/span> management skills.<\/p>\n<h2>Los Fundamentos de la Cach\u00e9 de Docker\n\nLa cach\u00e9 de Docker es una herramienta poderosa que puede acelerar significativamente el proceso de construcci\u00f3n de im\u00e1genes de Docker. Sin embargo, tambi\u00e9n puede ser una fuente de frustraci\u00f3n si no se entiende c\u00f3mo funciona. En esta secci\u00f3n, exploraremos los fundamentos de la cach\u00e9 de Docker y c\u00f3mo aprovecharla al m\u00e1ximo.\n\n\u00bfQu\u00e9 es la cach\u00e9 de Docker?\n\nLa cach\u00e9 de Docker es un mecanismo que almacena las capas intermedias de una imagen de Docker. Cuando construyes una imagen de Docker, cada instrucci\u00f3n en el Dockerfile crea una nueva capa. Docker almacena estas capas en su cach\u00e9, lo que permite que las construcciones futuras sean m\u00e1s r\u00e1pidas si las capas no han cambiado.\n\n\u00bfC\u00f3mo funciona la cach\u00e9 de Docker?\n\nCuando construyes una imagen de Docker, Docker verifica cada instrucci\u00f3n en el Dockerfile contra su cach\u00e9. Si la instrucci\u00f3n y sus dependencias no han cambiado desde la \u00faltima construcci\u00f3n, Docker reutiliza la capa en cach\u00e9 en lugar de reconstruirla. Esto puede ahorrar mucho tiempo, especialmente para im\u00e1genes grandes o complejas.\n\nSin embargo, si una instrucci\u00f3n o sus dependencias han cambiado, Docker invalida la cach\u00e9 para esa instrucci\u00f3n y todas las instrucciones posteriores. Esto significa que Docker reconstruir\u00e1 todas las capas a partir de la instrucci\u00f3n modificada, lo que puede ralentizar significativamente el proceso de construcci\u00f3n.\n\n\u00bfC\u00f3mo aprovechar al m\u00e1ximo la cach\u00e9 de Docker?\n\nPara aprovechar al m\u00e1ximo la cach\u00e9 de Docker, es importante organizar tu Dockerfile de manera que las instrucciones que cambian con menos frecuencia est\u00e9n al principio y las que cambian con m\u00e1s frecuencia est\u00e9n al final. Esto minimiza el n\u00famero de capas que necesitan ser reconstruidas cuando haces cambios en tu aplicaci\u00f3n.\n\nAdem\u00e1s, es importante tener en cuenta que Docker solo almacena en cach\u00e9 las capas que se construyen localmente. Si extraes una imagen de un registro, Docker no almacenar\u00e1 en cach\u00e9 las capas de esa imagen. Por lo tanto, si est\u00e1s construyendo una imagen basada en otra imagen, es mejor construir la imagen base localmente primero para aprovechar la cach\u00e9.\n\nEn resumen, la cach\u00e9 de Docker es una herramienta poderosa que puede acelerar significativamente el proceso de construcci\u00f3n de im\u00e1genes de Docker. Sin embargo, para aprovecharla al m\u00e1ximo, es importante entender c\u00f3mo funciona y organizar tu Dockerfile de manera estrat\u00e9gica.<\/h2>\n<p>Antes de sumergirnos en los detalles espec\u00edficos de <code>--export-cache-key<\/code>, it is essential to understand how Docker&#8217;s caching system works. Docker utilizes a layered filesystem architecture: each command in a <span class=\"glossaryai-tooltip glossary-term-652\"><span class=\"glossaryai-link\"><a href=\"https:\/\/dockerpros.com\/es\/wiki\/dockerfile\/\" target=\"_blank\">Dockerfile<\/a><\/span><span class=\"gai-content-hidden glossaryai-tooltip-content\"><span class=\"gai-tooltip-body\"><span class=\"glossaryai-tooltip-text\">Un Dockerfile es un script que contiene una serie de instrucciones para automatizar la creaci\u00f3n de im\u00e1genes Docker. Especifica la imagen base, las dependencias de la aplicaci\u00f3n y la configuraci\u00f3n, facilitando el despliegue consistente en diferentes entornos.<span class=\"glossaryai-more-link\"> <a href=\"https:\/\/dockerpros.com\/es\/wiki\/dockerfile\/\">More \u00bb<\/a><\/span><\/span><\/span><\/span><\/span> generates a layer in the <span class=\"glossaryai-tooltip glossary-term-651\"><span class=\"glossaryai-link\"><a href=\"https:\/\/dockerpros.com\/es\/wiki\/image\/\" target=\"_blank\">imagen<\/a><\/span><span class=\"gai-content-hidden glossaryai-tooltip-content\"><span class=\"gai-tooltip-body\"><span class=\"glossaryai-tooltip-text\">An image is a visual representation of an object or scene, typically composed of pixels in digital formats. It can convey information, evoke emotions, and facilitate communication across various media.<span class=\"glossaryai-more-link\"> <a href=\"https:\/\/dockerpros.com\/es\/wiki\/image\/\">More \u00bb<\/a><\/span><\/span><\/span><\/span><\/span>. When you build a Docker <span class=\"glossaryai-tooltip glossary-term-651\"><span class=\"glossaryai-link\"><a href=\"https:\/\/dockerpros.com\/es\/wiki\/image\/\" target=\"_blank\">imagen<\/a><\/span><span class=\"gai-content-hidden glossaryai-tooltip-content\"><span class=\"gai-tooltip-body\"><span class=\"glossaryai-tooltip-text\">An image is a visual representation of an object or scene, typically composed of pixels in digital formats. It can convey information, evoke emotions, and facilitate communication across various media.<span class=\"glossaryai-more-link\"> <a href=\"https:\/\/dockerpros.com\/es\/wiki\/image\/\">More \u00bb<\/a><\/span><\/span><\/span><\/span><\/span>, Docker checks its cache to see if it can reuse existing layers instead of creating new ones. If there is a cached layer that matches the command and context, Docker will use that layer, significantly speeding up the build process.<\/p>\n<p>However, caching can become inconsistent, especially in team environments or when deploying to various infrastructures. Changes in the build context or dependencies can lead to unexpected cache invalidations, which may result in longer build times. This is where the <code>--export-cache-key<\/code> La opci\u00f3n entra en juego.<\/p>\n<h2>How <code>--export-cache-key<\/code> Obras<\/h2>\n<p>El <code>--export-cache-key<\/code> option allows you to generate a distinct cache key for your build context. This cache key is a string that identifies the cache associated with your build. By associating specific cache keys with particular builds or environments, you can control which cached layers are used, enhancing your build\u2019s efficiency.<\/p>\n<h3>Sintaxis<\/h3>\n<p>La sintaxis general para usar <code>--export-cache-key<\/code> is as follows:<\/p>\n<pre><code class=\"language-bash\">docker build --export-cache-key= -t : .<\/code><\/pre>\n<h3>Par\u00e1metros<\/h3>\n<ul>\n<li><code>--export-cache-key=<\/code>: The cache key you wish to associate with your build context.<\/li>\n<li><code>-t :<\/code>: The name and tag you want to assign to the resulting <span class=\"glossaryai-tooltip glossary-term-651\"><span class=\"glossaryai-link\"><a href=\"https:\/\/dockerpros.com\/es\/wiki\/image\/\" target=\"_blank\">imagen<\/a><\/span><span class=\"gai-content-hidden glossaryai-tooltip-content\"><span class=\"gai-tooltip-body\"><span class=\"glossaryai-tooltip-text\">An image is a visual representation of an object or scene, typically composed of pixels in digital formats. It can convey information, evoke emotions, and facilitate communication across various media.<span class=\"glossaryai-more-link\"> <a href=\"https:\/\/dockerpros.com\/es\/wiki\/image\/\">More \u00bb<\/a><\/span><\/span><\/span><\/span><\/span>.<\/li>\n<\/ul>\n<h2>Benefits of Using <code>--export-cache-key<\/code><\/h2>\n<h3>1. Improved Cache Management<\/h3>\n<p>Al emplear claves de cach\u00e9 \u00fanicas, los desarrolladores pueden gestionar la cach\u00e9 de manera m\u00e1s efectiva. Por ejemplo, si un proyecto tiene m\u00faltiples caracter\u00edsticas desarroll\u00e1ndose en paralelo, cada caracter\u00edstica puede tener su propia clave de cach\u00e9. Esto significa que los cambios en una caracter\u00edstica no afectan inadvertidamente la cach\u00e9 de compilaci\u00f3n de otra, lo que conduce a compilaciones m\u00e1s predecibles.<\/p>\n<h3>2. Reduced Build Times<\/h3>\n<p>Usando <code>--export-cache-key<\/code> puede reducir significativamente los tiempos de compilaci\u00f3n al minimizar la invalidaci\u00f3n innecesaria de la cach\u00e9. Cuando un contexto de compilaci\u00f3n permanece sin cambios pero no est\u00e1 relacionado con la compilaci\u00f3n actual, los desarrolladores pueden emplear la misma clave de cach\u00e9 para aprovechar las capas existentes, lo que acelera el proceso de compilaci\u00f3n.<\/p>\n<h3>3. Consistencia entre entornos<\/h3>\n<p>En los pipelines de CI\/CD modernos, la consistencia es fundamental. Al utilizar claves de cach\u00e9, puedes asegurar que se emplee la misma cach\u00e9 en diferentes entornos y configuraciones de m\u00e1quinas, reduciendo as\u00ed el s\u00edndrome del \"en mi m\u00e1quina funciona\".<\/p>\n<h2>Real-world Use Cases<\/h2>\n<p>To illustrate the advantages of <code>--export-cache-key<\/code>, let\u2019s look at a few real-world scenarios where this feature can be beneficial.<\/p>\n<h3>Ejemplo 1: M\u00faltiples ramas de caracter\u00edsticas\n\nIn this example, there are three feature branches: feature-A, feature-B, and feature-C. Each branch has its own set of commits, and they are all based on the master branch. The feature-A branch has two commits, feature-B has one commit, and feature-C has three commits. The master branch has one commit that is not present in any of the feature branches.<\/h3>\n<p>Imagine a scenario where developers are working on different features in parallel, each in its own branch. Without <code>--export-cache-key<\/code>, any changes to the <span class=\"glossaryai-tooltip glossary-term-652\"><span class=\"glossaryai-link\"><a href=\"https:\/\/dockerpros.com\/es\/wiki\/dockerfile\/\" target=\"_blank\">Dockerfile<\/a><\/span><span class=\"gai-content-hidden glossaryai-tooltip-content\"><span class=\"gai-tooltip-body\"><span class=\"glossaryai-tooltip-text\">Un Dockerfile es un script que contiene una serie de instrucciones para automatizar la creaci\u00f3n de im\u00e1genes Docker. Especifica la imagen base, las dependencias de la aplicaci\u00f3n y la configuraci\u00f3n, facilitando el despliegue consistente en diferentes entornos.<span class=\"glossaryai-more-link\"> <a href=\"https:\/\/dockerpros.com\/es\/wiki\/dockerfile\/\">More \u00bb<\/a><\/span><\/span><\/span><\/span><\/span> in one branch might inadvertently invalidate the cache in another branch, leading to unnecessary rebuilds.<\/p>\n<p>By implementing unique cache keys for each feature branch, you can prevent this issue. For instance:<\/p>\n<pre><code class=\"language-bash\"># For feature A\ndocker build --export-cache-key=featureA-cache -t myapp:featureA .\n\n# For feature B\ndocker build --export-cache-key=featureB-cache -t myapp:featureB .<\/code><\/pre>\n<h3>Ejemplo 2: Pipelines de CI\/CD\n\nIn this example, we will create a CI\/CD pipeline for a simple web application using GitHub Actions. The pipeline will automatically build, test, and deploy the application whenever changes are pushed to the main branch.\n\nStep 1: Create a new GitHub repository and clone it to your local machine.\n\nStep 2: Create a simple web application using your preferred programming language and framework. For this example, we will use a basic Node.js application with Express.js.\n\nStep 3: Create a new file named \"index.js\" in the root directory of your project and add the following code:\n\n```javascript\nconst express = require('express');\nconst app = express();\nconst port = 3000;\n\napp.get('\/', (req, res) =&gt; {\n  res.send('Hello World!');\n});\n\napp.listen(port, () =&gt; {\n  console.log(`Server running at http:\/\/localhost:${port}\/`);\n});\n```\n\nStep 4: Create a new file named \"package.json\" in the root directory of your project and add the following code:\n\n```json\n{\n  \"name\": \"simple-web-app\",\n  \"version\": \"1.0.0\",\n  \"description\": \"A simple web application\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"start\": \"node index.js\",\n    \"test\": \"echo \\\"Error: no test specified\\\" &amp;&amp; exit 1\"\n  },\n  \"dependencies\": {\n    \"express\": \"^4.17.1\"\n  }\n}\n```\n\nStep 5: Create a new file named \".github\/workflows\/ci-cd.yml\" in the root directory of your project and add the following code:\n\n```yaml\nname: CI\/CD Pipeline\n\non:\n  push:\n    branches: [ main ]\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    steps:\n    - uses: actions\/checkout@v2\n\n    - name: Use Node.js\n      uses: actions\/setup-node@v2\n      with:\n        node-version: '14'\n\n    - name: Install dependencies\n      run: npm install\n\n    - name: Build\n      run: npm run build\n\n    - name: Test\n      run: npm test\n\n    - name: Deploy\n      run: |\n        echo \"Deploying to production...\"\n        # Add your deployment commands here\n```\n\nStep 6: Commit and push your changes to the main branch of your GitHub repository.\n\nStep 7: Go to the \"Actions\" tab in your GitHub repository and you should see your CI\/CD pipeline running. It will automatically build, test, and deploy your application whenever changes are pushed to the main branch.\n\nThat's it! You have successfully created a CI\/CD pipeline for your web application using GitHub Actions.<\/h3>\n<p>En entornos de CI\/CD, las compilaciones se activan con frecuencia para el mismo c\u00f3digo fuente. Esto puede dar lugar a compilaciones redundantes si el contexto de compilaci\u00f3n permanece igual. Al emplear <code>--export-cache-key<\/code>, you can ensure that builds reuse existing layers whenever possible.<\/p>\n<pre><code class=\"language-bash\">docker build --export-cache-key=ci-build-cache -t myapp:latest .<\/code><\/pre>\n<h3>Example 3: Multi-Stage Builds<\/h3>\n<p>Al utilizar construcciones multi-etapa, ciertas etapas pueden sufrir cambios frecuentes mientras que otras permanecen constantes. Al asignar diferentes claves de cach\u00e9 a diferentes etapas, puedes optimizar a\u00fan m\u00e1s el proceso de construcci\u00f3n.<\/p>\n<pre><code class=\"language-dockerfile\"># Stage 1: Base\nFROM <span class=\"glossaryai-tooltip glossary-term-684\"><span class=\"glossaryai-link\"><a href=\"https:\/\/dockerpros.com\/es\/wiki\/node\/\" target=\"_blank\">nodo<\/a><\/span><span class=\"gai-content-hidden glossaryai-tooltip-content\"><span class=\"gai-tooltip-body\"><span class=\"glossaryai-tooltip-text\">Node, o Node.js, es un entorno de ejecuci\u00f3n de JavaScript basado en el motor V8 de Chrome, que permite la programaci\u00f3n del lado del servidor. Permite a los desarrolladores construir aplicaciones de red escalables utilizando una arquitectura as\u00edncrona basada en eventos.<span class=\"glossaryai-more-link\"> <a href=\"https:\/\/dockerpros.com\/es\/wiki\/node\/\">More \u00bb<\/a><\/span><\/span><\/span><\/span><\/span>:14 AS base\n<span class=\"glossaryai-tooltip glossary-term-673\"><span class=\"glossaryai-link\"><a href=\"https:\/\/dockerpros.com\/es\/wiki\/copy\/\" target=\"_blank\">COPIA<\/a><\/span><span class=\"gai-content-hidden glossaryai-tooltip-content\"><span class=\"gai-tooltip-body\"><span class=\"glossaryai-tooltip-text\">COPY is a command in computer programming and data management that facilitates the duplication of files or data from one location to another, ensuring data integrity and accessibility.<span class=\"glossaryai-more-link\"> <a href=\"https:\/\/dockerpros.com\/es\/wiki\/copy\/\">More \u00bb<\/a><\/span><\/span><\/span><\/span><\/span> package.json yarn.lock .\/\n<span class=\"glossaryai-tooltip glossary-term-672\"><span class=\"glossaryai-link\"><a href=\"https:\/\/dockerpros.com\/es\/wiki\/run\/\" target=\"_blank\">CORRE<\/a><\/span><span class=\"gai-content-hidden glossaryai-tooltip-content\"><span class=\"gai-tooltip-body\"><span class=\"glossaryai-tooltip-text\">\"RUN\" refers to a command in various programming languages and operating systems to execute a specified program or script. It initiates processes, providing a controlled environment for task execution.<span class=\"glossaryai-more-link\"> <a href=\"https:\/\/dockerpros.com\/es\/wiki\/run\/\">More \u00bb<\/a><\/span><\/span><\/span><\/span><\/span> yarn install\n\n# Stage 2: Build\nFROM base AS build\n<span class=\"glossaryai-tooltip glossary-term-673\"><span class=\"glossaryai-link\"><a href=\"https:\/\/dockerpros.com\/es\/wiki\/copy\/\" target=\"_blank\">COPIA<\/a><\/span><span class=\"gai-content-hidden glossaryai-tooltip-content\"><span class=\"gai-tooltip-body\"><span class=\"glossaryai-tooltip-text\">COPY is a command in computer programming and data management that facilitates the duplication of files or data from one location to another, ensuring data integrity and accessibility.<span class=\"glossaryai-more-link\"> <a href=\"https:\/\/dockerpros.com\/es\/wiki\/copy\/\">More \u00bb<\/a><\/span><\/span><\/span><\/span><\/span> . .\n<span class=\"glossaryai-tooltip glossary-term-672\"><span class=\"glossaryai-link\"><a href=\"https:\/\/dockerpros.com\/es\/wiki\/run\/\" target=\"_blank\">CORRE<\/a><\/span><span class=\"gai-content-hidden glossaryai-tooltip-content\"><span class=\"gai-tooltip-body\"><span class=\"glossaryai-tooltip-text\">\"RUN\" refers to a command in various programming languages and operating systems to execute a specified program or script. It initiates processes, providing a controlled environment for task execution.<span class=\"glossaryai-more-link\"> <a href=\"https:\/\/dockerpros.com\/es\/wiki\/run\/\">More \u00bb<\/a><\/span><\/span><\/span><\/span><\/span> yarn build\n\n# Export cache for the build stage\ndocker build --export-cache-key=build-cache -t myapp:build .<\/code><\/pre>\n<h2>Mejores pr\u00e1cticas para usar <code>--export-cache-key<\/code><\/h2>\n<h3>1. Define Meaningful Cache Keys<\/h3>\n<p>Creating meaningful cache keys will assist you in managing your builds effectively. Avoid generic keys; instead, use descriptive names that reflect the purpose of the build context they represent. For example, using branch names or feature descriptions can be helpful.<\/p>\n<h3>2. Combinar con Docker BuildKit\n\nDocker BuildKit es una herramienta de construcci\u00f3n de im\u00e1genes Docker que ofrece mejoras significativas en rendimiento, almacenamiento y seguridad en comparaci\u00f3n con el constructor tradicional de Docker. BuildKit se introdujo en Docker 18.09 y se ha convertido en el constructor predeterminado en versiones m\u00e1s recientes.\n\nPara combinar Docker BuildKit con tu flujo de trabajo de desarrollo, sigue estos pasos:\n\n1. Habilita BuildKit:\n   - Para habilitar BuildKit temporalmente para un solo comando, establece la variable de entorno DOCKER_BUILDKIT:\n     ```\n     export DOCKER_BUILDKIT=1\n     ```\n   - Para habilitar BuildKit permanentemente, agrega la siguiente l\u00ednea a tu archivo de configuraci\u00f3n de Docker (~\/.docker\/config.json):\n     ```\n     {\n       \"features\": {\n         \"buildkit\": true\n       }\n     }\n     ```\n\n2. Utiliza las nuevas caracter\u00edsticas de BuildKit:\n   - Construcci\u00f3n paralela: BuildKit puede construir m\u00faltiples etapas de Dockerfile en paralelo, lo que reduce significativamente el tiempo de construcci\u00f3n.\n   - Construcci\u00f3n incremental: BuildKit solo reconstruye las etapas que han cambiado, lo que acelera el proceso de desarrollo.\n   - Transferencia eficiente de capas: BuildKit optimiza la transferencia de capas entre el cliente y el demonio de Docker, reduciendo el uso de ancho de banda.\n   - Construcci\u00f3n secreta: BuildKit permite el uso de secretos (como contrase\u00f1as o claves SSH) durante la construcci\u00f3n sin exponerlos en el Dockerfile o en la imagen final.\n\n3. Actualiza tus Dockerfiles:\n   - Aprovecha las nuevas instrucciones de Dockerfile compatibles con BuildKit, como RUN --mount=type=secret y RUN --mount=type=ssh.\n   - Utiliza la sintaxis de Dockerfile mejorada para construcciones de m\u00faltiples plataformas y arquitecturas.\n\n4. Integra BuildKit con tus herramientas de CI\/CD:\n   - Configura tus pipelines de integraci\u00f3n continua y despliegue continuo para utilizar BuildKit en la construcci\u00f3n de im\u00e1genes Docker.\n   - Aprovecha las caracter\u00edsticas de BuildKit para optimizar tus procesos de construcci\u00f3n y despliegue.\n\n5. Monitorea y optimiza:\n   - Utiliza las herramientas de monitoreo de BuildKit para identificar cuellos de botella y optimizar tu proceso de construcci\u00f3n.\n   - Experimenta con diferentes configuraciones de BuildKit para encontrar la configuraci\u00f3n \u00f3ptima para tu caso de uso espec\u00edfico.\n\nAl combinar Docker BuildKit con tu flujo de trabajo de desarrollo, puedes mejorar significativamente el rendimiento y la eficiencia de tu proceso de construcci\u00f3n de im\u00e1genes Docker. BuildKit ofrece una serie de caracter\u00edsticas avanzadas que pueden ayudarte a acelerar el desarrollo, reducir el uso de recursos y mejorar la seguridad de tus im\u00e1genes Docker.<\/h3>\n<p><code>--export-cache-key<\/code> works best when combined with Docker BuildKit, which offers advanced features for <span class=\"glossaryai-tooltip glossary-term-651\"><span class=\"glossaryai-link\"><a href=\"https:\/\/dockerpros.com\/es\/wiki\/image\/\" target=\"_blank\">imagen<\/a><\/span><span class=\"gai-content-hidden glossaryai-tooltip-content\"><span class=\"gai-tooltip-body\"><span class=\"glossaryai-tooltip-text\">An image is a visual representation of an object or scene, typically composed of pixels in digital formats. It can convey information, evoke emotions, and facilitate communication across various media.<span class=\"glossaryai-more-link\"> <a href=\"https:\/\/dockerpros.com\/es\/wiki\/image\/\">More \u00bb<\/a><\/span><\/span><\/span><\/span><\/span> building. Enabling BuildKit can be done by setting the environment variable:<\/p>\n<pre><code class=\"language-bash\">export DOCKER_BUILDKIT=1<\/code><\/pre>\n<h3>3. Revise regularmente sus claves de cach\u00e9<\/h3>\n<p>A medida que tu proyecto evoluciona, tu estrategia de gesti\u00f3n de cach\u00e9 tambi\u00e9n deber\u00eda hacerlo. Revisa peri\u00f3dicamente tus claves de cach\u00e9 para asegurarte de que siguen cumpliendo su prop\u00f3sito previsto. Esto te ayudar\u00e1 a identificar cualquier redundancia u oportunidades de optimizaci\u00f3n adicional.<\/p>\n<h3>4. Aprovecha los contextos de compilaci\u00f3n de manera inteligente\n\nLos contextos de compilaci\u00f3n son una parte fundamental de Docker que a menudo se pasa por alto. El contexto de compilaci\u00f3n es el conjunto de archivos que se env\u00edan al demonio de Docker cuando se ejecuta un comando docker build. Por defecto, este contexto incluye todos los archivos del directorio actual y sus subdirectorios.\n\nSin embargo, incluir archivos innecesarios en el contexto de compilaci\u00f3n puede aumentar significativamente el tiempo de compilaci\u00f3n y el tama\u00f1o de la imagen resultante. Para optimizar este proceso, es importante ser selectivo con los archivos que se incluyen en el contexto.\n\nUna forma de hacerlo es utilizando un archivo .dockerignore. Este archivo funciona de manera similar a .gitignore, permiti\u00e9ndote especificar qu\u00e9 archivos y directorios deben excluirse del contexto de compilaci\u00f3n. Por ejemplo, puedes excluir archivos de configuraci\u00f3n, dependencias de desarrollo, o cualquier otro archivo que no sea necesario para ejecutar la aplicaci\u00f3n en producci\u00f3n.\n\nOtro aspecto importante es la estructura del Dockerfile en s\u00ed. Es recomendable colocar las instrucciones que cambian con menos frecuencia al principio del archivo, y las que cambian con m\u00e1s frecuencia al final. Esto permite aprovechar mejor el sistema de cach\u00e9 de Docker, reduciendo el tiempo de compilaci\u00f3n en futuras construcciones.\n\nAdem\u00e1s, considera utilizar compilaciones multi-stage. Esta t\u00e9cnica te permite utilizar m\u00faltiples FROM en un solo Dockerfile, permiti\u00e9ndote compilar tu aplicaci\u00f3n en un entorno y luego copiar solo los artefactos necesarios a una imagen m\u00e1s ligera para producci\u00f3n. Esto resulta en im\u00e1genes finales mucho m\u00e1s peque\u00f1as y seguras.\n\nPor \u00faltimo, si est\u00e1s trabajando con un monorepo o un proyecto grande, considera utilizar compilaciones incrementales o herramientas como BuildKit, que pueden mejorar significativamente los tiempos de compilaci\u00f3n al aprovechar mejor el cach\u00e9 y paralelizar tareas.\n\nAl aprovechar estos aspectos de los contextos de compilaci\u00f3n, puedes mejorar significativamente la eficiencia de tu proceso de desarrollo con Docker, reduciendo tiempos de espera y optimizando el uso de recursos.<\/h3>\n<p>Ten presente qu\u00e9 archivos y directorios incluyes en tu contexto de construcci\u00f3n. Los archivos grandes e innecesarios pueden ralentizar las construcciones y pueden provocar la invalidaci\u00f3n de la cach\u00e9. Usa <code>.dockerignore<\/code> files effectively to streamline your build context.<\/p>\n<h3>5. Monitor Build Performance<\/h3>\n<p>Utilize Docker\u2019s built-in logging tools to monitor build performance. This can help you identify areas where cache usage is suboptimal, allowing you to refine your cache key strategy over time.<\/p>\n<h2>Conclusi\u00f3n<\/h2>\n<p>El <code>--export-cache-key<\/code> feature introduces a new level of efficiency and control to Docker <span class=\"glossaryai-tooltip glossary-term-651\"><span class=\"glossaryai-link\"><a href=\"https:\/\/dockerpros.com\/es\/wiki\/image\/\" target=\"_blank\">imagen<\/a><\/span><span class=\"gai-content-hidden glossaryai-tooltip-content\"><span class=\"gai-tooltip-body\"><span class=\"glossaryai-tooltip-text\">An image is a visual representation of an object or scene, typically composed of pixels in digital formats. It can convey information, evoke emotions, and facilitate communication across various media.<span class=\"glossaryai-more-link\"> <a href=\"https:\/\/dockerpros.com\/es\/wiki\/image\/\">More \u00bb<\/a><\/span><\/span><\/span><\/span><\/span> builds. By allowing developers to specify cache keys, it promotes better cache management, reduced build times, and consistency across different environments. As development practices continue to evolve, leveraging features like <code>--export-cache-key<\/code> will be crucial for maintaining optimal build processes.<\/p>\n<p>Incorporating this feature into your <span class=\"glossaryai-tooltip glossary-term-652\"><span class=\"glossaryai-link\"><a href=\"https:\/\/dockerpros.com\/es\/wiki\/dockerfile\/\" target=\"_blank\">Dockerfile<\/a><\/span><span class=\"gai-content-hidden glossaryai-tooltip-content\"><span class=\"gai-tooltip-body\"><span class=\"glossaryai-tooltip-text\">Un Dockerfile es un script que contiene una serie de instrucciones para automatizar la creaci\u00f3n de im\u00e1genes Docker. Especifica la imagen base, las dependencias de la aplicaci\u00f3n y la configuraci\u00f3n, facilitando el despliegue consistente en diferentes entornos.<span class=\"glossaryai-more-link\"> <a href=\"https:\/\/dockerpros.com\/es\/wiki\/dockerfile\/\">More \u00bb<\/a><\/span><\/span><\/span><\/span><\/span> practices can transform your build experience, particularly in collaborative and CI\/CD environments. By understanding its mechanics and implementing the best practices outlined in this article, you&#8217;ll be well-equipped to make the most of Docker&#8217;s caching capabilities. As you explore this powerful tool, remember that effective cache management is not just a matter of convenience; it\u2019s an integral part of modern software development that fosters greater productivity, efficiency, and consistency.<\/p>","protected":false},"excerpt":{"rendered":"<p>The `\u2013export-cache-key` option in <span class=\"glossaryai-tooltip glossary-term-652\"><span class=\"glossaryai-link\"><a href=\"https:\/\/dockerpros.com\/es\/wiki\/dockerfile\/\" target=\"_blank\">Dockerfile<\/a><\/span><span class=\"gai-content-hidden glossaryai-tooltip-content\"><span class=\"gai-tooltip-body\"><span class=\"glossaryai-tooltip-text\">Un Dockerfile es un script que contiene una serie de instrucciones para automatizar la creaci\u00f3n de im\u00e1genes Docker. Especifica la imagen base, las dependencias de la aplicaci\u00f3n y la configuraci\u00f3n, facilitando el despliegue consistente en diferentes entornos.<span class=\"glossaryai-more-link\"> <a href=\"https:\/\/dockerpros.com\/es\/wiki\/dockerfile\/\">More \u00bb<\/a><\/span><\/span><\/span><\/span><\/span> optimiza <span class=\"glossaryai-tooltip glossary-term-651\"><span class=\"glossaryai-link\"><a href=\"https:\/\/dockerpros.com\/es\/wiki\/image\/\" target=\"_blank\">imagen<\/a><\/span><span class=\"gai-content-hidden glossaryai-tooltip-content\"><span class=\"gai-tooltip-body\"><span class=\"glossaryai-tooltip-text\">An image is a visual representation of an object or scene, typically composed of pixels in digital formats. It can convey information, evoke emotions, and facilitate communication across various media.<span class=\"glossaryai-more-link\"> <a href=\"https:\/\/dockerpros.com\/es\/wiki\/image\/\">More \u00bb<\/a><\/span><\/span><\/span><\/span><\/span> construye al permitir a los desarrolladores especificar una clave de cach\u00e9 para las capas exportadas. Esto mejora el rendimiento y la consistencia de la construcci\u00f3n, minimizando las reconstrucciones innecesarias.<\/p>","protected":false},"author":1,"featured_media":2063,"parent":0,"template":"","glossary-cat":[],"class_list":["post-1375","glossary","type-glossary","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Dockerfile -export-cache-key - Dockerpros<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/dockerpros.com\/es\/wiki\/exportacion-de-clave-de-cache-de-dockerfileen-el-contexto-de-docker-la-exportacion-de-la-clave-de-cache-de-un-dockerfile-se-refiere-al-proceso-de-guardar-y-reutilizar-las-capas-de-imagen-construida\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dockerfile -export-cache-key - Dockerpros\" \/>\n<meta property=\"og:description\" content=\"The `--export-cache-key` option in Dockerfile optimizes image builds by allowing developers to specify a cache key for exported layers. This enhances build performance and consistency, minimizing unnecessary rebuilds.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/dockerpros.com\/es\/wiki\/exportacion-de-clave-de-cache-de-dockerfileen-el-contexto-de-docker-la-exportacion-de-la-clave-de-cache-de-un-dockerfile-se-refiere-al-proceso-de-guardar-y-reutilizar-las-capas-de-imagen-construida\/\" \/>\n<meta property=\"og:site_name\" content=\"Dockerpros\" \/>\n<meta property=\"og:image\" content=\"https:\/\/dockerpros.com\/wp-content\/uploads\/2024\/07\/dockerfile-export-cache-key_1375.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"600\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data1\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/dockerpros.com\/wiki\/dockerfile-export-cache-key\/\",\"url\":\"https:\/\/dockerpros.com\/wiki\/dockerfile-export-cache-key\/\",\"name\":\"Dockerfile -export-cache-key - Dockerpros\",\"isPartOf\":{\"@id\":\"https:\/\/dockerpros.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/dockerpros.com\/wiki\/dockerfile-export-cache-key\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/dockerpros.com\/wiki\/dockerfile-export-cache-key\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/dockerpros.com\/wp-content\/uploads\/2024\/07\/dockerfile-export-cache-key_1375.jpg\",\"datePublished\":\"2024-07-23T12:39:18+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/dockerpros.com\/wiki\/dockerfile-export-cache-key\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/dockerpros.com\/wiki\/dockerfile-export-cache-key\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/dockerpros.com\/wiki\/dockerfile-export-cache-key\/#primaryimage\",\"url\":\"https:\/\/dockerpros.com\/wp-content\/uploads\/2024\/07\/dockerfile-export-cache-key_1375.jpg\",\"contentUrl\":\"https:\/\/dockerpros.com\/wp-content\/uploads\/2024\/07\/dockerfile-export-cache-key_1375.jpg\",\"width\":800,\"height\":600,\"caption\":\"dockerfile-export-cache-key-2\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/dockerpros.com\/wiki\/dockerfile-export-cache-key\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/dockerpros.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Glossary\",\"item\":\"https:\/\/dockerpros.com\/fr\/wiki\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Dockerfile &#8211;export-cache-key\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/dockerpros.com\/#website\",\"url\":\"https:\/\/dockerpros.com\/\",\"name\":\"Dockerpros\",\"description\":\"DockerPros \u2013 Your Ultimate Docker Resource Hub\",\"publisher\":{\"@id\":\"https:\/\/dockerpros.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/dockerpros.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/dockerpros.com\/#organization\",\"name\":\"Dockerpros\",\"url\":\"https:\/\/dockerpros.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/dockerpros.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/dockerpros.com\/wp-content\/uploads\/2024\/07\/Dockerpros_logo_blanco.png\",\"contentUrl\":\"https:\/\/dockerpros.com\/wp-content\/uploads\/2024\/07\/Dockerpros_logo_blanco.png\",\"width\":532,\"height\":114,\"caption\":\"Dockerpros\"},\"image\":{\"@id\":\"https:\/\/dockerpros.com\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Dockerfile -clave-de-cach\u00e9-de-exportaci\u00f3n - Dockerpros","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/dockerpros.com\/es\/wiki\/exportacion-de-clave-de-cache-de-dockerfileen-el-contexto-de-docker-la-exportacion-de-la-clave-de-cache-de-un-dockerfile-se-refiere-al-proceso-de-guardar-y-reutilizar-las-capas-de-imagen-construida\/","og_locale":"es_ES","og_type":"article","og_title":"Dockerfile -export-cache-key - Dockerpros","og_description":"The `--export-cache-key` option in Dockerfile optimizes image builds by allowing developers to specify a cache key for exported layers. This enhances build performance and consistency, minimizing unnecessary rebuilds.","og_url":"https:\/\/dockerpros.com\/es\/wiki\/exportacion-de-clave-de-cache-de-dockerfileen-el-contexto-de-docker-la-exportacion-de-la-clave-de-cache-de-un-dockerfile-se-refiere-al-proceso-de-guardar-y-reutilizar-las-capas-de-imagen-construida\/","og_site_name":"Dockerpros","og_image":[{"width":800,"height":600,"url":"https:\/\/dockerpros.com\/wp-content\/uploads\/2024\/07\/dockerfile-export-cache-key_1375.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Tiempo de lectura":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/dockerpros.com\/wiki\/dockerfile-export-cache-key\/","url":"https:\/\/dockerpros.com\/wiki\/dockerfile-export-cache-key\/","name":"Dockerfile -clave-de-cach\u00e9-de-exportaci\u00f3n - Dockerpros","isPartOf":{"@id":"https:\/\/dockerpros.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/dockerpros.com\/wiki\/dockerfile-export-cache-key\/#primaryimage"},"image":{"@id":"https:\/\/dockerpros.com\/wiki\/dockerfile-export-cache-key\/#primaryimage"},"thumbnailUrl":"https:\/\/dockerpros.com\/wp-content\/uploads\/2024\/07\/dockerfile-export-cache-key_1375.jpg","datePublished":"2024-07-23T12:39:18+00:00","breadcrumb":{"@id":"https:\/\/dockerpros.com\/wiki\/dockerfile-export-cache-key\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/dockerpros.com\/wiki\/dockerfile-export-cache-key\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/dockerpros.com\/wiki\/dockerfile-export-cache-key\/#primaryimage","url":"https:\/\/dockerpros.com\/wp-content\/uploads\/2024\/07\/dockerfile-export-cache-key_1375.jpg","contentUrl":"https:\/\/dockerpros.com\/wp-content\/uploads\/2024\/07\/dockerfile-export-cache-key_1375.jpg","width":800,"height":600,"caption":"dockerfile-export-cache-key-2"},{"@type":"BreadcrumbList","@id":"https:\/\/dockerpros.com\/wiki\/dockerfile-export-cache-key\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/dockerpros.com\/"},{"@type":"ListItem","position":2,"name":"Glossary","item":"https:\/\/dockerpros.com\/fr\/wiki\/"},{"@type":"ListItem","position":3,"name":"Dockerfile &#8211;export-cache-key"}]},{"@type":"WebSite","@id":"https:\/\/dockerpros.com\/#website","url":"https:\/\/dockerpros.com\/","name":"Profesionales de Docker","description":"DockerPros \u2013 Tu centro definitivo de recursos Docker","publisher":{"@id":"https:\/\/dockerpros.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/dockerpros.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/dockerpros.com\/#organization","name":"Profesionales de Docker","url":"https:\/\/dockerpros.com\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/dockerpros.com\/#\/schema\/logo\/image\/","url":"https:\/\/dockerpros.com\/wp-content\/uploads\/2024\/07\/Dockerpros_logo_blanco.png","contentUrl":"https:\/\/dockerpros.com\/wp-content\/uploads\/2024\/07\/Dockerpros_logo_blanco.png","width":532,"height":114,"caption":"Dockerpros"},"image":{"@id":"https:\/\/dockerpros.com\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/dockerpros.com\/es\/wp-json\/wp\/v2\/glossary\/1375","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dockerpros.com\/es\/wp-json\/wp\/v2\/glossary"}],"about":[{"href":"https:\/\/dockerpros.com\/es\/wp-json\/wp\/v2\/types\/glossary"}],"author":[{"embeddable":true,"href":"https:\/\/dockerpros.com\/es\/wp-json\/wp\/v2\/users\/1"}],"version-history":[{"count":0,"href":"https:\/\/dockerpros.com\/es\/wp-json\/wp\/v2\/glossary\/1375\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dockerpros.com\/es\/wp-json\/wp\/v2\/media\/2063"}],"wp:attachment":[{"href":"https:\/\/dockerpros.com\/es\/wp-json\/wp\/v2\/media?parent=1375"}],"wp:term":[{"taxonomy":"glossary-cat","embeddable":true,"href":"https:\/\/dockerpros.com\/es\/wp-json\/wp\/v2\/glossary-cat?post=1375"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}