前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >「R」R Docker 教程(续)

「R」R Docker 教程(续)

作者头像
王诗翔呀
发布2020-07-30 11:11:54
1K0
发布2020-07-30 11:11:54
举报
文章被收录于专栏:优雅R优雅R

❝接「R」R Docker 教程❞

第五课:Dockerfile

前面我们学习了一个可以在 Docker 中运行 RStudio 的基础镜像,学习如何使用 docker commit 修改镜像的内容。这是一个非常棒的技术,它让我们可以进行重复,但如果我们想要更简单地修改镜像中的内容,并有一份清晰的记录,该怎么办呢?这就是 Dockerfile 的用武之地了。

FROM rocker/verse:latest

这告诉 Docker 以 rocker/verse 基础镜像作为开始。FROM 命令必须是第一条指令。

接下来,让我们基于该基础镜像添加一层,让 gapminder 提取安装好可以直接使用:

RUN R -e "install.packages('gapminder', repos = 'http://cran.us.r-project.org')"

RUN 命令可以执行 Shell 命令,这个例子中,我们直接通过 Shell 调用包安装命令。保存你的 Dockerfile,返回终端,现在我们可以利用下面的命令构建一个自定义镜像:

docker build -t my-r-image .

-t my-r-image 指定镜像名字(要小写),. 指定构建镜像所需要的资源来源,这里指当前目录。查看镜像:

docker images

现在你可以运行你的镜像:

docker run --rm -p 8787:8787 my-r-image

在 RStudio 控制台中尝试运行:

library('gapminder')
gapminder

现在该包已经是直接可以使用了!

有时候我们想要添加一些静态文件到镜像中,这可以使用 ADD 命令:

ADD data/gapminder-FiveYearData.csv /home/rstudio/
高级技巧:缓存层

在构建和重构建你的 Docker 镜像时,你可能注意到了类似下面的输出:

Step 2 : RUN R -e "install.packages('gapminder', repos = 'http://cran.us.r-project.org')"
 ---> Using cache
 ---> fa9be67b52d1

注意到使用的是命令的缓存版本。当你重新构建映像时,Docker 会检查该映像的以前版本,以查看以前是否执行了相同的命令;每一个步骤都被保存为一个单独的层,Docker 非常聪明,可以重用那些层,如果它们没有改变,并且和前面一样的顺序。因此,一旦你弄清楚了你的安装过程的一部分(特别是如果它是一个缓慢的部分),把它放在你的Dockerfile的顶部,不要在这些行上面或中间放任何东西,特别是那些经常变化的东西;这可以大大加快你的构建过程。

❝简单的说,重构建只修改有变动的步骤,如果很多命令没有问题,尽量放到顶部。 ❞

小结

本节,我们学习了如何组合一个 Dockerfile 用于按我们自己的想法构建镜像,包括 3 个命令:

  • FROM 指定基础镜像
  • RUN 运行命令
  • ADD 添加文件

使用 docker build -t my-r-image . 构建。

❝小抄:

  • https://dmitryfrank.com/projects/docker-quick-ref
  • https://dockerlux.github.io/pdf/cheat-sheet-v2.pdf

第六课:分享你的分析

既然我们已经学会了如何利用 Dockerfile,我们就能够将我们所有的分析发给合作者。我们将分享一个包含运行我们分析的所有依赖的镜像。

我们通过 Dockerfile 构建该镜像。让我们还是以之前使用过的 rocker 镜像开始。这一次我们使用指定的 R 版本,通过这里[1]查看所有可获取的镜像列表。版本标签在可重复性分析中非常有用。

FROM rocker/verse:3.3.2

作为分析的一部分,我们将使用 gapminder 数据集,添加下面的内容:

RUN R -e "install.packages('gapminder', repos = 'http://cran.us.r-project.org')"

接下来将我们的分析写成脚本并将其添加到 Dockerfile 中。

library(ggplot2)
library(gapminder)

life_expentancy_plot <- ggplot(data = gapminder) + 
    geom_point(aes(x = lifeExp, y = gdpPercap, colour = continent)) 

将其添加到 Docker 镜像中的指定目录中:

ADD analysis.R /home/rstudio/

现在我们可以构建这个镜像然后检查是否我们已经具备分享的一些内容:

docker build -t my-analysis .

查看我们的分析镜像:

docker images

启动镜像:

docker run -dp 8787:8787 my-analysis

太好了,我们的分析脚本在里面,而且数据包也已经安装好了。

现在将分析推送到 dockerhub。

创建仓库后,使用下面的命令进行登录。

docker login --username=yourhubusername --email=youremail@company.com

检查镜像 ID:

docker images
REPOSITORY                         TAG                 IMAGE ID            CREATED             SIZE
my-analysis                      latest              dc63d4790eaa        2 minutes ago       3.164 GB

给要提交的镜像打标签:

docker tag dc63d4790eaa yourhubusername/gapminder_my_analysis:firsttry

推送到你创建好的仓库:

docker push yourhubusername/gapminder_my_analysis

现在你的镜像任何人都可以使用了。

合作者通过下面的命令可以下载它:

docker pull yourhubusername/gapminder_my_analysis:firsttry

更多资料:

  • https://github.com/collabnix/dockerlabs

Reference

[1]这里: https://hub.docker.com/r/rocker/verse/tags/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 优雅R 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第五课:Dockerfile
    • 小结
    • 第六课:分享你的分析
      • Reference
      相关产品与服务
      容器镜像服务
      容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档