jprism
jprism

Reputation: 3474

Docker: Why does inspect command shows 8 layers instead of 7 layers

I have a simple docker file to run the flask web framework in alpine.

 FROM python:2.7-alpine

RUN mkdir /app
WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt

COPY . .

LABEL maintainer="Test Test <[email protected]>" \
    version="1.0"

CMD flask run --host=0.0.0.0 --port=5000

and built the docker image like below

docker image build -t web1 .

and was able to see intermediate containers being created and dropped in each layers (except for WORKDIR /app ). But when I inspect using

docker image inspect web1

I got 8 layers instead of 7. Where is the 8th layer coming from?

Upvotes: 1

Views: 1036

Answers (1)

Matt
Matt

Reputation: 74720

Layers are only created for file system changes during an image build. Everything else is metadata stored in the image manifest.

The base image python:2.7-alpine has 4 file system layers.

docker inspect python:2.7-alpine --format '{{range .RootFS.Layers}}
 {{.}}{{end}}'
 sha256:2b0fb280b60dad0c3e2f6b207ef0d8f6a04f09638d245d3a2fdf0d6933e734d6
 sha256:1d2140d2445eafe082403409b3fe53ec3d8c148dacd632857af3d00582aab358
 sha256:17c290bb5b65c2d20fc06de87381281e3d47e73064bff2eb383691d8d15cc5e9
 sha256:316e76fb784760855a473b2c655abecdcf94dbaef9ce3673645b40f8df24c8e1

Your image creates 4 filesystem layers (Dockerfile RUN, COPY, RUN, COPY commands) on top of the 4 from the base image

docker inspect web1 --format '{{range .RootFS.Layers}}
 {{.}}{{end}}'
 sha256:2b0fb280b60dad0c3e2f6b207ef0d8f6a04f09638d245d3a2fdf0d6933e734d6
 sha256:1d2140d2445eafe082403409b3fe53ec3d8c148dacd632857af3d00582aab358
 sha256:17c290bb5b65c2d20fc06de87381281e3d47e73064bff2eb383691d8d15cc5e9
 sha256:316e76fb784760855a473b2c655abecdcf94dbaef9ce3673645b40f8df24c8e1
 sha256:...
 sha256:...
 sha256:...
 sha256:...

Upvotes: 5

Related Questions