返回技能列表

create-r-dockerfile

pjt222
更新于 2 days ago
8 次查看
17
2
17
在 GitHub 上查看
general

关于

This skill creates Dockerfiles for R applications using rocker base images and renv for dependency management. It's designed for containerizing R packages, Shiny apps, or analysis pipelines to ensure reproducible builds. Use it when you need to deploy R-based projects with consistent, production-ready containerization.

快速安装

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 中复制并粘贴此命令以安装该技能

技能文档


name: create-r-dockerfile locale: es source_locale: en source_commit: 6f65f316 translator: claude-sonnet-4-6 translation_date: 2026-03-16 description: > Crear un Dockerfile para aplicaciones R utilizando imágenes base rocker, gestión de dependencias con renv, y mejores prácticas para compilación reproducible. Usar cuando se necesite contenerizar un paquete R, una aplicación Shiny, o un pipeline de análisis para despliegue reproducible. license: MIT allowed-tools: Read Write Edit Bash Grep Glob metadata: author: Philipp Thoss version: "1.0" domain: containerization complexity: basic language: multi tags: docker, r, rocker, renv, containerization

Crear R Dockerfile

Crear un Dockerfile para aplicaciones R con imágenes base rocker y gestión de dependencias reproducible.

Cuándo Usar

  • Contenerizando un paquete R para despliegue reproducible
  • Desplegando una aplicación Shiny en Docker
  • Creando pipelines de análisis reproducibles
  • Compartiendo entornos R con miembros del equipo
  • Integrando código R en pipelines CI/CD

Entradas

  • Requerido: Código fuente R (paquete, script o aplicación Shiny)
  • Requerido: Lista de dependencias R (DESCRIPTION o renv.lock)
  • Opcional: Requisitos de paquetes del sistema (libcurl, libxml2, etc.)
  • Opcional: Archivos de configuración (.Renviron, .Rprofile)
  • Opcional: Restricciones de imagen base (versión de rocker, variante)

Procedimiento

Paso 1: Seleccionar Imagen Base Rocker

Elegir la imagen rocker apropiada según las necesidades del proyecto.

# Para scripts R y paquetes
FROM rocker/r-ver:4.4.0

# Para aplicaciones Shiny
FROM rocker/shiny-verse:4.4.0

# Para desarrollo con RStudio
FROM rocker/rstudio:4.4.0

# Para ciencia de datos con tidyverse
FROM rocker/tidyverse:4.4.0

Criterios de selección de imagen:

  • rocker/r-ver — R base mínimo (más pequeña, para producción)
  • rocker/tidyverse — Incluye tidyverse y dependencias del sistema
  • rocker/shiny — Incluye Shiny Server
  • rocker/shiny-verse — Shiny + tidyverse
  • rocker/rstudio — Incluye RStudio Server

Esperado: Imagen base seleccionada coincide con los requisitos del proyecto, la versión de R anclada para reproducibilidad.

En caso de fallo: Verificar versiones disponibles en Docker Hub (docker search rocker), asegurar que la versión de R coincide con el desarrollo local, considerar restricciones de tamaño de imagen.

Paso 2: Instalar Dependencias del Sistema

Agregar bibliotecas del sistema requeridas por los paquetes R.

RUN apt-get update && apt-get install -y --no-install-recommends \
    libcurl4-openssl-dev \
    libssl-dev \
    libxml2-dev \
    libgit2-dev \
    libfontconfig1-dev \
    libharfbuzz-dev \
    libfribidi-dev \
    libfreetype6-dev \
    libpng-dev \
    libtiff5-dev \
    libjpeg-dev \
    && rm -rf /var/lib/apt/lists/*

Esperado: Todas las dependencias del sistema instaladas, la capa limpia no tiene archivos de caché.

En caso de fallo: Identificar bibliotecas faltantes desde errores de instalación de paquetes R (install.packages() mostrará qué falta), buscar el nombre del paquete Debian para la biblioteca requerida.

Paso 3: Configurar Gestión de Dependencias con renv

Usar renv para la instalación reproducible de paquetes.

# Instalar renv
RUN R -e "install.packages('renv', repos='https://cloud.r-project.org')"

# Copiar archivos de bloqueo primero (caché de capas Docker)
WORKDIR /app
COPY renv.lock renv.lock
COPY .Rprofile .Rprofile
COPY renv/activate.R renv/activate.R
COPY renv/settings.json renv/settings.json

# Restaurar paquetes desde lockfile
RUN R -e "renv::restore()"

# Copiar código de la aplicación (después de paquetes para mejor caché)
COPY . .

Sin renv (alternativa):

RUN R -e "install.packages(c('shiny', 'dplyr', 'ggplot2'), repos='https://cloud.r-project.org')"

Esperado: Paquetes R instalados de forma reproducible desde renv.lock, caché de capas Docker funciona en compilaciones subsecuentes.

En caso de fallo: Ejecutar renv::snapshot() localmente antes de compilar, verificar que renv.lock está actualizado, asegurar que la versión de R en Docker coincide con la versión de renv.lock.

Paso 4: Configurar Punto de Entrada

Definir cómo se ejecuta la aplicación.

Para una aplicación Shiny:

EXPOSE 3838
CMD ["R", "-e", "shiny::runApp('/app', host='0.0.0.0', port=3838)"]

Para un script R:

CMD ["Rscript", "main.R"]

Para un paquete R (ejecución de tests):

CMD ["R", "CMD", "check", "--no-manual", "."]

Esperado: El contenedor se inicia y ejecuta la aplicación R correctamente, los puertos expuestos coinciden con la configuración de la aplicación.

En caso de fallo: Verificar que la aplicación se ejecuta localmente primero, comprobar los logs del contenedor (docker logs <container>), asegurar que los paths de los archivos dentro del contenedor son correctos.

Paso 5: Compilar y Probar

Compilar la imagen Docker y verificar que funciona.

# Compilar imagen
docker build -t mi-app-r:latest .

# Ejecutar contenedor
docker run -p 3838:3838 mi-app-r:latest

# Ejecutar con variables de entorno
docker run -e MI_VARIABLE=valor -p 3838:3838 mi-app-r:latest

# Ejecutar interactivamente para depuración
docker run -it mi-app-r:latest R

Esperado: La imagen se compila exitosamente, el contenedor se ejecuta sin errores, la aplicación es accesible en el puerto configurado.

En caso de fallo: Revisar la salida de compilación para errores de instalación de paquetes, verificar la disponibilidad de puertos, comprobar la asignación de memoria del contenedor (R puede necesitar más RAM).

Validación

  • La imagen Docker se compila sin errores
  • El contenedor se inicia y ejecuta la aplicación correctamente
  • Las dependencias R coinciden con el entorno de desarrollo local
  • La caché de capas Docker funciona (recompilaciones rápidas cuando solo cambia el código)
  • El tamaño de la imagen es razonable (considerar compilación multi-etapa para producción)
  • Las variables de entorno se manejan correctamente

Errores Comunes

  • Imagen demasiado grande: Usar compilación multi-etapa o imagen base más pequeña. Limpiar cachés de apt en la misma capa RUN.
  • renv.lock desactualizado: Siempre ejecutar renv::snapshot() localmente antes de compilar la imagen Docker.
  • Fallo de instalación de paquetes: Generalmente causado por dependencias del sistema faltantes. Revisar mensajes de error para identificar la biblioteca requerida.
  • Caché de capas no funciona: Copiar archivos de dependencias antes del código fuente. COPY de renv.lock antes de COPY del código de la aplicación.
  • Inconsistencia de versión de R: Anclar la versión de R en la imagen base para coincidir con el entorno de desarrollo.

Habilidades Relacionadas

  • setup-docker-compose - Orquestar contenedores R con servicios de base de datos
  • optimize-docker-build-cache - Mejorar tiempos de compilación Docker para proyectos R
  • containerize-mcp-server - Contenerizar servidores MCP basados en R
  • create-dockerfile - Patrones generales de Dockerfile para otros lenguajes

GitHub 仓库

pjt222/agent-almanac
路径: i18n/es/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是理想选择。

查看技能