Pular para o conteúdo

Docker

A imagem oficial: multi-estágio, sem root, sem dependências.

bash
docker run --rm -it estevan5s/dataforge repl

A imagem oficial está em hub.docker.com/r/estevan5s/dataforge. Ela é multi-estágio: as ferramentas de build ficam no primeiro estágio e não chegam à imagem final — o que se baixa é o interpretador, a biblioteca padrão e nada mais.

Rodar o seu arquivo#

bash
docker run --rm -v "$PWD:/app" estevan5s/dataforge run main.df

O -v "$PWD:/app" monta a pasta atual em /app, que é o diretório de trabalho da imagem. Sem ele, o container não enxerga arquivo nenhum seu — é o esquecimento mais comum.

bash
alias df-docker='docker run --rm -it -v "$PWD:/app" estevan5s/dataforge'

df-docker run main.df
df-docker check src/
df-docker repl

O que há dentro#

Basepython:3.12-slim
Usuárioforgenão é root
Diretório/app
Entrypointdataforge
Comando padrãorepl
Dependênciasnenhuma além da stdlib do Python

O entrypoint é o dataforge, então qualquer subcomando funcionarun, check, fmt, lint, test, big-o, init, new, repl.

Servidor web#

O Kiln escuta em 0.0.0.0 dentro do container. Em 127.0.0.1 ele ficaria inalcançável de fora — é o erro mais comum ao conteinerizar um servidor.

bash
docker run --rm -p 8080:8080 -v "$PWD:/app" estevan5s/dataforge run app.df
curl localhost:8080

Como imagem base#

text
FROM estevan5s/dataforge:1.0.0

WORKDIR /app
COPY forge.toml .
RUN dataforge install          # resolve as dependências primeiro

COPY src/ ./src/
RUN dataforge check src/ --strict    # o build falha se o código não passar

EXPOSE 8080
CMD ["run", "src/main.df"]

No CI#

text
jobs:
  verificar:
    runs-on: ubuntu-latest
    container: estevan5s/dataforge:1.0.0
    steps:
      - uses: actions/checkout@v4
      - run: dataforge check src/ --strict
      - run: dataforge fmt . --check
      - run: dataforge test tests/

Como o container já é o ambiente, não há passo de instalação — e a versão do interpretador fica presa na tag, então o CI de hoje roda igual daqui a um ano.

Etiquetas#

TagO que é
latesta última versão estável
1.0.0uma versão fixa — use esta em produção
1.0a última correção da 1.0

Permissões#

O container não roda como root. Se os arquivos que ele cria aparecerem com dono errado na sua máquina, force o seu próprio usuário:

bash
docker run --rm -u "$(id -u):$(id -g)" -v "$PWD:/app" \
  estevan5s/dataforge run main.df

Construir a sua#

bash
git clone https://github.com/estevam5s/DataForge
cd DataForge
docker build -t dataforge .
docker run --rm -it dataforge repl