writing-skills
writing-skills
Use when creating new skills, editing existing skills, or verifying skills work before deployment
create-r-dockerfileCreate a Dockerfile for R projects using rocker base images. Covers system dependency installation, R package installation, renv integration, and optimized layer ordering for fast rebuilds. Use when containerizing an R application or analysis, creating reproducible R environments, deploying R-based services (Shiny, Plumber, MCP server), or setting up consis…
Independent GitHub snapshot · Automated classification · Original documentation governs
為 R 項目以 rocker 基像建 Dockerfile,含正依管。
| 用案 | 基像 | 尺 |
|---|---|---|
| 最小 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。
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 前已複。
.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 無訛而畢.dockerignore 排無謂之文件-dev 庫。察 install.packages() 之誤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 建