docker部署conda环境下的小程序
·
docker和miniconda3安装
这里不讲,网上有很多教程,我使用的是Linux操作系统(uname -a查看)
创建项目环境
# 创建环境
$ conda create -c bioconda -c conda-forge -n mageckenv mageck gcc gxx
# 导出项目环境
$ conda export -n mageckenv -f environment.yml
安装完相应的依赖包后,把项目环境导出到environment.yml文件。如果项目安装的包比较多,建议在项目环境下安装gcc和g++,因为有些包会因为系统环境下的C动态库版本较老,导致失败,而且又没有root权限。我这个项目比较小,项目环境下没有安装gcc和g++,用的是系统环境的gcc和g++,这里主要是示范。
编辑Dockerfile文件
# 使用官方的miniconda3基础镜像
FROM continuumio/miniconda3
# 设置工作目录
WORKDIR /work
# 将环境配置文件复制到镜像中
COPY environment.yml .
# 创建Conda环境
RUN conda env create -f environment.yml
# 激活环境
RUN echo ". activate cas9" > ~/.bashrc
ENV PATH /opt/conda/envs/cas9/bin:$PATH
RUN . activate cas9
# 将项目代码复制到镜像中
COPY sgrna.csv run_cas9.sh samples.path .
# 设置容器启动时的命令
CMD ["bash", "run_cas9.sh"]
激活环境用conda和source时,我的报错了,改成"."就正常了。这里Dockerfile中每个指令的具体用法可以参考官方文档Dockerfile reference | Docker Docs
建立镜像
$ docker build -f PATH/Dockerfile -t my/cas9:latest .
[+] Building 2.5s (12/12) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 622B 0.0s
=> [internal] load metadata for docker.io/continuumio/miniconda3:latest 2.3s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/7] FROM docker.io/continuumio/miniconda3:latest@sha256:15f887d74b3ffe0fa21a741bfeaec8ccc8947b527acfb7542eff84ae1bfdd6bf 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 1.56kB 0.0s
=> CACHED [2/7] WORKDIR /work 0.0s
=> CACHED [3/7] COPY environment.yml . 0.0s
=> CACHED [4/7] RUN conda env create -f environment.yml 0.0s
=> CACHED [5/7] RUN echo ". activate cas9" > ~/.bashrc 0.0s
=> CACHED [6/7] RUN . activate cas9 0.0s
=> [7/7] COPY sgrna.csv run_cas9.sh samples.path . 0.1s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:ac319b6961a7245b8e23d3eff4e81060438c1765a2eb052522502e426a7bc5f0 0.0s
=> => naming to docker.io/my/cas9:latest 0.0s
注意Dockerfile文件放置目录,如果所有文件都在同一目录下,-f参数可以不给。镜像建立完之后,使用 "docker image ls -a |grep cas9" 进行查看
$ docker image ls -a|grep -E "TAG|cas9"
REPOSITORY TAG IMAGE ID CREATED SIZE
my/cas9 latest ac319b6961a7 52 minutes ago 1.87GB
测试镜像
$ docker run my/cas9
Usage:
/work/run_cas9.sh samples.path project_id sgRNA.csv
Example:
/work/run_cas9.sh samples.path ABCD20248888 sgrna.csv
$ docker container ls -a|grep -E "CONTAINER|cas9"
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c0f994063185 my/cas9 "bash run_cas9.sh" 2 minutes ago Exited (0) 2 minutes ago goofy_hermann
1b7396a34599 my/cas9 "bash run_cas9.sh" 46 minutes ago Exited (0) 46 minutes ago
运行镜像时,可以加--name参数,指定容器的名称。另外,之前下载其他镜像碰到权限的问题,root权限运行,导致生成的目录其他用户无权限操作,这里其实可以在容器中变更权限
$ docker run -v `pwd`:/work my/cas9 chown -R $(id -u):$(id -u) /work/*
保存镜像
保存镜像,以便部署到不同的服务器上
# 保存镜像
$ docker save -o image.tar my/cas9
# 在其他服务器上加载镜像
$ docker load -i image.tar
删除镜像
镜像删除前需要暂停或删除运行的容器,再删除镜像
# 暂停或删除容器
$ docker container ls -a |grep cas9 |cut -d" " -f1 |xargs docker container stop[rm]
# 删除镜像
$ docker image ls -a |grep cas9 |cut -d" " -f1 |xargs docker image rm
更多推荐
所有评论(0)