
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
本项目包含INWT项目的配置。如果您未与我们合作,可参考我们将R应用程序部署到生产环境的最佳实践。若您需要为自己的应用程序构建干净的Docker容器,请勿从此处开始:建议访问https://hub.docker.com/u/rocker/%EF%BC%88%E6%88%91%E4%BB%AC%E7%9A%84%E9%95%9C%E5%83%8F%E4%B9%9F%E6%BA%90%E4%BA%8E%E6%AD%A4%EF%BC%89%E3%80%82%E5%9C%A8%E6%AD%A4%E5%AF%B9rocker%E9%A1%B9%E7%9B%AE%E8%A1%A8%E7%A4%BA%E6%84%9F%E8%B0%A2%EF%BC%8C%E4%BD%A0%E4%BB%AC%E7%9A%84%E5%B7%A5%E4%BD%9C%E9%9D%9E%E5%B8%B8%E5%87%BA%E8%89%B2%EF%BC%81
本项目的容器可在以下位置获取:
通过以下命令启动镜像:
bashdocker pull inwt/r-base:3.4.4 docker run -it inwt/r-base:3.4.4
R功能强大但缺乏标准化部署模型。Java通过JVM抽象操作系统差异,可将应用编译为可分发单元(jar)并在任何支持JVM的操作系统上运行。我们希望为R应用提供类似的分发模型:一个可执行、可测试的单元,能部署到客户环境或内部机器。
R本身稳定且跨平台,我们多年来在生产环境中无Docker也能使用R。但客户IT支持的特定操作系统选择和版本限制使我们意识到,控制应用程序的运行时环境能显著提升稳定性。
生产环境中,镜像构建后即成为"静态"单元,不会拉取更新或受代码库、包变化影响。容器应"无状态":每个容器实例在完成单次运行后即被删除(如shiny应用会话结束或分析完成时)。每次运行应完全独立,且绝不在容器内部存储数据。
Docker镜像基于Dockerfile构建,该文件包含构建过程中执行的所有命令。我们通常基于上述预定义镜像构建,而非从零开始。以下是一个典型的Dockerfile示例:
dockerfileFROM inwt/r-batch:3.4.4 ADD . . RUN rm -vf .Rprofile && \ installPackage CMD ["Rscript", "inst/R_Code/someScript.R"]
FROM:指定基础镜像ADD:将文件和目录复制到镜像文件系统RUN:执行命令(此处删除.Rprofile并安装R包,installPackage为预定义函数)CMD:设置容器默认行为(此处通过Rscript调用脚本)删除.Rprofile是因为它可能覆盖容器内预配置的CRAN仓库和库路径。
更多Dockerfile指令可参考官方文档,建议同时阅读Dockerfile最佳实践。
.dockerignore用于显式排除构建非必需文件,类似.Rbuildignore或.gitignore。Docker构建的第一步是将"构建上下文"复制到镜像,上下文应尽可能小以减少传输开销。详见.dockerignore文档。
示例:
lib* deps largeFile.csv
使用容器需完成两步:构建镜像和启动容器。
本地开发的推荐默认命令:
bashdocker build --pull -t tmp <Dockerfile路径> && docker run --rm -it --network host tmp
详细参数说明:
bashdocker build \ --pull \ # 尝试拉取FROM指令中镜像的新版本 -t tmp \ # 为镜像指定标签"tmp" <Dockerfile路径> \ # 如"."表示当前目录 && docker run \ --rm \ # 运行完成后删除容器 -it \ # 交互式会话,可保留在控制台中 --network host \ # 使容器进程与主机共享IP tmp # 镜像名称(引用上述标签)
这些命令将构建镜像并执行Dockerfile中CMD定义的命令。
bashdocker ps # 显示所有运行中的容器 docker logs <container> # 查看容器输出日志 docker attach <container> # 连接到运行中的容器 docker run -it --rm <image> bash # 在容器中启动bash(构建失败时非常有用!) docker exec -i -t <container> /bin/bash # 在已运行的容器中打开新的bash终端
bashdocker build -t example-app ./examples/app docker run --rm -p 3838:3838 example-app # 映射端口 docker run --rm --network host example-app # 共享主机网络
bashdocker build -t example-batch ./examples/batch docker run --rm example-batch # 运行默认命令 docker run --rm example-batch Rscript main.R # 运行指定脚本 docker run --rm example-batch Rscript main.R arg1 arg2 # 带参数运行脚本
无需本地Dockerfile(但使用本地Dockerfile更稳定)。可将容器作为运行时环境,执行R CMD check .。-v参数用于挂载目录(卷),$PWD为当前目录,/app为容器内的工作目录。注意-v会授予写入权限!
bashcd /path/to/your/package docker run --rm -v $PWD:/app --user `id -u`:`id -g` inwt/r-batch:3.4.4 check docker run --rm -v $PWD:/app --user `id -u`:`id -g` inwt/r-batch:3.5.1 check
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务