不使用源映像(操作系统)创建Docker镜像

7

我们能否使用Dockerfile创建一个不依赖源镜像(操作系统)的Docker镜像呢?

FROM rhel

我们不想在所有应用程序的Docker镜像中使用基础镜像(CentOS或RHEL)。我们希望在运行时分离基础镜像(CentOS或RHEL)和应用程序镜像,并将它们链接在一起。这是可能的吗?

当我构建Docker镜像没有使用FROM centosrhel时,Docker会抱怨:“提交之前提供源图像”。

我的Docker文件如下:

MAINTAINER abc

RUN mkdir /opt/cassandra

RUN cd /opt/cassandra

RUN wget http://www.interior-dsgn.com/apache/cassandra/2.1.2/apache-cassandra-2.1.2-bin.tar.gz

RUN tar xvzf apache-cassandra-2.1.2-bin.tar.gz

RUN cd apache-cassandra-2.1.2-bin

Docker 不是这样工作的。 - Mark O'Connor
1个回答

20
您说 "我们想要在运行时分离基础镜像(CentOS或RHEL)和应用程序镜像,并将它们链接起来。" 这本质上就是 FROM rhel 所做的事情,感谢 Docker 使用的分层文件系统。

也就是说,FROM 镜像并不成为您的镜像的一部分——它仍然在一个单独的层中。您的新镜像指向那个 rhel (或其他 FROM 的基础层),然后在运行时添加自己。
所以请继续使用 FROM —— 您会得到所需的行为。
对于那些寻找构建自己的基础镜像的方式的人(这样您就不必使用任何东西作为基础),您可以使用 FROM scratch,并且您应该阅读有关创建基础镜像的内容。
完全追求严谨的话,Docker 需要 FROM 和包括 Linux 发行版根文件系统的基础,因为没有根文件系统,什么也做不了。你甚至不能用 RUN mkdir /opt/cassandra,因为 mkdir 是由根文件系统提供的程序。

谢谢。我已经尝试了所有的方法,意识到需要 root 文件系统。只是需要另一个意见来得出结论。 - bvr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接