Skip to content

Conversation

@aspeddro
Copy link
Collaborator

@aspeddro aspeddro commented Apr 30, 2025

Esse PR é experimento para tentar diminuir o tempo de construção da imagem Docker.

Problema

Cada build da imagem leva em média ~4:50s.

A imagem tem algumas bibliotecas que não precisa ser instaladas em cada build. Acho que podemos criar um imagem com as bibliotecas instaladas e usar a imagem como referência.

Essa etapa é mais longa:

pipelines/Dockerfile

Lines 18 to 49 in 0265c6b

RUN apt-get update && \
apt-get install --no-install-recommends -y wget gnupg && \
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - && \
echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list && \
apt-get update && \
apt-get install --no-install-recommends -y \
build-essential \
curl \
freetds-dev \
ftp \
gcc \
google-chrome-stable \
libcrypto++-dev \
libssl-dev \
p7zip-full \
python3-dev \
traceroute \
wget \
tesseract-ocr \
python3-opencv \
git \
bzip2 \
libxtst6 \
libgtk-3-0 \
libx11-xcb-dev \
libdbus-glib-1-2 \
libxt6 \
libpci-dev \
&& \
apt-get install -y r-base && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*

Multi-stage build

Vamos separar o processo em duas imagens. A primeira é uma imagem com as bibliotecas a nível de sistema, onde a instalação tem um custo alto (tempo). A segunda imagem representa é a imagem atual mas sem o processo de instalação das bibliotecas. Ainda existe o custo de pulling da imagem no registro ghcr.io, mas é um custo mais baixo.

Dockerfile.base - prefect-base-libs

Essa imagem é pública em https://github.com/basedosdados/pipelines/pkgs/container/prefect-base-libs.

A imagem prefect-base-libs é usada em Dockerfile.

FROM ghcr.io/basedosdados/prefect-base-libs:latest

Dockerfile - prefect-flows

Dockerfile faz o pull de ghcr.io/basedosdados/prefect-base-libs:latest.

Algumas etapas ainda estão em Dockerfile:

  • Instalação do poetry
  • Instalação das dependências e do próprio pacote pipelines

Tempo de construção de Build and publish Prefect Agent image

Atualmente essa etapa leva ~4:50s. Com essa alteração o resultado foi 3m7s, uma pequena mudança

Inspecionando as etapas

Olhando as etapas podemos vê qual leva mais tempo:

  • Pull da imagem ghcr.io/basedosdados/prefect-base-libs:latest: 23.4s
  • Instalação do poetry RUN curl -sSL https://install.python-poetry.org | python3 -: 11.8s
  • Instalação das dependências RUN poetry install && dbt deps: 35.0s
  • Push da imagem: 106.2s

Notas

@github-actions
Copy link

github-actions bot commented Apr 30, 2025

Coverage

Tests Skipped Failures Errors Time
8 7 💤 0 ❌ 0 🔥 14.808s ⏱️

@aspeddro aspeddro force-pushed the staging/base-dockerfile branch 2 times, most recently from 5ed8a87 to e2ad8fb Compare May 8, 2025 23:51
@aspeddro aspeddro changed the title Docker: multi-stage build Docker: multi-stage build Prefect Agent image May 9, 2025
@mergify
Copy link
Contributor

mergify bot commented May 14, 2025

@aspeddro esse pull request tem conflitos 😩

@mergify mergify bot added the conflict label May 14, 2025
Base automatically changed from staging/migration_dbt to main May 14, 2025 19:02
@aspeddro aspeddro force-pushed the staging/base-dockerfile branch from d78ba73 to da3b96e Compare May 15, 2025 21:21
@aspeddro aspeddro removed the conflict label May 15, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants