create-r-dockerfile
关于
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-almanacgit 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 sistemarocker/shiny— Incluye Shiny Serverrocker/shiny-verse— Shiny + tidyverserocker/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 datosoptimize-docker-build-cache- Mejorar tiempos de compilación Docker para proyectos Rcontainerize-mcp-server- Contenerizar servidores MCP basados en Rcreate-dockerfile- Patrones generales de Dockerfile para otros lenguajes
GitHub 仓库
相关推荐技能
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是理想选择。
