这里制作的是wgs_demo镜像(公司内部),其他程序打包成镜像类似

通常使用的打包镜像的方法是采用DockerFile方式,这里采用ssh方式

1、首先下载Ubuntu(Debian系列)官方镜像(也可以是RedHat系列的)

命令 docker pull Ubuntu

ubantu 系统打doker镜像 nginx 打包ubuntu镜像_vim

ubantu 系统打doker镜像 nginx 打包ubuntu镜像_docker_02

ubantu 系统打doker镜像 nginx 打包ubuntu镜像_ubuntu_03

docker run -tid --name ubuntu -p 23:22 ubuntu:将新建的docker命名为ubuntu并映射到23端口

ubantu 系统打doker镜像 nginx 打包ubuntu镜像_ubuntu_04

netstat -apnl | grep 23 查看23端口是否开启

ubantu 系统打doker镜像 nginx 打包ubuntu镜像_docker_05

可以看到23端口是开着的。

docker exec -ti ubuntu /bin/bash 进入docker的Ubuntu (或者使用docker run -i -t ubuntu /bin/bash),然后通过passwd命令修改root的密码。

ubantu 系统打doker镜像 nginx 打包ubuntu镜像_vim_06

2、使用ssh登录docker容器

apt install -y vim 安装(更新)一下vim

ubantu 系统打doker镜像 nginx 打包ubuntu镜像_docker_07

如果出现上述情况,更新一下源 apt update

ubantu 系统打doker镜像 nginx 打包ubuntu镜像_docker_08

再执行 apt install - ­y vim

ubantu 系统打doker镜像 nginx 打包ubuntu镜像_vim_09

接着安装openssh-server:  apt install -y openssh-server

ubantu 系统打doker镜像 nginx 打包ubuntu镜像_ubuntu_10

成功安装后,vim /etc/ssh/sshd_config,修改下面配置,使得可以直接使用root 登录,修改内容如下:

(1)添加PermitRootLogin yes

ubantu 系统打doker镜像 nginx 打包ubuntu镜像_镜像_11

将上面的一句注释掉,加上PermitRootLogin yes这一句。

(2)添加UsePAM no

ubantu 系统打doker镜像 nginx 打包ubuntu镜像_vim_12

启动ssh服务,service ssh start

ubantu 系统打doker镜像 nginx 打包ubuntu镜像_ubuntu_13

exit 退出docker,输入docker ps –a,查看docker的ID

ubantu 系统打doker镜像 nginx 打包ubuntu镜像_vim_14

重新打开一个终端,通过ssh root@10.18.101.92 -p 23 进入docker:

ubantu 系统打doker镜像 nginx 打包ubuntu镜像_镜像_15

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

ubantu 系统打doker镜像 nginx 打包ubuntu镜像_镜像_16

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

 

ubantu 系统打doker镜像 nginx 打包ubuntu镜像_docker_17

 

如果没错的话,容器里的程序就会正常运行了!!!