# Dockerfile 文件 From ubuntu:18.04 LABEL maintainer="luo <@ibnesayeed>" WORKDIR /app RUN apt-get update RUN apt-get install -y samtools COPY runsamtools.py /app/ RUN chmod 777 runsamtools.py ENTRYPOINT ["./runsamtools.py"]
# runsamtools.py 文件 #!/usr/bin/env python import sys, os sam = sys.argv[1] bam = sys.argv[2] ans = os.system("samtools view -bS "+sam+' > '+bam) print("well done runsamtools")
跟着Dockerfile描述的过成,Docker创建一个类似虚拟机的环境,里面装好了runsamtools.py这个脚本要运行需要的东西。
写好了Dockerfile,准备好相关文件后,就创建image
docker image build -t test2_docker:2.0 .
lgh@n100:~/learnDocker/docker_test2$ docker image build -t test2_docker:2.0 . Sending build context to Docker daemon 3.072kB Step 1/8 : From ubuntu:18.04 ---> 20bb25d32758 Step 2/8 : LABEL maintainer="luo <@ibnesayeed>" ---> Using cache ---> b9a27f206137 Step 3/8 : WORKDIR /app ---> Using cache ---> 9fc1b9cdab27 Step 4/8 : RUN apt-get update ---> Using cache ---> cb459d9b1272 Step 5/8 : RUN apt-get install -y samtools ---> Using cache ---> ddc302bf1173 Step 6/8 : COPY runsamtools.py /app/ ---> Using cache ---> 2430e293231b Step 7/8 : RUN chmod 777 runsamtools.py ---> Running in f848bfae98ff Removing intermediate container f848bfae98ff ---> 589f25feb073 Step 8/8 : ENTRYPOINT ["./runsamtools.py"] ---> Running in 99de85f31e02 Removing intermediate container 99de85f31e02 ---> 0f307b71f219 Successfully built 0f307b71f219 Successfully tagged test2_docker:2.0
成功后运行这个装在Docker中的脚本:
docker run -v /simm/home/lgh/lgh/gatk_pegasus:/app/files -it --rm test2_docker:2.0 /app/files/test_pe_ans.sam /app/files/create_by_docker.bam
这里要考虑一个Docker容器和宿主机之间沟通的问题,Dockerfile中指定这个‘虚拟机’的WORKDIR是/app,这里将本地要处理文件的文件夹mount到‘虚拟机’的WORKDIR下,这样,这个‘虚拟机’中的操作就可以在本地文件夹里进行。
(黄底部分是mount的方法:-v /path/in/host:/path/in/docker),完成后最后本地目录下是这样的。
create_by_docker.bam test_pe_ans.sam