Docker-Shiny使用笔记1

1133 查看

写在前面的话

HarryZhu写的系列的docker文章后,我也开始心动了,准备尝试一下。周末在家下了半天,终于下载成功了,然后也跑起来。Docker之前只是听说是一个容器技术,微型虚拟机,然后在这之前并没有接触过,所以不得不硬着头皮看英文的帮助文档,借助SF的这个好用markdown来做笔记,充当专栏文章。

安装问题

谢谢 @HarryZhu 的指导,可以采用Daocloud镜像加速服务,免得要下一下午。。

本人在安装的时候主要碰到的问题就是下载不下来。不过还是有一些小技巧的。下面来简单说一下,防止后来人入坑。PS:英文好的同学可以按照这个教程来:https://docs.docker.com/windows/step_one/

Docker toolbox下载问题

我默认看这篇文章的都是Windows党。。

既然是Windows党,那就要折腾一下了。首先是需要下一个toolbox。因为是放在amazonAWS云服务器上的,所以会间歇性下载失败,我建议去github的release页面找到相应的版本,右键复制链接,然后用迅雷下载,速度可能会出乎你的想象。:-)

Docker-shiny下载问题

这是一个头痛的问题。目前有两个较火的image,一个是rocker开发的,另外一个是quantumobject开发的,网址分别是 https://hub.docker.com/r/rocker/shiny/https://hub.docker.com/r/quantumobject/d... 。我去了对应的github看了一下,发现quantumobject最近才更新的,所以决定用最新的。来到对应的Docker Hub地址,按照步骤输入代码,剩下的就是拼人品和网速的时候了。
代码还是要贴一贴的:

$ docker run -d -p 3838:3838 quantumobject/docker-shiny

更多有用的命令请对应参考 rocker/Rstudio-server/wiki

初步操作

恭喜你进入到这一步,相信也是跟我一样等了不知道多久才下好了。这个docker image一共是346M,所以要做好心理准备。

开始

你需要知道的两个开始有用的命令:

$ docker-machine ip default
$ docker ps
$ dokcer images

第一条命令是显示shiny-server的端口在哪里,我的是 192.168.99.100,意味着我需要在这里http://192.168.99.100:3838/查看shiny的效果。打开主页,你发现一个欢迎页面。这个其实是开发这个docker image的作者写的一个index.html,我后面会讲到如何发现的。
第二条命令是查看机器的ID CONTAINER ID 用于进入root进行下一步操作。
第三条命令是查看目前docker里面的打包好的image。

进阶

知道了ID后就可以进行相应的操作了。小赵我的container ID非常奇怪,是4b13fe05ac8e.但是没有关系,输入下面命令就可以了

$ docker-machine ls
$ docker-machine ssh default
$ docker exec -it 4b13fe05ac8e bash
root@4b13fe05ac8e:/# cd srv/shiny-server
root@4b13fe05ac8e:/srv/shiny-server# ls

examples  index.html  sample-apps

可以看到在shiny-server的文件夹下有index.html,另外还有两个文件夹,大家可以去对应的端口看看:http://192.168.99.100:3838/examples/,会发现有十几个shiny的例子,对着例子研究一遍,相信就能做初步做一个shinyapp了。

进入到了容器内部后,接下来就是Linux的操作命令了,小赵来记录几条有用的命令,大家可以试一试,玩一玩

#查看当前文件夹
ls -F 
#切换到上一级文件夹
cd .. 
#查看文件
cat <文件名>
head <文件名>
#关机
shutdown -h now 
#还可以定时关机
shutdown -h hours:minutes

容器镜像启动/停止/保存

$ docker ps -a
# 注意names
$ docker stop backstabbing_goodall
# 停止镜像
$ docker start backstabbing_goodall
# 启动镜像
#`-i` 表示需要交互支持。这里没有,故不需要加上。
Ctrl + D #退出虚拟机

共享文件夹

  1. 在virtualBox里面设置共享位置和名称,不要自动挂载

  2. 进入虚拟机中 docker-machine ssh default

  3. 创建一个文件夹 mkdir /home/share/

  4. 输入命令,建立主机与虚拟机的共享 sudo mount -t vboxsf share /home/share .这里的share是在虚拟机设置的时候取的名字,一般默认是share。

  5. 在主机中丢入文件,去虚拟机中及时查看。cd /home/share 然后 ls就能看到共享的文件。

  6. 虚拟机与容器之间建立文件共享,输入 docker run -d -p 3838:3838 -v /home/share:/root/share quantumobject/docker-shiny .

  7. 进入容器内的查看共享的文件 docker exec -it <CONTAINER ID> bash. 或者<name> docker exec -it backstabbing_goodall PS:通过docker ps来查看容器的ID和name。

  8. 验证:cd /srv/share 然后输入 ls,如果出现共享的文件就说明成功了 :)

若是Ubuntu的容器运行: docker run -it -v /home/share:/usr/share ubuntu:14.04 /bin/bash .

参考资料:http://docs.daocloud.io/faq/docker101