Zurück zu Fähigkeiten

create-r-dockerfile

pjt222
Aktualisiert 2 days ago
8 Ansichten
17
2
17
Auf GitHub ansehen
Metaaimcpdesign

Über

Diese Claude-Skill erstellt optimierte Dockerfiles für R-Projekte unter Verwendung von rocker Basis-Images. Sie behandelt Systemabhängigkeiten, die Installation von R-Paketen und renv-Integration mit intelligenter Layer-Anordnung für schnellere Neuerstellungen. Nutzen Sie sie, wenn Sie R-Anwendungen containerisieren, reproduzierbare Umgebungen erstellen oder R-basierte Dienste wie Shiny- oder Plumber-APIs bereitstellen.

Schnellinstallation

Claude Code

Empfohlen
Primär
npx skills add pjt222/agent-almanac -a claude-code
Plugin-BefehlAlternativ
/plugin add https://github.com/pjt222/agent-almanac
Git CloneAlternativ
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/create-r-dockerfile

Kopieren Sie diesen Befehl und fügen Sie ihn in Claude Code ein, um diese Fähigkeit zu installieren

Dokumentation

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 Repository

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

Verwandte Skills

content-collections

Meta

Diese Skill bietet eine produktionsgetestete Einrichtung für Content Collections – ein TypeScript-first-Tool, das Markdown/MDX-Dateien in typsichere Datensammlungen mit Zod-Validierung umwandelt. Verwenden Sie ihn beim Erstellen von Blogs, Dokumentationsseiten oder inhaltsstarken Vite + React-Anwendungen, um Typsicherheit und automatische Inhaltsvalidierung zu gewährleisten. Er behandelt alles von der Vite-Plugin-Konfiguration und MDX-Kompilierung bis hin zur Deployment-Optimierung und Schema-Validierung.

Skill ansehen

polymarket

Meta

Diese Fähigkeit ermöglicht es Entwicklern, Anwendungen mit der Polymarket-Prognosemärkte-Plattform zu erstellen, einschließlich API-Integration für Handel und Marktdaten. Sie bietet außerdem Echtzeit-Datenstreaming über WebSocket, um Live-Trades und Marktaktivitäten zu überwachen. Nutzen Sie sie zur Implementierung von Handelsstrategien oder zur Erstellung von Tools, die Live-Marktaktualisierungen verarbeiten.

Skill ansehen

creating-opencode-plugins

Meta

Diese Fähigkeit unterstützt Entwickler dabei, OpenCode-Plugins zu erstellen, die in über 25 Ereignistypen wie Befehle, Dateien und LSP-Operationen eingreifen. Sie bietet die Plugin-Struktur, Event-API-Spezifikationen und Implementierungsmuster für JavaScript/TypeScript-Module. Nutzen Sie sie, wenn Sie den Lebenszyklus des OpenCode KI-Assistenten mit benutzerdefinierter ereignisgesteuerter Logik abfangen, überwachen oder erweitern müssen.

Skill ansehen

sglang

Meta

SGLang ist ein hochperformantes LLM-Serving-Framework, das sich auf schnelle, strukturierte Generierung für JSON, Regex und agentenbasierte Workflows unter Verwendung seines RadixAttention-Prefix-Cachings spezialisiert. Es bietet deutlich schnellere Inferenz, insbesondere für Aufgaben mit wiederholten Präfixen, was es ideal für komplexe, strukturierte Ausgaben und Mehrfachdialoge macht. Wählen Sie SGLang gegenüber Alternativen wie vLLM, wenn Sie constrained decoding benötigen oder Anwendungen mit umfangreicher Präfix-Weitergabe entwickeln.

Skill ansehen