返回技能列表

create-r-dockerfile

pjt222
更新于 2 days ago
9 次查看
17
2
17
在 GitHub 上查看
aimcpdesign

关于

This Claude Skill generates optimized Dockerfiles for R projects using rocker base images. It handles system dependencies, R package installation, and renv integration with smart layer ordering for faster rebuilds. Use it when containerizing R applications, creating reproducible environments, or deploying R-based services like Shiny or Plumber APIs.

快速安装

Claude Code

推荐
主要方式
npx skills add pjt222/agent-almanac -a claude-code
插件命令备选方式
/plugin add https://github.com/pjt222/agent-almanac
Git 克隆备选方式
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/create-r-dockerfile

在 Claude Code 中复制并粘贴此命令以安装该技能

技能文档

Create R Dockerfile

Dockerfile for R using rocker + dep mgmt.

Use When

  • Containerize R app / analysis
  • Repro R env
  • Deploy R svcs (Shiny, Plumber, MCP)
  • Consistent dev env

In

  • Required: R proj + deps (DESCRIPTION / renv.lock)
  • Required: Purpose (dev/prod/svc)
  • Optional: R ver (def: latest stable)
  • Optional: Extra sys libs

Do

Step 1: Base Img

UseBaseSize
Min Rrocker/r-ver:4.5.0~800MB
Tidyverserocker/tidyverse:4.5.0~1.8GB
RStudio Svrrocker/rstudio:4.5.0~1.9GB
Shinyrocker/shiny-verse:4.5.0~2GB

Got: Base matches reqs, no bloat.

If err: Unsure → rocker/r-ver (min) + add pkgs. See rocker-org catalog.

Step 2: 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"]

Got: docker build -t myproject . builds OK.

If err: apt-get install fail → check pkg names (Debian). renv::restore() fail → ensure renv.lock + renv/activate.R copied before restore.

Step 3: .dockerignore

.git
.Rproj.user
.Rhistory
.RData
renv/library
renv/cache
renv/staging
docs/
*.tar.gz

Got: .dockerignore excludes git, IDE, local renv lib, artifacts.

If err: Build still copies unwanted → verify .dockerignore in same dir as Dockerfile, correct glob.

Step 4: Build + Test

docker build -t r-project:latest .
docker run --rm -it r-project:latest R -e "sessionInfo()"

Got: Container starts, R ver correct, pkgs avail. sessionInfo() confirms.

If err: Check build logs for sys dep err. Add missing -dev pkgs.

Step 5: Prod Optimize

Multi-stage:

# 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"]

Got: Multi-stage → smaller final img. Runtime = compiled R pkgs only.

If err: Pkgs fail load in runtime → lib path in COPY --from=builder must match R install path. Check: R -e ".libPaths()" in both.

Check

  • docker build no err
  • Container starts, R works
  • All req pkgs avail
  • .dockerignore excludes junk
  • Img size reasonable
  • Fast rebuild on code-only change (cache works)

Traps

  • Missing sys deps: Compiled R pkgs need -dev libs. Check install.packages() err msgs
  • Cache invalidation: Copy all files pre-install → cache invalidated on code change. Copy lockfile first.
  • Large imgs: rm -rf /var/lib/apt/lists/* after apt-get install. Multi-stage.
  • Timezone: ENV TZ=UTC / install tzdata for TZ-aware ops
  • Root user: Add non-root prod: RUN useradd -m appuser && USER appuser

Examples

# 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 — orchestrate multi containers
  • containerize-mcp-server — MCP R svrs
  • optimize-docker-build-cache — cache strategies
  • manage-renv-dependencies — renv.lock → Docker

GitHub 仓库

pjt222/agent-almanac
路径: i18n/caveman-ultra/skills/create-r-dockerfile
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

相关推荐技能

content-collections

Content Collections 是一个 TypeScript 优先的构建工具,可将本地 Markdown/MDX 文件转换为类型安全的数据集合。它专为构建博客、文档站和内容密集型 Vite+React 应用而设计,提供基于 Zod 的自动模式验证。该工具涵盖从 Vite 插件配置、MDX 编译到生产环境部署的完整工作流。

查看技能

polymarket

这个Claude Skill为开发者提供完整的Polymarket预测市场开发支持,涵盖API调用、交易执行和市场数据分析。关键特性包括实时WebSocket数据流,可监控实时交易、订单和市场动态。开发者可用它构建预测市场应用、实施交易策略并集成实时市场预测功能。

查看技能

creating-opencode-plugins

该Skill帮助开发者创建OpenCode插件,用于接入命令、文件、LSP等25+种事件。它提供了插件结构、事件API规范和JavaScript/TypeScript实现模式,适合需要拦截操作、扩展功能或自定义事件处理的场景。开发者可通过它快速构建响应式模块来增强OpenCode AI助手的能力。

查看技能

sglang

SGLang是一个专为LLM设计的高性能推理框架,特别适用于需要结构化输出的场景。它通过RadixAttention前缀缓存技术,在处理JSON、正则表达式、工具调用等具有重复前缀的复杂工作流时,能实现极速生成。如果你正在构建智能体或多轮对话系统,并追求远超vLLM的推理性能,SGLang是理想选择。

查看技能