如何确保在Docker中不重复命令

我正在学习使用docker文件构build图像。

我所做的简短的描述

步骤1

为了进行testing,我使用下面的docker文件开始构build镜像

FROM centos:6.8 MAINTAINER Bilal Usean "xxxxx@xxx.xxx" RUN yum install -y httpd; yum -y clean all 

之后我运行了下面的命令

 docker build -t httpd/centos:6.8 . 

它在httpd / centos:6.8映像中成功安装apache

第2步

接下来,我正试图在现有的新创build的图像中安装jdk

 FROM centos:6.8 MAINTAINER Bilal Usean "xxxxxx@xxx@xx" RUN yum install -y httpd; yum -y clean all yum install java-1.6.0-openjdk-devel; yum -y clean all 

之后我运行了下面的命令

 docker build -t httpd/centos:6.8 . 

但它会从httpd安装再次启动,我预计它会跳过那个已经安装的httpd步骤。

我认为这是不是一个好的做法,使docker文件。我有docker文件中的20 运行命令,即从网上下载大尺寸的文件,所以我想确保每个命令的成功。 否则会中途失败,再次收取更多的MB。

注意:如果我错了,请描述处理图像和docker文件的最佳方法。

它在这里重复,因为你没有添加另一个RUN命令,而是附加(和改变)了以前的命令(docker检测到这个改变,并且运行新的命令)。

你应该写的是:

 FROM centos:6.8 MAINTAINER Bilal Usean "xxxxxxxx@xxx.xxx" RUN yum install -y httpd; yum -y clean all RUN yum install java-1.6.0-openjdk-devel; yum -y clean all