RStudio和Shiny在一个dockerfile中

我正在寻找docker分发一个shiny应用程序,也需要RStudio。 主要目标是在Windows下的医院中轻松安装。 所有需要将字符input黑盒子的东西肯定会在非IT人员的安装过程中失败。

我以前的尝试使用stream浪汉,但是单独安装stream浪汉被certificate是一个障碍。

rocker库,有一个RStudio和一个shiny,并为我自己的安装工作在一起。 不过,我想创build一个组合的应用程序,以便于安装。

什么是推荐的工作stream程? 从RStudio开始,手动添加Shiny? 或者从r-base开始合并来自两个Rocker的dockerfiles代码? 或者使用撰写工具?

有趣的问题,但我不知道我明白从相同的容器服务的shiny的服务器和rstudio服务器实例的优势。

目的是为了使两个容器共享相同的R库(例如,因此不需要分别安装一个包)或者只有一个docker容器而不是两个? 只需要运行两个docker命令而不是一个docker命令似乎并不麻烦,但也许我低估了。

共享底层库似乎是一个有效的目标,但我不认为有一个理想的解决scheme。

我觉得最符合docker的解决scheme就是通过容器编排/撰写工具来完成这个工作。 这是结合单独的服务(例如networking服务器和数据库)而不build立在另一个之上的通常方式。

不幸的是,基于映射卷的编排工具还没有像映射端口那样发达。

设想将rstudio作为卷容器运行:

 docker run --name rstudio -v /usr/local/lib/R/site.library rocker/rstudio true 

(如果你想同时访问RStudio,可以运行这个:)

 docker run --name rstudio -dP -v /usr/local/lib/R/site.library rocker/rstudio 

然后,您可以使用rstudio容器中的site.library代替闪存容器上的site.library,并使用如下命令:

 docker run --volumes-from rstudio -dP rocker/shiny 

不幸的是,这个shiny容器的site.library 。 为了解决这个问题,你需要在不同的地方安装rstudio容器的库,但是对于这个我们已经有了端口链接。 可以这样做,看:

如何映射使用Docker的卷path–volumes-from?

这个问题在摇杆回购中也有一个开放的线索 。

一般来说,Docker的意义在于隔离服务,以便在不影响其他人的情况下对其进行更新/更改。 我的build议是用docker-compose代替。 下面是一个示例docker docker-compose yaml文件,它使用Jason Wilder非常有用的docker-gen在同一服务器上为不同的子域提供rstudio和shiny。 以下使用的所有Rdocker图像均由Rocker或更直接的Rocker Docker Hub提供 。 这些都是非常可靠的,因为德克·埃德尔贝特尔和卡尔·波蒂格尔是这样做的。 在这个例子中,我还包括了RStudio的一些选项,例如设置用户/密码以及用户是否具有root访问权限。 有关使用此Wiki页面上提供的Rocker RStudio图像的更多说明:

更改以下内容:

  • your_user到服务器上的用户名
  • SOME_USER到你想要的RStudio用户名
  • SOME_PASS到你想要的Rstudio密码
  • * .DOMAIN.tld到您的域名,不要忘记为您的子域名添加Alogging。

 nginx1: image: nginx container_name: nginx ports: - "80:80" - "443:443" volumes: - /etc/nginx/conf.d - /etc/nginx/vhost.d - /usr/share/nginx/html - /home/your_user/services/volumes/proxy/certs:/etc/nginx/certs:ro nginx-gen: links: - "nginx1" image: jwilder/docker-gen container_name: nginx-gen volumes: - /var/run/docker.sock:/tmp/docker.sock:ro - /home/your_user/services/volumes/proxy/templates/nginx.tmpl:/etc/docker-gen/templates/nginx.tmpl:ro volumes_from: - nginx1 entrypoint: /usr/local/bin/docker-gen -notify-sighup nginx -watch -only-exposed -wait 5s:30s /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf rstudio: links: - "nginx1" image: rocker/hadleyverse container_name: rstudio ports: - "8787:8787" environment: - VIRTUAL_PORT=8787 - ROOT=TRUE - VIRTUAL_HOST=rstudio.DOMAIN.tld - USER=SOME_USER - PASSWORD=SOME_PASS shiny: links: - "nginx1" image: rocker/shiny container_name: shiny environment: - VIRTUAL_HOST=shiny.DOMAIN.tld volumes: - /home/your_user/services/volumes/shiny/apps:/srv/shiny-server/ - /home/your_user/services/volumes/shiny/logs:/var/log/ - /home/your_user/services/volumes/shiny/packages:/home/shiny/ 

添加诸如博客等更多服务是微不足道的,例如,只需遵循该模式或在互联网上search您的服务的docker-compose版本并添加即可。

我已经开发出了一个可用的单一docker

  • [R
  • RStudio(服务器)
  • shiny的服务器(免费版)

我的build立完全是出于与@Dieter Menne提到的相同的原因。 对于操作系统来说,这可能并不理想,但对于开发者来说却是非常好的(特别是如果团队成员使用不同的环境,比如mac,windows等)。

这是在Centos 6上,因为这是env。 我在工作中使用。

这是dockerfile:

 FROM centos:centos6.7 MAINTAINER enzo smartinsightsfromdata RUN yum -y install epel-release RUN yum update -y && yum clean all # RUN yum reinstall -y glibc-common RUN yum install -y locales java-1.7.0-openjdk-devel tar # Misc packages RUN yum groupinstall -y "Development Tools" # R devtools pre-requisites: RUN yum install -y wget git xml2 libxml2-devel curl curl-devel openssl-devel WORKDIR /home/root RUN yum install -y R RUN wget http://cran.r-project.org/src/contrib/rJava_0.9-7.tar.gz RUN R CMD INSTALL rJava_0.9-7.tar.gz RUN R CMD javareconf \ && rm -rf rJava_0.9-7.tar.gz #----------------------- # Add RStudio binaries to PATH # export PATH="/usr/lib/rstudio-server/bin/:$PATH" ENV PATH /usr/lib/rstudio-server/bin/:$PATH ENV LANG en_US.UTF-8 RUN yum install -y openssl098e supervisor passwd pandoc # RUN wget http://download2.rstudio.org/rstudio-server-rhel-0.99.484-x86_64.rpm # Go for the bleading edge: RUN wget https://s3.amazonaws.com/rstudio-dailybuilds/rstudio-server-rhel-0.99.697-x86_64.rpm RUN yum -y install --nogpgcheck rstudio-server-rhel-0.99.697-x86_64.rpm \ && rm -rf rstudio-server-rhel-0.99.484-x86_64.rpm RUN groupadd rstudio \ && useradd -g rstudio rstudio \ && echo rstudio | passwd rstudio --stdin RUN R -e "install.packages(c('shiny', 'rmarkdown'), repos='http://cran.r-project.org', INSTALL_opts='--no-html')" RUN wget https://download3.rstudio.org/centos5.9/x86_64/shiny-server-1.4.0.756-rh5-x86_64.rpm RUN yum -y install --nogpgcheck shiny-server-1.4.0.756-rh5-x86_64.rpm \ && rm -rf shiny-server-1.4.0.756-rh5-x86_64.rpm RUN mkdir -p /var/log/shiny-server \ && chown shiny:shiny /var/log/shiny-server \ && chown shiny:shiny -R /srv/shiny-server \ && chmod 777 -R /srv/shiny-server \ && chown shiny:shiny -R /opt/shiny-server/samples/sample-apps \ && chmod 777 -R /opt/shiny-server/samples/sample-apps COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf RUN mkdir -p /var/log/supervisor \ && chmod 777 -R /var/log/supervisor EXPOSE 8787 3838 CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"] 

这是supervisord.conf文件的外观:

 [supervisord] nodaemon=true logfile=/var/log/supervisor/supervisord.log pidfile = /tmp/supervisord.pid [program:rserver] user=root command=/usr/lib/rstudio-server/bin/rserver stdout_logfile=/var/log/supervisor/%(program_name)s.log stderr_logfile=/var/log/supervisor/%(program_name)s.log startsecs=0 autorestart=false [program:shinyserver] user=root command=/usr/bin/shiny-server stdout_logfile=/var/log/supervisor/%(program_name)s.log stderr_logfile=/var/log/supervisor/%(program_name)s.log autorestart=false 

它可以在我的github页面:smartinsightsfromdata

我还开发了一个适用于centos的shiny服务器专业版(使用shiny的服务器临时版,仅在45天内有效)。

有些不幸的是,没有确切的答案,这一切都取决于你将要寻找多less可重用性,以及是否保持上游的基本形象。 这也是图像大小的折衷,更多的层次,更大的图像得到的结果。