众所周知,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 -d
docker-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 = "+=")