写在前面的话
在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 #退出虚拟机
共享文件夹
在virtualBox里面设置共享位置和名称,不要自动挂载
进入虚拟机中
docker-machine ssh default
创建一个文件夹
mkdir /home/share/
输入命令,建立主机与虚拟机的共享
sudo mount -t vboxsf share /home/share
.这里的share是在虚拟机设置的时候取的名字,一般默认是share。在主机中丢入文件,去虚拟机中及时查看。
cd /home/share
然后ls
就能看到共享的文件。虚拟机与容器之间建立文件共享,输入
docker run -d -p 3838:3838 -v /home/share:/root/share quantumobject/docker-shiny
.进入容器内的查看共享的文件
docker exec -it <CONTAINER ID> bash
. 或者<name>docker exec -it backstabbing_goodall
PS:通过docker ps
来查看容器的ID和name。验证:
cd /srv/share
然后输入ls
,如果出现共享的文件就说明成功了 :)
若是Ubuntu的容器运行:
docker run -it -v /home/share:/usr/share ubuntu:14.04 /bin/bash
.