这里制作的是wgs_demo镜像(公司内部),其他程序打包成镜像类似
通常使用的打包镜像的方法是采用DockerFile方式,这里采用ssh方式
1、首先下载Ubuntu(Debian系列)官方镜像(也可以是RedHat系列的)
命令 docker pull Ubuntu
docker run -tid --name ubuntu -p 23:22 ubuntu:将新建的docker命名为ubuntu并映射到23端口
netstat -apnl | grep 23 查看23端口是否开启
可以看到23端口是开着的。
docker exec -ti ubuntu /bin/bash 进入docker的Ubuntu (或者使用docker run -i -t ubuntu /bin/bash),然后通过passwd命令修改root的密码。
2、使用ssh登录docker容器
apt install -y vim 安装(更新)一下vim
如果出现上述情况,更新一下源 apt update
再执行 apt install - y vim
接着安装openssh-server: apt install -y openssh-server
成功安装后,vim /etc/ssh/sshd_config,修改下面配置,使得可以直接使用root 登录,修改内容如下:
(1)添加PermitRootLogin yes
将上面的一句注释掉,加上PermitRootLogin yes这一句。
(2)添加UsePAM no
启动ssh服务,service ssh start
exit 退出docker,输入docker ps –a,查看docker的ID
重新打开一个终端,通过ssh root@10.18.101.92 -p 23 进入docker:
3、准备源码wgs_demo,并对需要的依赖库进行编译
(如果已经有编译过可以运行的库,可以忽略这步,建议重新编译,否则后面出错会有很多坑)
这里需要编译的库有bwa,samtools
附上 bwa源码地址:https://github.com/lh3/bwa
samtools源码地址:https://github.com/samtools/samtools
根据README.md步骤进行编译,编译后将bin目录下的bwa和samtools拷贝到wgs的bin目录下即可
4、将准备好运行的代码,编写好运行命令
这里是wgs_flow.sh,通过运行这个脚本来运行代码程序,测试程序是否能够正常运行
5、将编译好的运行环境打包成为一个容器,保存成为一个镜像文件
这里的docker id 通过 docker ps –a 查看自己的,这里的容器名我取为wgs_demo,版本号为v1
docker commit 76fcv98 wgs_demo:v1
docker save XXXX:XXXX > XXXX.img(将容器保存成为一个镜像文件)
后期需要使用该镜像时,只需要拷贝这个打包好的容器文件,加载即可
Docker load < XXXX.img
6、编写好docker run命令
这里通过挂载 容器中的地址到宿主机上的硬盘地址 来进行数据的读写操作,docker run 命令如下:
docker run -it -v /home/wzy/wgs_demo/output:/root/app/output -v /home/wzy/wgs_demo/data:/root/app/data wgs_demo:v1 /root/app/wgs_flow.sh
注意最后 执行命令不要写成如下(程序会运行异常):
docker run -it -v /home/wzy/wgs_demo/output:/root/app/output -v /home/wzy/wgs_demo/data:/root/app/data wgs_demo:v1 sh
如果没错的话,容器里的程序就会正常运行了!!!