Быстрее, docker, ещё быстрее

Сергей Перминов

Tinkoff.ru

RUN apk install ...
RUN poetry install
COPY ./code /code
FROM alpine

awesome:2019-09-25-b7ed60f

TeamCity Server

build agent

build agent

build agent

build agent

<...>

RUN apk install ...
RUN poetry install
COPY ./code /code
FROM alpine

awesome-base:v1

FROM awesome-base:v1

awesome:2019-09-25-b7ed60f

build agent

Как понять, какой базовый образ нам нужен?

dockerfile

poetry.lock

md5sum awesome-base.dockerfile

dockerfile

grep 'content-hash' poetry.lock

pyproject.toml

poetry.lock

...
content-hash = "de0b7dd2286198c11fce59..."
...
DOCKERFILE_HASH=$(md5sum awesome-base.dockerfile)
POETRY_HASH=$(grep 'content-hash' poetry.lock)
TAG="$POETRY_HASH-$DOCKERFILE_HASH"

dockerfile

poetry.lock

Вычисляем тэг базового образа:

 TAG="$POETRY_HASH-$DOCKERFILE_HASH"

Пулим базовый образ:

docker pull awesome-base:de0b7dd2

Получилось?

Собираем и пушим базовый образ:

docker build ...

docker push awesome-base:de0b7dd2

Собираем образ с сервисом

awesome:<date>-<commit-hash>

на основе базового

docker build --cache-from ...

Docker build (lightning talks)

By persi

Docker build (lightning talks)

  • 249