tag run remove hub docker dockerfile

run - Dockerfile: configuración de múltiples variables de entorno en una sola línea



docker remove tag (2)

Tenía la impresión de que las variables ambientales podrían establecerse en una sola línea de la siguiente manera para minimizar las imágenes intermedias.

FROM alpine:3.6 ENV RUBY_MAJOR 2.4 / RUBY_VERSION 2.4.1 / RUBY_DOWNLOAD_SHA256 4fc8a9992de3e90191de369270ea4b6c1b171b7941743614cc50822ddc1fe654 / RUBYGEMS_VERSION 2.6.12 / BUNDLER_VERSION 1.15.3

Sin embargo, ejecutando un contenedor basado en este fragmento y llamando a # set |grep RU veo que las variables no se asignan por separado, sino que se combinan en una sola cadena.

RUBY_MAJOR=''2.4 RUBY_VERSION 2.4.1 RUBY_DOWNLOAD_SHA256 4fc8a9992de3e90191de369270ea4b6c1b171b7941743614cc50822ddc1fe654 RUBYGEMS_VERSION 2.6.12 BUNDLER_VERSION 1.15.3''

Sin embargo, si configuro explícitamente cada variable como se muestra a continuación, obtengo el resultado esperado y no hay errores al llamar a las variables.

ENV RUBY_MAJOR 2.4 ENV RUBY_VERSION 2.4.1 ENV RUBY_DOWNLOAD_SHA256 4fc8a9992de3e90191de369270ea4b6c1b171b7941743614cc50822ddc1fe654 ENV RUBYGEMS_VERSION 2.6.12 ENV BUNDLER_VERSION 1.15.3

Pregunta: ¿Es posible combinar la configuración de las variables de entorno en una sola línea? Si es así, ¿cómo lo haría? ¿Y es una buena práctica?


Hay dos formatos para especificar entornos. Si necesita una sola variable, entonces debajo del formato

ENV X Y

Esto asignará X como Y

ENX X Y Z

Esto asignará X como YZ

Si necesita asignar varias variables de entorno, use el otro formato

ENV X=Y Z=A

Esto asignará X como Y y Z como A Así que tu Dockerfile debería ser

FROM alpine:3.6 ENV RUBY_MAJOR=2.4 / RUBY_VERSION=2.4.1 / RUBY_DOWNLOAD_SHA256=4fc8a9992de3e90191de369270ea4b6c1b171b7941743614cc50822ddc1fe654 / RUBYGEMS_VERSION=2.6.12 / BUNDLER_VERSION=1.15.3 RUN env


No necesita preocuparse por muchos comandos ENV , cada uno de los cuales crea una nueva capa intermedia para su imagen final creada por su Dockerfile.

de Mejores prácticas para escribir Dockerfiles

Minimiza el número de capas

Antes de Docker 17.05, e incluso más, antes de Docker 1.10, era importante minimizar el número de capas en su imagen. Las siguientes mejoras han mitigado esta necesidad:

  • En Docker 1.10 y superior, solo las instrucciones RUN , COPY y ADD crean capas. Otras instrucciones crean imágenes intermedias temporales y ya no aumentan directamente el tamaño de la compilación.

  • Docker 17.05 y superior agregan soporte para compilaciones de múltiples etapas , que le permiten copiar solo los artefactos que necesita en la imagen final. Esto le permite incluir herramientas y depurar información en sus etapas de construcción intermedias sin aumentar el tamaño de la imagen final.