En un directorio vacío, ejecuté una secuencia de comandos que se muestran en la siguiente captura de terminal:
$ echo -e "from alpine" > Dockerfile $ docker build --tag alpine . Sending build context to Docker daemon 2.048kB Step 1/1 : from alpine ---> c059bfaa849c Successfully built c059bfaa849c Successfully tagged alpine:latest $ docker image save -o alpine.tar alpine $ echo -e "from alpine \nrun apk add --no-cache tini" > Dockerfile $ docker build --tag tini . Sending build context to Docker daemon 11.76MB Step 1/2 : from alpine ---> c059bfaa849c Step 2/2 : run apk add --no-cache tini ---> Using cache ---> e50ce83132ec Successfully built e50ce83132ec Successfully tagged tini:latest $ docker image save -o tini.tar tini $ ls -sh *.tar 12M alpine.tar 5.7M tini.tar Como era de esperar, la imagen etiquetada como tini crea una capa adicional por encima de la que se comparte con alpine . Sin embargo, el archivo guardado resultante para la primera imagen es más pequeño que el de la última.
Se espera que la imagen guardada en el archivo anterior sea un superconjunto del último y, por lo tanto, más grande.
¿Por qué esta expectativa no es confirmada por la observación?
La mejor suposición es que algo más fue etiquetado como alpine en su host cuando hizo la compilación, y entre los dos comandos, algo bajó la imagen alpina correcta. Pero en lugar de adivinar, tiene el archivo para decirle exactamente qué había en esa primera imagen alpina. Extraiga el tar, revise el manifiesto y revise la configuración a la que apunta el manifiesto. Aquí hay un ejemplo con cualquier versión anterior de alpine:latest que tenía en mi máquina:
$ cat manifest.json | jq . [ { "Config": "45683da4f97c23d92b878d2ad15eb66e94c9cab368e54797bcd4a4b20c915815.json", "RepoTags": [ "test-alpine:latest" ], "Layers": [ "4833c0e9afedb6022373ef7da2cee392c97a5f4438e7f52a1f940903db618437/layer.tar" ] } ] $ cat 45683da4f97c23d92b878d2ad15eb66e94c9cab368e54797bcd4a4b20c915815.json | jq . { "architecture": "amd64", "config": { "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], "Cmd": [ "/bin/sh" ], "OnBuild": null }, "created": "2021-08-27T17:19:45.758611523Z", "history": [ { "created": "2021-08-27T17:19:45.553092363Z", "created_by": "/bin/sh -c #(nop) ADD file:aad4290d27580cc1a094ffaf98c3ca2fc5d699fe695dfb8e6e9fac20f1129450 in / " }, { "created": "2021-08-27T17:19:45.758611523Z", "created_by": "/bin/sh -c #(nop) CMD [\"/bin/sh\"]", "empty_layer": true } ], "os": "linux", "rootfs": { "type": "layers", "diff_ids": [ "sha256:e2eb06d8af8218cfec8210147357a68b7e13f7c485b991c288c2d01dc228bb68" ] } }Cuando compara las dos imágenes, si se construyeron a partir de la misma base alpina, tendrán el mismo conjunto inicial de capas. En su caso, es casi seguro que no lo harán.