生信开发人员最头疼的问题,可能就是平台搭建和软件安装了。部署和迁移上要费很大力气。本文讲述使用docker制作一个镜像,后续通过导入自己定制的镜像,复制文件完成分析流程的部署和迁移。
如何使用docker,推荐阅读 Docker — 从入门到实践
#下载安装脚本安装
wget -qO- https://get.docker.com/ | sh
#安装docker-compose
sudo apt-get install docker-compose
$ sudo apt-get remove docker docker-engine docker.io
$ 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-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,请在存储库中列出可用版本,然后选择并安装:
$ 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
$ sudo yum install docker-ce-18.06.3.ce-3.el7 docker-ce-cli containerd.io 启动 Docker。 $ sudo systemctl start docker
#或者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
选择镜像其实和选择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:~#
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。