create-r-dockerfile
À propos
Cette compétence génère des fichiers Docker pour des projets R en utilisant les images de base rocker. Elle gère les dépendances système, l'installation des paquets R, l'intégration de renv, et optimise l'ordre des couches pour des reconstructions efficaces. Utilisez-la pour conteneuriser des applications R, créer des environnements reproductibles, ou déployer des services basés sur R comme des API Shiny ou Plumber.
Installation rapide
Claude Code
Recommandénpx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/create-r-dockerfileCopiez et collez cette commande dans Claude Code pour installer cette compétence
Documentation
建 R Dockerfile
為 R 項目以 rocker 基像建 Dockerfile,含正依管。
用時
- 將 R 應用或析入容器
- 建可重現之 R 境
- 布 R 服(Shiny、Plumber、MCP 服)
- 建一致之開發境
入
- 必要:有依之 R 項目(DESCRIPTION 或 renv.lock)
- 必要:志(開發、產、服)
- 可選:R 版(默最新穩)
- 可選:所需他系庫
法
第一步:擇基像
| 用案 | 基像 | 尺 |
|---|---|---|
| 最小 R 運 | rocker/r-ver:4.5.0 | ~800MB |
| 含 tidyverse | rocker/tidyverse:4.5.0 | ~1.8GB |
| 含 RStudio Server | rocker/rstudio:4.5.0 | ~1.9GB |
| Shiny 服 | rocker/shiny-verse:4.5.0 | ~2GB |
得: 擇合項需之基像而無贅。
敗則: 若疑用何像,始於 rocker/r-ver(最小),需時加包。全像目參 rocker-org。
第二步:書 Dockerfile
FROM rocker/r-ver:4.5.0
# Install system dependencies
# Group by purpose for clarity
RUN apt-get update && apt-get install -y \
# HTTP/SSL
libcurl4-openssl-dev \
libssl-dev \
# XML processing
libxml2-dev \
# Git integration
libgit2-dev \
libssh2-1-dev \
# Graphics
libfontconfig1-dev \
libharfbuzz-dev \
libfribidi-dev \
libfreetype6-dev \
libpng-dev \
libtiff5-dev \
libjpeg-dev \
# Utilities
git \
curl \
&& rm -rf /var/lib/apt/lists/*
# Install R packages
# Order: least-changing first for cache efficiency
RUN R -e "install.packages(c( \
'remotes', \
'devtools', \
'renv' \
), repos='https://cloud.r-project.org/')"
# Set working directory
WORKDIR /workspace
# Copy renv files first (cache layer)
COPY renv.lock renv.lock
COPY renv/activate.R renv/activate.R
# Restore packages from lockfile
RUN R -e "renv::restore()"
# Copy project files
COPY . .
# Default command
CMD ["R"]
得: Dockerfile 以 docker build -t myproject . 成建。
敗則: 若 apt-get install 建時敗,察目標發行(Debian)之包名。若 renv::restore() 敗,確 renv.lock 與 renv/activate.R 於 restore 前已複。
第三步:建 .dockerignore
.git
.Rproj.user
.Rhistory
.RData
renv/library
renv/cache
renv/staging
docs/
*.tar.gz
得: .dockerignore 排 Git 史、IDE 文件、本 renv 庫、建物於 Docker 脈之外。
敗則: 若 Docker 仍複不欲之文件,驗 .dockerignore 與 Dockerfile 同目錄,用正 glob 式。
第四步:建而試
docker build -t r-project:latest .
docker run --rm -it r-project:latest R -e "sessionInfo()"
得: 容器起,R 版正而諸包可用。sessionInfo() 驗期 R 版。
敗則: 察建誌之系依訛。加缺 -dev 包於 apt-get install 層。
第五步:為產優化
產布宜用多階建:
# Build stage
FROM rocker/r-ver:4.5.0 AS builder
RUN apt-get update && apt-get install -y libcurl4-openssl-dev libssl-dev
COPY renv.lock .
RUN R -e "install.packages('renv'); renv::restore()"
# Runtime stage
FROM rocker/r-ver:4.5.0
COPY --from=builder /usr/local/lib/R/site-library /usr/local/lib/R/site-library
COPY . /app
WORKDIR /app
CMD ["Rscript", "main.R"]
得: 多階建生更小之終像。運階唯含編譯之 R 包,無建具。
敗則: 若包於運階加載敗,確 COPY --from=builder 之庫路合 R 所裝處。於二階以 R -e ".libPaths()" 察。
驗
-
docker build無訛而畢 - 容器起而 R 會話行
- 諸需包可得
-
.dockerignore排無謂之文件 - 像尺合用案
- 唯碼變時重建速(層緩行)
陷
- 缺系依:有編譯碼之 R 包需
-dev庫。察install.packages()之誤 - 層緩失效:裝包前複諸文件則每變碼而失緩。宜先複 lockfile。
- 大像:
apt-get install後用rm -rf /var/lib/apt/lists/*。考多階建。 - 時區問:加
ENV TZ=UTC或裝tzdata以時區感操作 - 根運:產境加非根用者:
RUN useradd -m appuser && USER appuser
例
# Development container with mounted source
docker run --rm -it -v $(pwd):/workspace r-project:latest R
# Plumber API service
docker run -d -p 8000:8000 r-api:latest
# Shiny app
docker run -d -p 3838:3838 r-shiny:latest
參
setup-docker-compose— 協多容器containerize-mcp-server— MCP R 服之特例optimize-docker-build-cache— 進階緩策manage-renv-dependencies— renv.lock 饋入 Docker 建
Dépôt GitHub
Compétences associées
content-collections
MétaCette compétence propose une configuration éprouvée en production pour Content Collections, un outil axé sur TypeScript qui transforme des fichiers Markdown/MDX en collections de données typées de manière sûre avec une validation Zod. Utilisez-la lors de la création de blogs, de sites de documentation ou d'applications Vite + React riches en contenu pour garantir la sécurité de typage et la validation automatique du contenu. Elle couvre tout, de la configuration du plugin Vite et de la compilation MDX à l'optimisation des déploiements et la validation des schémas.
polymarket
MétaCette compétence permet aux développeurs de créer des applications avec la plateforme de marchés prédictifs Polymarket, incluant l'intégration d'API pour le trading et les données de marché. Elle fournit également une diffusion de données en temps réel via WebSocket pour surveiller les transactions en direct et l'activité du marché. Utilisez-la pour mettre en œuvre des stratégies de trading ou pour créer des outils traitant les mises à jour de marché en direct.
creating-opencode-plugins
MétaCette compétence aide les développeurs à créer des plugins OpenCode qui s'interconnectent avec plus de 25 types d'événements tels que les commandes, les fichiers et les opérations LSP. Elle fournit la structure du plugin, les spécifications de l'API événementielle et les modèles d'implémentation pour les modules JavaScript/TypeScript. Utilisez-la lorsque vous avez besoin d'intercepter, de surveiller ou d'étendre le cycle de vie de l'assistant IA OpenCode avec une logique personnalisée pilotée par les événements.
sglang
MétaSGLang est un framework de service LLM haute performance spécialisé dans la génération rapide et structurée pour les workflows JSON, regex et agentiques grâce à son cache de préfixe RadixAttention. Il offre une inférence nettement plus rapide, particulièrement pour les tâches avec des préfixes répétés, ce qui le rend idéal pour les sorties complexes et structurées ainsi que les conversations multi-tours. Choisissez SGLang plutôt que des alternatives comme vLLM lorsque vous avez besoin d'un décodage contraint ou que vous construisez des applications avec un partage étendu de préfixes.
