docker虚拟化技术及其在生物信息数据分析中的应用(linux)

docker虚拟化技术

1.docker虚拟化技术介绍:

Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。

docker就是类似的理念。现在都流行云计算了,云计算就好比大货轮。docker就是集装箱。

主要解决的问题:不同的应用程序可能会有不同的应用环境。

attachments-2020-03-axUZlk0p5e684e55732b2.png

2.docker与其他虚拟机技术优势

Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。

下面的图片比较了 Docker 和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

attachments-2020-03-YbR3l4g35e644a4069508.png

对比传统虚拟机总结

特性Docker传统虚拟机
启动秒级分钟级
硬盘使用一般为 MB一般为 GB
性能接近原生弱于
系统支持量单机支持上千个容器一般几十个


3. 镜像、容器和仓库

Docker 由镜像(Image)、容器(Container)、仓库(Repository) 三部分组成。

Docker 的镜像(Image)可以简单的类比为电脑装系统用的系统盘,包括操作系统,以及必要的软件。例如,一个镜像可以包含一个完整的 centos 操作系统环境,并安装了 samtools和 bwa 服务器。注意的是,镜像是只读的。这一点也很好理解,就像我们刻录的系统盘其实也是可读的。我们可以使用 docker images 来查看本地镜像列表。

Docker 的容器(Container)可以简单理解为提供了系统硬件环境,它是真正跑项目程序、消耗机器资源、提供服务的东西。例如,我们可以暂时把容器看作一个 Linux 的电脑,它可以直接运行。那么,容器是基于镜像启动的,并且每个容器都是相互隔离的。注意的是,容器在启动的时候基于镜像创建一层可写层作为最上层。我们可以使用 docker ps -a 查看本地运行过的容器。

Docker 的仓库(Repository)用于存放镜像。这一点,和 Git 非常类似。我们可以从中心仓库下载镜像,也可以从自建仓库下载。同时,我们可以把制作好的镜像 commit 到本地,然后 push 到远程仓库。仓库分为公开仓库和私有仓库,最大的公开仓库是官方仓库 Dock Hub,国内的公开仓库也有很多选择,例如阿里云等。


attachments-2020-03-TdSCBAhS5e644d45a6d41.png注解:Docker Registry:镜像的仓库,比如官方的是Docker Hub。如果要在其它服务器上使用镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry就是这样的服务。


  • Registry:注册服务器,用于管理镜像仓库,起到的是服务器的作用。
  • Repository:镜像仓库,用于存储具体的docker镜像,起到的是仓库存储作用。
  • attachments-2020-03-wW03jjhv5e6883fe8e68b.png

4.docker学习使用

4.1 docker安装(Linux centos7)


注意:使用root账号安装  普通用户无法安装
安装很简单 使用centos7自带的yum自动安装 :官方安装方法: https://docs.docker.com/engine/install/centos/
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
systemctl start docker   #启动 docker 服务
systemctl enable docker  #设置开机启动docker服务
docker version    #显示 Docker 版本信息 docker info #显示docker安装信息
docker 镜像文件夹查看与修改:https://www.omicsclass.com/article/1183

普通用户要使用docker服务设置:设置非root账号使用docker服务:https://www.omicsclass.com/article/1186

4.2 下载公共数据库docker HUb上的docker镜像


 Docker Hub 中搜索符合条件的镜像。
docker search qiime

attachments-2020-03-Xcuu4XbL5e64536c7ee9b.png
从公网docker hub 拉取(下载)image   pull:拉 :  例如qiime软件就有提供docker镜像可以直接下载下来:https://docs.qiime2.org/2020.2/install/virtual/docker/

docker pull  docker.io/centos

可能由于网络的问题会有报错。 无法连接到dockerhub 下载镜像。 如果你的网络没有问题,你可以下载。

解决: 使用阿里云docker镜像加速,提升pull的速度:

你只需要登录容器Hub服务 https://cr.console.aliyun.com的控制台,使用你的支付宝帐号,第一次登录时,需要设置一个独立的密码,左侧的加速器帮助页面就会显示为你独立分配的加速地址。

attachments-2020-03-GufE75L05e64548c53186.png


修改配置文件: vim  /etc/docker/daemon.json   #大括号{}中添加镜像地址:

{
"registry-mirrors":["https://koq0g34v.mirror.aliyuncs.com"]
}
然后重启docker,生效

systemctl daemon-reload 
systemctl restart docker
docker pull docker.io/centos  #再下载,就可以了。
如果上面的镜像下载还是慢的话,可以使用共有的国内地址,参考:https://yq.aliyun.com/articles/696286

{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}

4.3 从本地加载别人分享的镜像


docker load -i /root/docker.io-centos.tar.gz

4.4 镜像查看与删除

以下为后台镜像查看

[root@omisclass ~]# docker images  #查看后台镜像方法1
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
root/sra-toolkit    2.9.2               e8a5657b4e83        About an hour ago   615 MB
root/sra-toolkit    latest              e8a5657b4e83        About an hour ago   615 MB
docker.io/ubuntu    18.04               72300a873c2c        2 weeks ago         64.2 MB
docker.io/centos    latest              470671670cac        7 weeks ago         237 MB
[root@omisclass ~]# docker image ls  #查看后台镜像方法2
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
root/sra-toolkit    2.9.2               e8a5657b4e83        About an hour ago   615 MB
root/sra-toolkit    latest              e8a5657b4e83        About an hour ago   615 MB
docker.io/ubuntu    18.04               72300a873c2c        2 weeks ago         64.2 MB
docker.io/centos    latest              470671670cac        7 weeks ago         237 MB
[root@omisclass ~]# docker  image rm -f e8a5657b4e83   #强制删除后台镜像
Untagged: root/sra-toolkit:2.9.2
Untagged: root/sra-toolkit:latest
Deleted: sha256:e8a5657b4e838d3ce6581666752a9b428f4a1da9dd76ddac7cde90c93a93956f
Deleted: sha256:97df9b1202930ab3020ee1c503db104a02b932459e32bf95a4ad0c3082d572c2
Deleted: sha256:d81f279ea371ed4a05be93b3bc71726e3a38350ecaa7e19fc23c87fd61759c02
Deleted: sha256:988d8a9b4254d04e208ec281aa36cbce1bef5c4e51eae806b659387a57136b0f
Deleted: sha256:f778d0a1217a6a761ebad2dbff6ce5f34419d668410a4b34a986c47e3ba31b3f
Deleted: sha256:6f6d62c5d1b06671066794c4640c4959b7db0773474ce92b277256759de1a14f
Deleted: sha256:844f6b3eaaf0f3de53e0e72f676c455563a92d8ecce95f5edc5b03356415c2e7
Deleted: sha256:9373d3173020d86eb103eac32db58836c73670e6a3440f0598324b52a2b3a542
Deleted: sha256:ba7d13644b61b58c0f03abfdae3d208ef2f4819516ccfef56094927772a67e38
Deleted: sha256:9a8a3c79c50a7bac2ef01a5a73e2de9a2cac2117c308ca50eac77d4b3fbd0635
Deleted: sha256:6ba2b38850a58bf10195058e1952bad44c5d7240b62430ea6c553a62177d5895
Deleted: sha256:fe39aa1e284cea7136534344a139d8a1acbd079054639192541478ee94f2f055
Deleted: sha256:7439f6e10a4be5d6982f7f370cf5560a31cfb4cc3f69e807be22da1d02286fea
Deleted: sha256:0108cbe087a1f29916bcfbefdf9fe118eef0c69ea4eea4705c89ffc4da7dd1fa
[root@omisclass ~]# docker image ls  #确认删除
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/ubuntu    18.04               72300a873c2c        2 weeks ago         64.2 MB
docker.io/centos    latest              470671670cac        7 weeks ago         237 MB

设置非root账号使用docker服务:https://www.omicsclass.com/article/1186

5. docker平台基本使用方法

5.1 运行一个 container并加载镜像centos


运行起来这个实例后,在实例中执行 /bin/bash命令
[root@omisclass ~]# docker images    #查看镜像 等于命令 docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/centos    latest              470671670cac        7 weeks ago         237 MB
[root@omisclass ~]# docker run  -it docker.io/centos:latest /bin/bash     #交互式运行container
[root@f866b20aea91 /]# exit     #退出
exit
[root@omisclass ~]# 

docker常用参数:

run  运行

-i   以交互模式运行容器,通常与 -t 同时使用;
-t  为容器重新分配一个伪输入终端,通常与 -i 同时使用;

5.2 外挂数据到docker中


docker run  -v /root/mydata:/data --privileged=true --rm -it docker.io/centos:latest /bin/bash
-it:这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。
--rm:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动 docker rm。我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 --rm 可以避免浪费空间。
/bin/bash:放在镜像名后的是 命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
--privileged=true避免挂载的数据目录权限问题

5.3  后台运行docker容器

如果你的命令已经写好,不需要进入docker,直接后台运行就可以:

docker run -d docker.io/centos:latest /bin/bash -c "while true;do echo hello world; sleep 1; done"

-d  后台运行容器,并返回容器ID
-c 
后面跟待完成的命令

6 docker中常用的命令总结(选修)

关于容器一些操作命令

docker ps -a  #-a 列出所有容器container(包含沉睡/退出状态的容器);
docker kill 1629581081a1  #杀死一个容器 
docker rm  e085da6919af   #删除容器
docker rm -f 1a63ddea6571  #强制删除容器
docker stop 1a63ddea6571  #关闭容器 docker exec -it 1a63ddea6571 bash #新开一个bash端口, 并交互式进入正在运行的容器

容器导入与导出

docker export 7691a814370e |gzip > ubuntu.tar.gz   #导出容器
zcat ubuntu.tar.gz | docker import - test/ubuntu:v1.0  #导入容器为镜像  
镜像保存与加载
docker save docker.io/centos | gzip > rna.tar.gz  #镜像保存
docker load -i rna.tar.gz     #镜像加载
提交自己的镜像到Docker Hub

用户也可以在登录后通过 docker push 命令来将自己的镜像推送到 Docker Hub。以下命令中的 username 请替换为你的 Docker 账号用户名。

docker tag ubuntu:18.04 username/ubuntu:18.04
docker image ls

docker save 与docker export区别:https://www.zc0317.com/post/view?id=140

更多docker使用参考:https://github.com/yeasy/docker_practice




更多生物信息课程:https://study.omicsclass.com/index


  • 发表于 2020-03-08 09:18
  • 阅读 ( 13335 )
  • 分类:linux

0 条评论

请先 登录 后评论
omicsgene
omicsgene

生物信息

702 篇文章

作家榜 »

  1. omicsgene 702 文章
  2. 安生水 351 文章
  3. Daitoue 167 文章
  4. 生物女学霸 120 文章
  5. xun 82 文章
  6. rzx 78 文章
  7. 红橙子 78 文章
  8. CORNERSTONE 72 文章