Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

172
Vistas
¿Poner ARG en la parte superior de Dockerfile evita la reutilización de capas?

Si se cambia un ARG que se declara en la parte superior de un Dockerfile, pero su valor solo se usa para un comando EJECUTAR cerca del final del Dockerfile, ¿Docker reconstruye toda la imagen desde cero o puede reutilizar el intermedio? imagen justo antes del comando RUN correspondiente?

Para utilizar mejor las capas, ¿debería colocar mis declaraciones ARG en la parte superior del Dockerfile o justo antes de la sección que las usa?

Supongo que parte de mi pregunta es si una directiva ARG genera o no una capa intermedia.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Si cambia el valor de un argumento de construcción, todas las capas después de esa línea ARG se invalidarán. Así que supongo que deberías incluirlo justo antes de usar el ARG.

Justo antes de que lo necesites:

 docker build --build-arg TEST_ARG=test . Sending build context to Docker daemon 2.048 kB Step 1 : FROM ubuntu ---> 104bec311bcd Step 2 : RUN echo "no arg used" ---> Using cache ---> 5c29cb363a27 Step 3 : ARG TEST_ARG ---> Using cache ---> 73b6080f973b Step 4 : RUN echo $TEST_ARG ---> 0acd55c24441 Successfully built 0acd55c24441

En la cima:

 docker build --build-arg TEST_ARG=test . Sending build context to Docker daemon 2.048 kB Step 1 : FROM ubuntu ---> 104bec311bcd Step 2 : ARG TEST_ARG ---> Using cache ---> b611a1023fe3 Step 3 : RUN echo "no arg used" ---> Running in 63e0f803c6b2 no arg used ---> 592311ccad72 Removing intermediate container 63e0f803c6b2 Step 4 : RUN echo $TEST_ARG ---> Running in 1515aa8702f0 test ---> fc2d850fbbeb Removing intermediate container 1515aa8702f0 Successfully built fc2d850fbbeb

En el primer ejemplo se usan dos capas del caché y en el segundo solo se usa una capa (curiosamente, la propia capa ARG) del caché.

over 4 years ago · Santiago Trujillo Denunciar

0

Para ser más precisos que la respuesta aceptada, no todas las líneas se invalidan en caché después de una declaración ARG . Solo aquellos que usan valores ARG y RUN s. La documentación de la ventana acoplable los detalles:

Impacto en el almacenamiento en caché de compilación

Las variables ARG no se conservan en la imagen construida como lo son las variables ENV . Sin embargo, las variables ARG impactan en la memoria caché de compilación de manera similar. Si un Dockerfile define una variable ARG cuyo valor es diferente de una compilación anterior, se produce un "error de caché" en su primer uso, no en su definición. En particular, todas las instrucciones RUN que siguen a una instrucción ARG usan la variable ARG implícitamente (como una variable de entorno), por lo que pueden provocar una pérdida de memoria caché. Todas las variables ARG predefinidas están exentas del almacenamiento en caché a menos que haya una declaración ARG coincidente en el Dockerfile.

  • https://docs.docker.com/engine/reference/builder/#impact-on-build-caching

Tendrá que mover sus ARG debajo de RUN que no necesitarían el argumento para mantener optimizada la caché de capa.

Para más información:

  • https://github.com/moby/moby/issues/18017
  • https://github.com/moby/moby/pull/18161
  • EJECUTAR explicación aquí: https://github.com/moby/moby/pull/21885
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda