首页

通过 Docker 容器在 VS Code 中进行 R 编程

曾经试图与同事分享 R 代码,却花费大量时间调试”在我机器上能跑”的问题?Docker 容器就像代码的集装箱——将 R 环境、库和依赖打包到密封容器中,在任何地方都能以相同方式运行。此外,Docker Hub 上有数万个预构建镜像,开发者发布的即用环境,免去手动安装软件的麻烦。本教程将教你如何使用 VS Code 和 Docker Desktop 在隔离、可重现的环境中运行 R。

核心概念

准备工作

步骤 1:安装 Docker Desktop

步骤 2:安装 Dev Containers 扩展

步骤 3:使用 GitHub Desktop 克隆 Vibe 项目

步骤 4:在 VS Code 中打开项目

步骤 5:在容器中重新打开

注意:容器自动包含 R 扩展和 languageserver 包。Dockerfile 和 devcontainer.json 会处理这些。

步骤 6:了解容器环境

现在你在 Linux 容器内编写代码。让我们探索一下这意味着什么。

pwd

会看到 /workspaces/vibe - 这是容器内的项目文件夹。

ls

会看到项目中的相同文件:R/、.devcontainer/、README.md 等。

cd ..
ls

只会看到 vibe/ - 容器是隔离的。你无法访问计算机的其他文件夹、桌面或文档。这种隔离确保 R 环境干净且可重现。

cd vibe

步骤 7:逐行运行 R 代码

容器预装了 R 和常用包。让我们运行一个简单的数据分析脚本。

步骤 8:运行应用程序

项目包含一个演示 Shiny 应用,用于创建交互式直方图。

步骤 9:进行简单更改

让我们修改应用,了解开发流程。

titlePanel("My First R Docker App")

步骤 10:了解 Dockerfile(可选)

# choose a Dockerhub base image with R, Shiny Server, and tidyverse packages
FROM rocker/shiny-verse:latest

# 1. System deps commonly needed by R packages
RUN apt-get update && apt-get install -y \
    libcurl4-openssl-dev libssl-dev libxml2-dev git curl && \
    rm -rf /var/lib/apt/lists/*

# 2. R packages for VS Code integration: language server + debugger
RUN R -q -e 'install.packages(c("rstudioapi", "languageserver"), repos="https://cloud.r-project.org")'

# 3. Install Node.js LTS from NodeSource
RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - \
    && apt-get install -y nodejs \
    && npm install -g npm@latest

# 4. Install Claude Code globally
RUN npm install -g @anthropic-ai/claude-code

# 5. Give shiny passwordless sudo for updating Claude Code from VS Code
RUN echo 'shiny ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers && \
    rm -rf /var/lib/apt/lists/*

# Expose Shiny server port
EXPOSE 3838

关键部分:

可用的其他 Rocker 镜像:

更改基础镜像后,重新构建容器以应用更改。

步骤 11:在 Docker 镜像中安装 R 包(可选)

通过 R 控制台(install.packages())安装的包是临时的,重新构建容器时会消失。要使包永久存在,将它们添加到 Dockerfile 中。

library(data.table)

如果加载无错误,则包已永久安装。

下一步

故障排除

工作流程概述

此设置提供专业的 R 开发环境:

日常工作流程

一旦设置完成,这是日常例程:

  1. 启动 Docker Desktop - 打开应用并等待绿色状态指示器(Docker 必须运行)
  2. 打开 VS Code - 启动 VS Code 并打开项目文件夹
  3. 在容器中重新打开 - 如果尚未在容器中,点击绿色图标(左下角)并选择 Reopen in Container
  4. 编写和运行代码 - 编辑 .R 文件,用 Ctrl+Enter/Cmd+Enter 逐行运行,或用 ▶ Run Shiny App 按钮运行 Shiny 应用
  5. 保存工作 - 代码文件(.R、.Rmd)保存到计算机,在会话之间持久存在
  6. 提交和推送 - 使用 GitHub Desktop 提交更改并推送到仓库

什么是 Docker Desktop?

Docker Desktop 是一个让你在计算机上更轻松使用 Docker 的应用。它提供 Docker 所需的后台服务,还有一个可视化窗口,让你查看和管理容器、镜像、存储以及其他 Docker 资源。

可以把 Docker Desktop 看作容器的控制中心。打开 Docker Desktop 时,它会启动 Docker 引擎。Docker 引擎是 Docker 中真正创建和运行容器的部分。通常你不需要直接操作引擎,因为 Docker Desktop 会替你管理它。

Docker Desktop 做什么?

Docker Desktop 承担几项重要工作:

Docker Desktop 在本教程中的作用

有三个部分协同工作:

  1. Docker Desktop 在你的计算机上运行 Docker 引擎。
  2. VS Code 提供编辑器,你在其中编写和运行 R 代码。
  3. Dev Container 提供一个准备好的 Linux 环境,包含 R、R 包以及本项目使用的工具。

当你选择 Reopen in Container 时,VS Code 会请 Docker Desktop 构建或启动项目的容器。应用仍然在你的计算机上运行,但 R 环境位于容器内。这样可以让 R 版本、包和系统工具与计算机的其他部分分开。

Docker Desktop 不会取代 VS Code、R 或 Web 浏览器。它提供运行容器的环境。VS Code 是你工作的地方,R 是你使用的语言,浏览器则是你查看 Shiny 应用的地方。

为什么使用 Docker Desktop?

直接在计算机上安装 R 和所有需要的包,有时会导致版本冲突。一个项目可能需要与另一个项目不同版本的包。Docker Desktop 为每个项目提供独立、可控的环境,帮助避免这些冲突。

例如,如果同学使用相同的项目文件和 Docker 设置,Docker 可以构建一个与你非常接近的环境。这样就不太容易遇到仅仅因为软件版本不同而导致的错误。你的 R 代码和项目文件仍保存在计算机上,而运行它们所需的工具则整理在容器内。

在构建项目或在容器中重新打开项目之前,Docker Desktop 必须已打开并正在运行。如果 Docker Desktop 已关闭,VS Code 将无法启动容器,你可能会看到提示 Docker 未运行的错误。


由 Steven Ge 创建于 2025 年 12 月 7 日。