Add uv package manager to base image for on-demand Python support
Install uv from GitHub releases (~23MB). Users can install Python with 'uv python install 3.12' — persists across restarts via devbox-uv volume. Eliminates need for a separate Python image variant.
This commit is contained in:
+39
-1
@@ -184,6 +184,7 @@ Understanding what survives container restarts and what doesn't:
|
||||
| `/home/developer/.ssh` | Host bind mount (ro) | ✅ Yes — lives on host | SSH keys |
|
||||
| `/home/developer/.aws` | Host bind mount | ✅ Yes — lives on host | AWS credentials/SSO cache |
|
||||
| `/home/developer/.local/share/opencode` | Named volume (if configured) | ✅ Yes — Docker volume | Session history, memory, auth tokens |
|
||||
| `/home/developer/.local/share/uv` | Named volume (if configured) | ✅ Yes — Docker volume | Python installs, uv tool installs |
|
||||
| `/home/developer/.config/opencode` | Host bind mount (if configured) | ✅ Yes — lives on host | opencode.json, oh-my-opencode-slim.json, skills |
|
||||
|
||||
### Key points
|
||||
@@ -191,6 +192,7 @@ Understanding what survives container restarts and what doesn't:
|
||||
- **Project files** (`/workspace`) are always safe — they're your host filesystem.
|
||||
- **opencode config** is auto-generated from `OPENCODE_PROVIDER` env var on each start if no existing config is found. To persist config changes, mount the config directory from the host (see Custom opencode Config below).
|
||||
- **opencode data** (session history, memory) is lost with `--rm` unless you add a named volume.
|
||||
- **Python installs** via `uv python install` are lost unless you add the `devbox-uv` named volume.
|
||||
- **AWS SSO tokens** persist across restarts when `~/.aws` is mounted (recommended for Bedrock users).
|
||||
|
||||
## Custom opencode Config
|
||||
@@ -217,6 +219,39 @@ docker run -it --rm \
|
||||
joakimp/opencode-devbox:latest
|
||||
```
|
||||
|
||||
## Python Development with uv
|
||||
|
||||
The image includes [uv](https://docs.astral.sh/uv/), a fast Python package manager that replaces pip, venv, and pyenv. Python is not pre-installed but can be installed on demand:
|
||||
|
||||
```bash
|
||||
# Install Python (persists across restarts with devbox-uv volume)
|
||||
uv python install 3.12
|
||||
|
||||
# Create a virtual environment and install dependencies
|
||||
uv venv
|
||||
uv pip install -r requirements.txt
|
||||
|
||||
# Or use uv's project workflow (reads pyproject.toml)
|
||||
uv sync
|
||||
|
||||
# Run a Python script
|
||||
uv run python script.py
|
||||
|
||||
# Install standalone Python tools
|
||||
uvx ruff check .
|
||||
```
|
||||
|
||||
To persist Python installs across container restarts, add a named volume:
|
||||
|
||||
```bash
|
||||
docker run -it --rm \
|
||||
-v devbox-uv:/home/developer/.local/share/uv \
|
||||
... \
|
||||
joakimp/opencode-devbox:latest
|
||||
```
|
||||
|
||||
Project virtual environments (`.venv`) are stored in your workspace directory and persist automatically via the `/workspace` bind mount.
|
||||
|
||||
## Using docker-compose
|
||||
|
||||
Create a directory with a `docker-compose.yml` and a `.env` file:
|
||||
@@ -254,6 +289,8 @@ services:
|
||||
- ~/projects:/workspace
|
||||
- ~/.ssh:/home/developer/.ssh:ro
|
||||
- devbox-data:/home/developer/.local/share/opencode
|
||||
# Optional: persist Python/uv installs across restarts
|
||||
# - devbox-uv:/home/developer/.local/share/uv
|
||||
# Mount AWS config for Bedrock SSO (required for amazon-bedrock provider)
|
||||
# - ~/.aws:/home/developer/.aws
|
||||
# Optional: mount opencode config directory (persists config changes across restarts)
|
||||
@@ -265,6 +302,7 @@ services:
|
||||
|
||||
volumes:
|
||||
devbox-data:
|
||||
# devbox-uv:
|
||||
```
|
||||
|
||||
Docker Compose loads `.env` automatically from the same directory. All variables from `.env` are passed to the container via `env_file`. Do **not** hardcode provider settings in the `environment:` section — use `.env` instead.
|
||||
@@ -298,7 +336,7 @@ docker compose run --rm devbox bash # interactive shell
|
||||
- **opencode** — AI coding assistant
|
||||
- **Node.js 22** — for npx-based MCP servers
|
||||
- **AWS CLI v2** — SSO and Bedrock authentication
|
||||
- **Dev tools** — git, git-lfs, ssh, ripgrep, fd, fzf, bat, eza, zoxide, jq, make, curl, wget, neovim 0.12, tmux, htop, tree
|
||||
- **Dev tools** — git, git-lfs, ssh, ripgrep, fd, fzf, bat, eza, zoxide, uv, jq, make, curl, wget, neovim 0.12, tmux, htop, tree
|
||||
- **Non-root user** — runs as `developer` with UID auto-matched to workspace owner (sudo available)
|
||||
|
||||
### OMOS image (`latest-omos`)
|
||||
|
||||
Reference in New Issue
Block a user