开始了解Docker是健明的一篇文章跟着jimmy学docker系列之第2讲:一个软件一个容器,那时正在研究虚拟机(Virtual Machine),发现Docker更适合现在的需求,就从基本概念和操作命令开始学习。前期顺风顺水直到看了胡博士的文章使用阿里云+Docker分析RNA-Seq与ChIP-Seq,对其Dockerfile的内容有很多不理解,后来明白Docker并不是单一独立的存在,你想要创建的镜像集成了所需的环境、软件、数据库以及脚本等,是生信处理能力的综合性体现。

显然我知识储备不够,只能默默地回去补习。我需要Docker做什么

通俗的讲,它和虚拟机的作用类似,实现与宿主机资源和系统环境的隔离。但Docker容器技术相比虚拟机具有许多优点,比如:启动速度快、占用内核资源少、轻便以及可移植性等。

在新药研发中,CFDA规定十年后对相关实验数据进行溯源性分析,依然是准确和一致的。这就需要对当初所用的环境和操作进行“打包”处理,Docker为我们提供了Dockerfile来解决自动化创建images的问题,我们可以通过编辑Dockerfile来定制镜像。按照开发和运维(DevOps)人员说法,就是一次创建或配置可以永久在不同平台运行。我的学习路径Docker命令大全

Dockerfile中的指令

B站全套生信视频课程Docker三要素

Dockerfile  是文件指令集,用来说明如何自动创建Docker镜像

Docker Images  是一个只读模板,用来运行Docker容器

Docker Containers 负责应用程序的运行,包括操作系统、用户添加的文件以及元数据

它们三者之间的关系是,通过定制化地编辑Dockerfile创建Images,Images可被下载到不同平台。

Containers是Images的一个运行实例,可以被开启和关闭。当然,还可使用docker commit命令反过来由Containers生成Images,但一般不建议这样做,主要是因为在运行中的容器中进行操作(如:安装软件或添加无关内容)会导致镜像极其臃肿。我的实战操作将centos7作为基础镜像并安装一些工具

1. FROM centos:centos7

2. MAINTAINER ZhiHaoPlus,proea_00@163.com

3. RUN yum update  -y && yum upgrade -y &&  \

yum install -y wget git curl curl-devel gcc python python-devel zsh tar bzip2

gcc-c++ readline-devel gmp-devel \

gcc-gfortran cmake zlib zlib-devel mysql mysql-devel libpng libpng12 libpng-devel libtiff libtiff-devel libjpeg \

libjpeg-devel openssh-clients  boost boost-devel && \

yum clean all && rm -rf /tmp/* /var/tmp/*

4. RUN curl 'https://bootstrap.pypa.io/get-pip.py' -o 'get-pip.py' && python get-pip.py && pip install s3cmd设置环境变量、安装miniconda以及所需软件5. WORKDIR /tmp

6. RUN yum install -y java

7. RUN wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-4.5.4-Linux-x86_64.sh

8. RUN bash ./Miniconda3-4.5.4-Linux-x86_64.sh -b -p /opt/miniconda3

9. ENV PATH=/opt/miniconda3/bin:$PATH

10. RUN conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ && \

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r/ && \

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/mro/ && \

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ && \

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ && \

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/ && \

conda config --set show_channel_urls yes

11. RUN conda install R -y

RUN conda install bwa -y

RUN conda install samtools -y

RUN conda install tabix -y

RUN conda install bedtools -y

RUN conda install MACS2 -y

RUN pip install pysam==0.8.3 pybedtools==0.6.9

RUN pip install -d . ngslib

RUN pip install HTSeq==0.6.0 brewer2mpl svgwrite seaborn  sklearn

RUN conda install mysql-python下载数据和脚本

12. RUN mkdir -p /data/fastq /data/fasta /data/script  /source

13. WORKDIR /data/source

14. RUN git clone https://github.com/ZhihaoPlus/DokcerTest.git

若考虑数据的储存和保密性,可使用挂载指令(VOLUME),不过需要注意的是此指令无法指定宿主机上对应的目录,而是自动生成的,因此在启动容器时选择了另一种挂载方式。创建images并修改名称docker build.

因为在Dockerfile在当前工作目录下,所以用“ . ”代替了绝对路径。

镜像创建成功并生成了一个最终ID

docker images

docker tag aca8551e61bb zhihaoplus/test:test

dcoker images

查看并修改镜像名称启动容器并运行脚本docker run -it -v ~/data/fastq:/data/fastq -v ~/data/script:/data/script aca8551e61bb

nohup bash /data/script/pipeline.sh &

ps -ef

-v参数指定挂载点

脚本成功运行起来了遇到的问题

之前为了测试Dockerfile编辑是否成功,加了指令 CMD echo 'Hello,World!',其在启动容器时执行echo命令,然而奇怪的事情发生了,启动容器后确实输出了'Hello,World!'却没进入容器中,就好像没被开启。如下图:

实际上它只是开启后又立即关闭了(Created到Exited只有2秒)。这跟Docker自身机制有关,当容器内的进程全部退出时,容器也会停止运行,也就是说你得让它一直有事干,没有,就会退出。解决办法

最直接保险的方法是,Dockerfile不加入启动指令(CMD和ENTRYPOINT),这样容器启动后会有一个/bin/bash的进程在运行。有需要让脚本在容器启动时运行,则可以加-d参数让容器在后台以守护状态运行docker run -it -d IMAGES_ID /bin/bash。

dockerfile如何运行镜像内的脚本_如何从看不懂Dockerfile到创建自己的镜像相关推荐

  1. dockerfile如何运行镜像内的脚本_第七章 Dockerfile文件解析(一)

    七 Dockerfile文件解析-1 7.1 定义:Dockerfile是用来构建Docker镜像的文件,是由一系列命令和参数构成的脚本 7.2 Dockerfile内容基础知识: 1.每条保留字指令 ...

  2. dockerfile如何运行镜像内的脚本_Docker精华问答 | Docker commit如何用?

    Docker 是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的维护效率,降低了云计算应用开发的成本!使用 Docker,可以让应用的部署.测试和分发都变得前所未有的高效和轻松! 1 ...

  3. ssrf漏洞内网渗透_渗透小白看了也能明白的SSRF

    什么是SSRF 含义 服务器端请求伪造(SSRF)是指攻击者能够从易受攻击的Web应用程序发送精心设计的请求的对其他网站进行攻击.(利用一个可发起网络请求的服务当作跳板来攻击其他服务) 攻击者能够利用 ...

  4. python【数据结构与算法】内置函数 zip() 函数(看不懂你来打我)

    文章目录 描述 语法 返回值 实例 描述 zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表. 如果各个迭代器的元素个数不一致,则返回列表长度 ...

  5. java异常看不懂_报错了 看不懂求解

    严重: Error configuring application listener of class CodeConsoleInitializer java.lang.ClassNotFoundEx ...

  6. 使用7zip把jre集成到绿色运行程序内

    http://mark.koli.ch/bundle-java-the-jre-and-launch-a-java-app-with-7zip-sfx这是一个使用7zip把jre集成到绿色运行程序内的 ...

  7. docker运行python程序_如何使用Docker运行多个Python脚本和一个可执行文件?

    我想创建一个包含两个Python包和一个包含一个可执行文件的包的容器.在 这是我的主包(dockerized_packeg)树:dockerized_project ├── docker-compos ...

  8. 在别人网页上运行js脚本_初始JavaScript,世界上最流行的语言之一

    1.JavaScript 是什么? JavaScript 是世界上最流行的语言之一,是一种运行在客户端的脚本语言 (Script 是脚本的意思) 脚本语言:不需要编译,运行过程中由 js 解释器( j ...

  9. python执行多个py文件_【经验分享】如何同时运行多个python脚本

    当我们想一次运行多个py脚本的时候你想到了什么应用场景了吗?当你想同时并行的处理一些对象时你有什么好方法吗?下面我就简单的总结一些这方面的小技巧,方便大家根据情况灵活处理. 1 用一个py脚本运行多个 ...

最新文章

  1. 管理多供应商物联网项目的10个关键步骤
  2. php-fpm – 配置详解
  3. 如何删除未推送的git commit?
  4. java 子进程输出流_具有输入/输出流的Java进程
  5. 在11g中alter system set recyclebin = off 报错 recyclebin 参数在11g和10g中的区别
  6. HDLBits答案(13)_Verilog移位寄存器附加题
  7. eks volumn s3_威客电竞 深渊联赛S3欧洲区总决赛,Secret成就八连冠
  8. REDIS 字典数据结构
  9. 使用Marshal.Copy把Txt行数据转为Struct类型值
  10. 腾讯云linux vnc端口,用腾讯云手把手教你用VNC搭建Ubuntu可视化界面(一)
  11. 微服务中的面向切面编程和更多模式
  12. 女人活到后半生才会明白:兜里有钱,才有安全感
  13. 第10章 评价分类结果 学习笔记下
  14. HTML5页面播放音乐
  15. 在线购物系统后台登录界面html代码,电子商城(购物网站)html模板源码
  16. mysql where 小于_MySQL-过滤数据(WHERE语句)
  17. OROCOS之KDL(1)—— windows环境搭建篇
  18. java——财务支票大写汉字转换
  19. Qt的各版本直接下载地址
  20. Redhat_rhel_linux镜像下载,持续更新......

热门文章

  1. IMWebConf 2017 官网彩蛋解谜
  2. PTA 查找(散列查找)
  3. 《关于我怎么看待情人节这件事》
  4. WEB创业的十条规则
  5. NW.js 打包并发布桌面应用 ---备忘心得
  6. 和i77700性能一样的服务器cpu,7代酷睿i7-7700K评测:可能是Intel史上最无悬念的换代...
  7. 啥牌子的蓝牙耳机舒适度好?佩戴舒适的真无线耳机
  8. 招远西苑学校计算机老师王梅,招远市西苑学校二位教师
  9. 追猎者:美国“财政悬崖”危机上升,贵金属震荡下挫
  10. 校园导游系统(纯C语言实现)最短路径---迪杰斯特拉算法