众所周知,conda和docker是进行快速软件安装、平台布置的两大神器,通过这个软件,在终端前敲几个命令即能安装软件就,出了问题也不会影响到系统配置,能够很轻松的还原和重建。
不过,虽说类似rstudio或者jupyter lab这样的分析平台,已经有别人已经做好的镜像,但是通常是最小化安装,常有系统软件动态库缺失,直接后果是导致部分R包不能安装,而且有时要让不同的镜像协同工作时,目录的映射,权限的设置会让没有经验的人犯晕。比如jupyterlab通常是以root权限运行,生成的文件用rstudio打开就不能保存。
为了克服上述问题,本人设计了一个docker image,集成了rstudio server、jupyter lab、ssh server、code server,可用于数据分析或生信分析平台的快速布置,也可供linux初学者练习用。
- 直接pull(建议使用这种方法)
docker pull leoatchina/datasci
- build docker镜像
要先装好
docker-ce和git。
- 基于ubuntu16.04
- 安装了大量编译、编辑、下载、搜索等用到的工具和库
- 安装了最新版
miniconda3,Rstudio-server - 安装了
ssh-server,code-server - 用
supervisor启动后台web服务 - 美化bash界面
- install_scripts下面的脚本为我收集的一些R包和conda生信软件的安装脚本
- 运行时可以自定义用户名, 用
WKUSER变量指定,默认是datasci。 可指定不小于1000的UID,默认为1000。 jupyterlab和rstudio和code-server都是以上述用户权限运行,这样就解决了原来文件权限不一致的问题,默认密码是datasci, 可用PASSWD变量指定。ssh-server可用root或者自定义用户登陆 ,root密码默认和自定义用户密码一致,可用ROOTPASSWD变量另外指定。由于jupyterlab非root权限,因此,如不开放ssh端口不以root连入,不能装插件,也不能用apt等装系统软件,只能往自己的用户目录下用conda命令装软件 ,一定程度上提高了安全性。- 我是如何解决权限问题的请打开entrypoint.sh这个启动脚本学习。
jupyterlab里集成了table of content,variableinspect,drawio等插件, 使用体验已接近rstudio。- 内置
neovim、node、yarn,uctags、gtags、ripgrep等软件,能在ssh bash环境下进行用vim进行代码编写。- 此处推荐下本人的leoatchina的vim配置使用,接近一个轻型IDE,有按键提示,高亮、补全、运行、检查一应具全。
- 内置
tmux。 这里又推下本人的配置 tmux config- ln -s leoatchina-tmux/.tmux.conf ~/.tmux.conf
Alt+I插入新tab,Alt+P往前翻,Alt+N往后翻Alt+Shift+I关闭当前tab,Alt+Shift+P往前移,Alt+Shift+N往后移- 先导键是
M-b - 还有其他一些快捷键见源代码学习
在实际工作中发现因为jupyterlab服务,是由root账户用以supervisor程序以非root权限启动后,会出现一系列问题,所以现在改用手动启动,相应配置文件直接写入到/opt/config/jupyter_lab_config.py中手动启动,启动后密码同rstudio server
用ssh进入后,命令行jupyter lab --config=/opt/config/jupyter_lab_config,然后访问8888端口
我更喜欢启动tmux后再启动jupyter lab, 这样能保证在关掉ssh终端后jupyterlab仍然在运行 。
- 通过改进supervisor的启动代码,code-server也可以普通用户身份自启动
- code-server 3.5.0要解决ssh证书问题,比较麻烦,还是用3.4.1版本
- 开放端口:
- 8888: for jupyter lab
- 8787: for rstudio server
- 8686: for code-server
- 8585: for ssh-server
- 访问密码:
- 见dockerfile里的
ENV PASSWD=datasci - 运行时可以修改密码
- 见dockerfile里的
- 目录:
- 默认
/home/datasci或者/home/你指定的用户名,以下以用户名为datasci为例 /root目录
- 默认
很多人反应看不明白,那好吧直接给你一个配置文件,首先要安装好docker和docker-compose
git clone http://gitee.com/leoatchina/leoatchina-datasci.git
cd leoatchina-dataci
docker-compose -f bioinfo.yml down && docker-compose -f bioinfo.yml up -d
WINDOWS下把上面的&& 换成 ;, 然后打开http://127.0.0.1:8787, http://127.0.0.1:8686, 用户名和密码都是bioinfo
docker-compose -f datasci.yml up -ddocker-compose.yml的详细内容如下
version: "3" # xml版本
services:
datasci:
image: leoatchina/datasci:latest
environment:
- PASSWD=yourpasswd # PASSWD
- ROOTPASSWD=rootpasswd # 区分普通用户的root密码,如没有,和普通用户相同
- WKUSER=datasci # 指定用户名
- WKUID=23333 # 指定用户ID, 默认是1000
- WKGID=23333 # 指定用户GROUPID,默认是1000
ports: # 端口映射,右边是container里的端口,左边是实际端口
- 8787:8787
- 8888:8888
- 8686:8686
- 8585:8585
volumes: # 位置映射,右docker内部,左实际
- ./pkgs:/opt/miniconda3/pkgs # 这个不映射在某些低级内核linux上用conda安装软件时会有问题
- ./datasci:/home/datasci # 工作目录, 要和上面的WKUSER一致
- ./log:/opt/log # 除rstudio外的log目录
- ./root:/root # root目录
container_name: datasci
如上,会生成一个名为datasci的container。
如在启动时想安装其他软件,可以在运行时用build指定一个放有Dockerfile的目录
以上面的yml文件为基础,把image这一行换成build: ./build, 在./build目录下建立Dockerfile ,运行时就会安装tensorflow, opencv
FROM leaotchina/datasci:latest
RUN pip install -q tensorflow_hub
RUN conda install tensorflow && conda install -c menpo opencv
不推荐这种方法,请自行研究如何
- 默认密码各个服务都一样为
datasci,可在yml文件里调整 ssh-server端口8585,用户名是root和datasci, 注意root密码可以和普通用户不一致- jupyterlab, 通过
file->new->terminal输入bash,就会打开一个有高亮的 shell环境 - rstudio
- code-sever, 要忽略掉
warning才能打开 - 以此,就可快速布置软件环境并有以下好处
- 启动分析流程后,发现代码写错了要强行结束时,只要删除
container,不需要一个个去kill进程 - 在另一个机器上快速搭建分析环境,把已经装上的软件复制过去就能搭建好分析环境。
- 可以用
ssh登陆container直接进行代码编写
rstudio和code-server的插件都会放到/home/datasci下- 用
jupyterlab labextension install安装jupyterlab的插件, 最后要build
20201116, 回头来看当初还是认识较浅,应该通过yml文件来安装自己的软件包并控制版本,在bioinfo.yml文件里里我放入了可能要用到的生信软件,conda
env create --file bioinfo.yml就能安装
众所周知,bash在启动时,会加载用户目录下的.bashrc进行一些系统变量的设置,同时又可以通过source命令加载指定的配置。本镜像内置的.bashrc会source$HOME下面的.configrc文件,可以在在里面自行设置。能达到安装的软件和container分离, 在删除container时不删除安装的软件的目的
各位在学习其他conda教程时,经常会学到conda create -n XXX新建一个运行环境以满足特定安装需求,还可以通过conda activate激活这个环境。
但其实还有一个参数-p用于指定安装目录,利用了这一点,我们就可以把自己docker里conda安装软件到非conda内部目录,而是映射过来的目录。如下
conda install -p /home/datasci/bioinfo -c bioconda roary
就安装到对应的位置,如
samtools,bcftools,varscan等一众生信软件都可以如此安装。
由于在.configrc里作了路径配置,这些软件即时能用!
在安装这些软件相应container被删除后,这些通过-p安装上的软件不会随着删除,下次重做container只要目录映射一致,不需要重装软件,不需要重装软件,不需要重装软件。
- jupyter_lab 2.3.0+
- nginx config
- python2.7-dev
- nginx install
- code-server 3.7.2+
- 用
conda安装的并激活一个环境中,报和libcurl.so相关的错误
把你对应目录下的 lib/libcurl.so.4给删除掉,或者从 /usr/lib/x86_64-linux-gnu下链接过来
-
最近发现jupyter lab升级后,装插件后会显示异常 发现是build过程中的问题,要性能强的服务器才能顺利完成这个工作。
-
安装tidyvers包出问题 google后发现问题出在haven和reaxl包上, 在R脚本里用下面方法解决
withr::with_makevars(c(PKG_LIBS = "-liconv"), install.packages("haven"), assignment = "+=")
withr::with_makevars(c(PKG_LIBS = "-liconv"), install.packages("readxl"), assignment = "+=")