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:
14
.dockerignore
Normal file
14
.dockerignore
Normal 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
2
.gitignore
vendored
@@ -10,5 +10,7 @@ dist/
|
||||
*.sqlite3-wal
|
||||
*.sqlite3-shm
|
||||
out/
|
||||
results/*
|
||||
!results/.gitkeep
|
||||
.DS_Store
|
||||
.claude/settings.local.json
|
||||
|
||||
18
Dockerfile
Normal file
18
Dockerfile
Normal 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"]
|
||||
6
PLAN.md
6
PLAN.md
@@ -34,6 +34,12 @@ L(x, I)-модель с coenergy-выводом силы — в разделе "
|
||||
Полный план архитектуры: см. историю обсуждения / `physics`, `sim`, `optim`,
|
||||
`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/*`, этот файл, первый коммит.
|
||||
|
||||
19
README.md
19
README.md
@@ -5,16 +5,23 @@
|
||||
|
||||
Полный план и чек-лист этапов — в [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
|
||||
python3 -m venv .venv
|
||||
source .venv/bin/activate
|
||||
pip install -e ".[dev]"
|
||||
```
|
||||
|
||||
## Тесты
|
||||
|
||||
```bash
|
||||
pytest
|
||||
```
|
||||
|
||||
7
docker-compose.yml
Normal file
7
docker-compose.yml
Normal file
@@ -0,0 +1,7 @@
|
||||
services:
|
||||
gausse:
|
||||
build: .
|
||||
volumes:
|
||||
- ./results:/app/results
|
||||
entrypoint: ["gausse"]
|
||||
command: ["--help"]
|
||||
0
results/.gitkeep
Normal file
0
results/.gitkeep
Normal file
Reference in New Issue
Block a user