专栏首页图形化开放式生信分析系统开发使用docker完成生信分析环境搭建
原创

使用docker完成生信分析环境搭建

生信开发人员最头疼的问题,可能就是平台搭建和软件安装了。部署和迁移上要费很大力气。本文讲述使用docker制作一个镜像,后续通过导入自己定制的镜像,复制文件完成分析流程的部署和迁移

如何使用docker,推荐阅读 Docker — 从入门到实践

软件获取:到官网sliverworkspace.com免费下载个人版,最新版本 2.0.277363

一、准备工作

  • 首先我们需要对手头的pipeline做一个分类。为了保持docker镜像尽可能的小,不能将所有文件全部放在docker镜像里面,需要外部挂载几个目录。
    1. data目录, 保存待分析的文件。在docker里面挂载目录为:/opt/data
    2. result目录,保存分析中间文件和最终结果文件。在docker里面挂载目录为:/opt/result
    3. ref目录, 保存分析流程用到的脚本、工具软件、注释数据库,reference文件等, ​ 在docker里面挂载为:/opt/ref 如果有需要可以划分的更详细,比如/opt/tool, /opt/db等等,看个人习惯
  • 安装docker & docker-compose:
    • Ubuntu 16.04

    #下载安装脚本安装

    wget -qO- https://get.docker.com/ | sh

    #安装docker-compose

    sudo apt-get install docker-compose

    • Ubuntu 18.04
    1. 卸载旧版本dockerDocker 的旧版本名称为:docker 、 docker-engine 或者 docekr-io。如果安装过旧版本的需要先卸载:

    $ sudo apt-get remove docker docker-engine docker.io

    1. 安装最新版本的 Docker最新版本的 Docker 分两个版本,docker-ce(Community Edition)和docker-ee(Enterprise Edition)。CE版本是免费的,如果我们学习或者一般应用,CE足够。我们安装社区版:由于docker安装需要使用https,所以需要使 apt 支持 https 的拉取方式。 2.1 安装 https 相关的软件包

    $ sudo apt-get update

    # 先更新一下软件源库信息

    $ sudo apt-get install \

    apt-transport-https \

    ca-certificates \

    curl \

    software-properties-common ​ 2.2 设置apt仓库地址,鉴于国内网络问题,强烈建议使用国内地址​ 添加 Docker 官方apt仓库(使用国外源)​ 执行该命令时,如遇到长时间没有响应说明网络连接不到docker网站,需要使用国内的 # 添加 Docker 官方的 GPG 密钥

    $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - ​

    # 设置稳定版本的apt仓库地址

    $ sudo add-apt-repository \

    "deb [arch=amd64] https://download.docker.com/linux/ubuntu \

    $(lsb_release -cs) \

    stable"

    # 添加 阿里云 的apt仓库(使用国内源)

    $ curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

    $ sudo add-apt-repository \

    "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \

    $(lsb_release -cs) \

    stable" ​

    2.3 安装 docker软件 $ sudo apt-get update

    # 安装最新版的docker

    $ sudo apt-get install docker-ce ​

    # 如果要安装指定版本的docker,则使用下面的命令:

    $ apt-cache policy docker-ce

    # 查看可供安装的所有docker版本

    $ sudo apt-get install docker-ce=18.03.0~ce-0~ubuntu

    # 安装指定版本的docker ​

    # 检查docker是否安装成功

    $ docker --version

    # 查看安装的docker版本 ​

    2.4 安装 docker-compose # 安装docker-compose

    sudo apt-get install docker-compose

    # 查看docker-compose 版本

    docker-compose version ​

    #或者 sudo apt-get install python-pip sudo pip install docker-compose

    • CentOS 7/8

    该 centos-extras 库必须启用。默认情况下,此仓库是启用的,但是如果已禁用它,则需要重新启用它。 建议使用 overlay2 存储驱动程序。


将当前用户加入sudo用户列表,修改配置文件,避免每次换切用户 #安装环境所需 编辑sudo权限#避免每次都要切回

root vi /etc/sudoers

# 找到这一行 root ALL=(ALL) ALL

# 添加一行,bootsir为当前用户名 boosir ALL=(ALL) ALL

# 找到这一行

Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin

# 修改为 Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin


卸载旧版本 较旧的 Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。 $ sudo yum remove docker \

docker-client \

docker-client-latest \

docker-common \

docker-latest \

docker-latest-logrotate \

docker-logrotate \

docker-engine 安装 Docker Engine-Community 使用 Docker 仓库进行安装 在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。之后,您可以从仓库安装和更新 Docker。

设置仓库 # 安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2 $ sudo yum install -y yum-utils device-mapper-persistent-data lvm2 ​

# 使用以下命令来设置稳定的仓库。

$ sudo yum-config-manager \

--add-repo \

https://download.docker.com/linux/centos/docker-ce.repo 安装 Docker Engine-Community 安装最新版本的 Docker Engine-Community 和 containerd,或者转到下一步安装特定版本: $ sudo yum install docker-ce docker-ce-cli containerd.io 如果提示您接受 GPG 密钥,请选是。

有多个 Docker 仓库吗? 如果启用了多个 Docker 仓库,则在未在 yum install 或 yum update 命令中指定版本的情况下,进行的安装或更新将始终安装最高版本,这可能不适合您的稳定性需求。 Docker 安装完默认未启动。并且已经创建好 docker 用户组,但该用户组下没有用户。 要安装特定版本的 Docker Engine-Community,请在存储库中列出可用版本,然后选择并安装:

  1. 列出并排序您存储库中可用的版本。此示例按版本号(从高到低)对结果进行排序。

$ sudo yum list docker-ce --showduplicates | sort -r docker-ce.x86_64 3:18.09.1-3.el7

docker-ce-stable docker-ce.x86_64 3:18.09.0-3.el7

docker-ce-stable docker-ce.x86_64 18.06.1.ce-3.el7

docker-ce-stable docker-ce.x86_64 18.06.0.ce-3.el7

docker-ce-stable

  1. 通过其完整的软件包名称安装特定版本,该软件包名称是软件包名称(docker-ce)加上版本字符串(第二列),从第一个冒号(:)一直到第一个连字符,并用连字符(-)分隔。例如:docker-ce-18.06.3.ce-3.el7。

$ sudo yum install docker-ce-18.06.3.ce-3.el7 docker-ce-cli containerd.io 启动 Docker。 $ sudo systemctl start docker

  • 安装 docker-compose

#或者github直接下载

sudo curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose 9. 非root用户运行docker # 首先创建docker用户组,如果docker用户组存在可以忽略

sudo groupadd docker ​

# 把用户添加进docker组中

sudo gpasswd -a ${USER} docker ​

# 重启docker sudo service docker restart

#或者 sudo systemctl restart docker ​

# 如果普通用户执行docker命令,如果提示get …… dial unix /var/run/docker.sock权限不够,则修改/var/run/docker.sock权限,使用root用户执行如下命令,即可

sudo chmod a+rw /var/run/docker.sock

二、下载镜像、运行容器、在容器中安装ssh服务

选择镜像其实和选择Linux操作系统版本一样,最常用的有centOS和Ubuntu系列。根据个人喜好来选择。

个人倾向于选择Ubuntu18.04,官方宣布该LTS版本有10年支持周期,可以放心使用。

  # 拉取镜像 ubuntu:18.04,名称:版本号
  docker pull ubuntu:18.04
  ​
  # 显示下载完成之后,查看现有镜像
  docker images 或者 docker image ls
  ​
  # 可以看到以下内容:
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
  ubuntu              18.04               775349758637        5 weeks ago         64.2MB
  ​
  # 下面基于镜像运行一个容器
  docker run -i -t ubuntu18.04  /bin/bash
  ​
  # 下面显示类似,此时在容器中运行了/bin/bash,可以当成一个精简ubuntu系统来安装软件。
  root@b8080a125313:/#
  ​
  # 为了我们后面使用该容器来运行分析流程,我们需要先安装ssh-server  ssh服务
  root@b8080a125313:/# apt-get update && apt-get install ssh-server
  ​
  # 安装ssh服务之后,需要修改几个地方,安装vim
  root@b8080a125313:/# apt-get update && apt-get install vim
  ​
  # 修改 /etc/ssh_config 第38行Port修改为9018 (可选)并保存
  Port 9018
  ​
  # 修改 /etc/sshd_config并保存
  Port 9018  #修改默认端口号(可选)
  ListenAddress 0.0.0.0  #默认监听地址,所有地址
  LoginGraceTime 10m     #允许用户登录耗时(可选)
  PermitRootLogin yes    #允许root用户登录,docker默认用户是root用户,在运行docker系统中是普通帐户权限
  ​
  # 给root帐户添加密码,根据需要可以设置的复杂一些,这里简单的20191124
  root@b8080a125313:/# passwd root
  ​
  # 启动ssh服务
  root@b8080a125313:/# service ssh start
  ​
  # 获取容器ip地址,安装net-tools
  root@b8080a125313:/# apt-get update && apt-get install net-tools
  root@b8080a125313:/# ifconfig
  eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
          inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
          ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
          RX packets 27095  bytes 55050990 (55.0 MB)
          RX errors 0  dropped 0  overruns 0  frame 0
          TX packets 26785  bytes 2478368 (2.4 MB)
          TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  ​
  lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
          inet 127.0.0.1  netmask 255.0.0.0
          loop  txqueuelen 1000  (Local Loopback)
          RX packets 0  bytes 0 (0.0 B)
          RX errors 0  dropped 0  overruns 0  frame 0
          TX packets 0  bytes 0 (0.0 B)
          TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  ​
  # 打开一个docker容器外的终端,连接ssh,按照刚才的密码、端口可以连接上。
  ssh root@172.17.0.2 -p9018 #选择yes,输入密码之后连接上去
  ​
  Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-30deepin-generic x86_64)
  ​
   * Documentation:  https://help.ubuntu.com
   * Management:     https://landscape.canonical.com
   * Support:        https://ubuntu.com/advantage
  This system has been minimized by removing packages and content that are
  not required on a system that users do not log into.
  ​
  To restore this content, you can run the 'unminimize' command.
  ​
  The programs included with the Ubuntu system are free software;
  the exact distribution terms for each program are described in the
  individual files in /usr/share/doc/*/copyright.
  ​
  Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
  applicable law.
  ​
  root@b8080a125313:~# 
  # 连接成功。

三、保存更改、更新镜像、将容器导出为文件

  # 为了保存更改,我们需要提交我们的保存
  docker ps -a
  # 看到我们刚才运行的容器
  CONTAINER ID  IMAGE        COMMAND      CREATED            STATUS                PORTS   NAMES
  b8080a125313  ubuntu:18.04 "/bin/bash"  About an hour ago  Exited (0) 5seconds           xxxxx
  ​
  # 将容器编号b808开头的提交为镜像mybioinfo:1.00版本1.00
  docker commit b808 bioinfo:1.00 
  # 查看镜像列表
  docker images 或者 docker image ls
  # 可以看到,体积有所增大,我们每一次操作都会造成镜像的体积增大
  REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
  mybioinfo           1.00                60684fc2c474        About a minute ago   244MB
  ​
  # 我们也可以直接将修改过的容器快照直接导出为文件
  docker export -o mybioinfo_1.00.tar b808
  ls -lh mybioinfo_1.00.tar               
  -rw------- 1 sliver sliver 239M 12月 11 14:43 mybioinfo_1.00.tar
  # 如果需要迁移,我们可以导入这个容器快照文件为镜像
  cat mybioinfo_1.00.tar | docker import - test/mybioinfo:1.00
  ​
  # 当然在镜像上也可以导入导出,使用docker save和docker load命令

四、运行自定义镜像容器,并挂载目录

  # docker运行容器,并挂载目录
  docker run -d -p 9018:9018 \
      --name bioinfo \
      --net="host" \  #这里直接使用host的网络,也可以使用bridge,使用端口映射
      -v /media/sliver/Information/result:/opt/result:rw \
      -v /media/sliver/Information/ref:/opt/ref:ro \
      -v /media/sliver/Information/data:/opt/data:ro \
      mybioinfo:1.00  \
      service ssh start -D
  # 或者使用docker-compose 编写docker-compose.yml文件如下:
  version: "2"
  services:
    ubuntu18.04:
      image: mybioinfo:1.00
      container_name: bioinfo
      volumes:      
        - /media/sliver/Information/result:/opt/result:rw
        - /media/sliver/Information/ref:/opt/ref:ro
        - /media/sliver/Information/data:/opt/data:ro
      ports:
        - "9018:9018"
      network_mode: "host" #这里直接使用host的网络,也可以使用bridge,使用端口映射
      environment:
        - TZ="Asia/Shanghai"
      command: service ssh start -D
  ​
  #在docker-compose.yml目录下,运行docker-compose up -d也可以将镜像部署为容器运行
  ​
  # 这里使用了主机网络host模式
  ssh root@192.168.0.9 -p9018
  # 登录获取shell
  root@sliverworkspace:~#

五、继续安装其他软件,复制文件

  • 由于我们在容器中部署了ssh服务,我们既可以本地连接运行也可以远程连接运行,和真实的机器一样用法
  • 我们可以继续安装软件,如果使用conda安装直接将软件安装在容器内,会继续增大容器导出文件的体积。不推荐这种用法,推荐将软件工具下载在/opt/ref目录下,在容器中编译运行。
  • reference文件及数据库文件可以直接复制在/opt/ref目录下,以减小容器快照体积

六、重复三至四步,我们搭建好环境之后,最终将容器导出为文件,同时复制ref文件夹。就可以在docker环境支持下快速完成生信分析环境的部署与迁移。

七、官方推荐使用docker-file来描述docker镜像创建过程,这里过程太过繁琐,就不继续折腾了。有兴趣的可以继续改进

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 转录组RNA-Seq使用docker+bioconda搭建分析环境

    近期学习转录组分析,从ncbi下载数据,转成fastq,STAR/hisat2 map到基因组上,使用featureCount拿到表达矩阵文件挺顺利的,就是到了...

    SliverWorkspace
  • 图形化开放式生信分析系统开发 - 3 生信分析流程的进化

    接上两篇内容,本文主要讲述工作中NGS从科研进入医学临床领域,工作中接触到生信流程,以及最终在实现的过程。

    SliverWorkspace
  • 使用Gatk Germline spns-indels Pipeline分析遗传病(耳聋)

    这次没有拿到遗传病的室间质评的数据,直接从NCBI上找一些数据来分析。NCBI上搜索deaf,点击第一条搜索结果,最后几经跳转找到数据下载页面:https://...

    SliverWorkspace
  • CentOS 7 安装gogs git代码服务器

    开源的代码服务器最牛的是github,有一个开源的实现是gitlab。 但是gitlab是用ruby写的,某些时候性能有问题。 有的时候使用的时候超级慢。代...

    botkenni
  • 在Linux(Centos7)上使用Docker运行.NetCore

    在上一篇中我们写了如何在windows中使用docker运行.netcore,既然我们了解了windows下的运行发布,我们也可以试试linux下使用docke...

    小世界的野孩子
  • 新手Docker安装使用教程,以及常用命令!

    最近用调试Docker内容,顺手记录一下,我常用的几个命令!这里总结一下,方便自己也同时方便大家使用!

    砸漏
  • Docker1.12尝试

    前言:在docker1.12中默认增加了swarm mode 编排功能,并且官方支持更多的插件来进行docker的网路和外接存储插件,不过目前测试swarm m...

    BGBiao
  • docker学习(1) 安装

    docker是啥就不多讲了,简言之就是更轻量、更牛叉的新一代虚拟机技术。下面是安装步骤: 一、mac/windows平台的安装 docker是在linux内核基...

    菩提树下的杨过
  • docker 安装与使用

    之前docker 没有系统整理,现在经常会重新安装docker,部署docker环境,进行重启的创建和操作,下面进行记录和备忘:

    xuyaowen
  • Docker简介、安装、基本配置

    主要架构为:镜像(images)、容器(container)、仓库(repository)

    PayneWu

扫码关注云+社区

领取腾讯云代金券