Add Docker as the primary way to build and run gausse

Dockerfile (non-root user, UID 1000 to match typical host users so bind
mounts don't end up root-owned) + docker-compose.yml with a ./results
volume for the SQLite database and reports that Stage 5/6 will write.
Verified by actually building the image and running the full test suite
and CLI inside the container, not just writing the files and assuming
they work.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
jze9
2026-07-06 20:17:12 +05:00
parent f22fd89612
commit acf846ab29
7 changed files with 60 additions and 6 deletions

14
.dockerignore Normal file
View File

@@ -0,0 +1,14 @@
.git
.venv
venv
__pycache__
*.pyc
.pytest_cache
*.egg-info
build
dist
out
.claude
*.sqlite3
*.sqlite3-wal
*.sqlite3-shm

2
.gitignore vendored
View File

@@ -10,5 +10,7 @@ dist/
*.sqlite3-wal *.sqlite3-wal
*.sqlite3-shm *.sqlite3-shm
out/ out/
results/*
!results/.gitkeep
.DS_Store .DS_Store
.claude/settings.local.json .claude/settings.local.json

18
Dockerfile Normal file
View File

@@ -0,0 +1,18 @@
FROM python:3.12-slim
WORKDIR /app
COPY pyproject.toml README.md ./
COPY src ./src
COPY tests ./tests
RUN pip install --no-cache-dir -e ".[dev]"
# Не root: иначе всё, что контейнер пишет в примонтированный ./results
# (SQLite-база, отчёты), становится на хосте файлами root:root.
RUN useradd --create-home --uid 1000 gausse
RUN mkdir -p /app/results && chown -R gausse:gausse /app
USER gausse
ENTRYPOINT ["gausse"]
CMD ["--help"]

View File

@@ -34,6 +34,12 @@ L(x, I)-модель с coenergy-выводом силы — в разделе "
Полный план архитектуры: см. историю обсуждения / `physics`, `sim`, `optim`, Полный план архитектуры: см. историю обсуждения / `physics`, `sim`, `optim`,
`storage`, `report` модули ниже. `storage`, `report` модули ниже.
**Docker — основной способ запуска** (по требованию пользователя): `Dockerfile`
+ `docker-compose.yml` в корне репозитория, образ собран и провалидирован —
внутри контейнера запускаются все 37 тестов и CLI (`docker compose run --rm
--entrypoint pytest gausse -q`). Результаты (SQLite и отчёты, когда появятся)
монтируются в `./results` на хосте, чтобы переживать пересборку образа.
## Чек-лист этапов ## Чек-лист этапов
- [x] **Этап 0 — Скелет проекта**: `pyproject.toml`, `README.md`, `.gitignore`, пакеты `src/gausse/*`, этот файл, первый коммит. - [x] **Этап 0 — Скелет проекта**: `pyproject.toml`, `README.md`, `.gitignore`, пакеты `src/gausse/*`, этот файл, первый коммит.

View File

@@ -5,16 +5,23 @@
Полный план и чек-лист этапов — в [PLAN.md](PLAN.md). Полный план и чек-лист этапов — в [PLAN.md](PLAN.md).
## Установка ## Установка (Docker — основной способ)
```bash
docker compose build
docker compose run --rm --entrypoint pytest gausse -q # тесты
docker compose run --rm gausse sweep --n 1000 # CLI (после реализации Этапа 6)
```
Результаты (SQLite, отчёты) должны сохраняться в `./results`, примонтированный
в контейнер как `/app/results` (см. `docker-compose.yml`), чтобы переживать
пересборку образа.
## Установка без Docker (локальная разработка)
```bash ```bash
python3 -m venv .venv python3 -m venv .venv
source .venv/bin/activate source .venv/bin/activate
pip install -e ".[dev]" pip install -e ".[dev]"
```
## Тесты
```bash
pytest pytest
``` ```

7
docker-compose.yml Normal file
View File

@@ -0,0 +1,7 @@
services:
gausse:
build: .
volumes:
- ./results:/app/results
entrypoint: ["gausse"]
command: ["--help"]

0
results/.gitkeep Normal file
View File