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

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐