订制自己专属镜像,保存、复制自己程序的运行环境。
使用docker commit
将容器保存为镜像
这个命令可以将docker容器保存为docker镜像。例如,启动了Rstduio容器,然后在其中安装了若干包,之后使用下面的命令将容器存成镜像:
docker commit myRstudio Rimage:latest
这个Rimage:latest
就是我们新保存的镜像。后面,以这个镜像为基础新建容器,则先前安装的各种包都可以继续使用。
使用Dockerfile构建镜像(本地)
docker commit
确实是一种非常方便的镜像构建方法,但是,新镜像构建的细节几乎无法获知。使用Dockerfile构建镜像,则是更加常用的办法。Dockerfile建镜像,相关资料很容易找到,本文在Rstudio Server的镜像基础上,简单介绍一下Dockerfile的使用。例如,部署scRNA数据常用的一些工具,镜像构建的Dockerfile可以这么写:
FROM rocker/rstudio:3.6.1
RUN apt-get install -y libxml2-dev libgsl0-dev && \
R -e 'install.packages("XML", repos = "http://www.omegahat.net/R")' && \
R -e 'install.packages(c("BiocManager","devtools","Seurat","statmod","funr","rjags") ,repos = "http://cran.us.r-project.org")' && \
R -e 'BiocManager::install(c("monocle","rhdf5","SingleCellExperiment","scater","SingleR","scran","scRNAseq","CHETAH","infercnv","CellChat"))' && \
R -e 'library("devtools");install_github(repo = "hhoeflin/hdf5r");install_github(repo = "mojaveazure/loomR", ref = "develop")' && \
R -e 'library("devtools");install_github(repo = "hhoeflin/hdf5r");install_github("mojaveazure/seurat-disk")' && \
R -e 'library("devtools");install_git("https://gitee.com/wangshun1121/scRepertoire",branch = "dev")'
使用上面的Dockerfile,通过下面的命令来构建镜像:
docker build -f Dockerfile -t myRstudioIMG .
docker build
命令运行结束,会产生一个myRstudioIMD
的镜像,只需通过docker images
即可查看到。
使用Dockerfile构建镜像(云端)
通过DockerHub和阿里云容器镜像服务可以方便地在线构建镜像。这两个常用的镜像仓库也方便我们管理自己的镜像,只需通过docker push
命令即可(具体细节根据网站提示操作)。
Docker 容器迁移与部署
两个选择。其一:本地构建好新镜像,通过docker push
将其推送到Docker镜像仓库中,然后在其他节点上用docker pull
拉取镜像。
其二:使用docker save
将镜像保存到压缩包,然后将压缩包传输到其他机器,最后在新机器通过docker load
载入压缩包中的镜像:
# 宿主机
docker save myRstudioIMG | gzip -c > myRstudioIMG.tar.gz
# myRstudioIMG.tar.gz 传输到新机器上再在新机器上输入下面的命令
gunzip -c myRstudioIMG.tar.gz | docker load