这是我试图实现的目标.我有两个dockerfiles,它们完全相同,唯一的区别是FROM语句.一个基于CentOS,另一个基于RHEL.我遇到的问题是,每当我在一个文件中修改某些内容时,我必须在另一个文件中执行相同操作,因为它们必须相同.
对此的一个解决方案是将基础映像作为参数传递给docker build命令.我不知道这是否可能.
另一种方法是拥有某种包含文件机制.在这种情况下,我将在一个单独的文件中实现所有常见步骤,我将只包含在我的dockerfiles中.
也许还有其他方式.
有什么建议值得欢迎吗?
Ant*_*nev 17
从Docker版本17.05开始,您可以执行以下操作:
ARG MYAPP_IMAGE=myorg/myapp:latest
FROM $MYAPP_IMAGE
Run Code Online (Sandbox Code Playgroud)
您可以提供MYAPP_IMAGE
命令行参数:
docker build -t container_tag --build-arg MYAPP_IMAGE=localimage:latest .
Run Code Online (Sandbox Code Playgroud)
更多信息:https://www.jeffgeerling.com/blog/2017/use-arg-dockerfile-dynamic-image-specification
您可以在Dockerfile中拥有多个FROM语句.例如:
FROM ubuntu:latest
FROM centos:latest
COPY config /tmp/config
EXPOSE 9080 8080
Run Code Online (Sandbox Code Playgroud)
将创建两个图像.来自Docker参考文档:
FROM可以在单个Dockerfile中多次出现,以创建多个图像.
小智 7
您可以使用图像标记来处理此问题。
将 FROM 更改为:
FROM base-image
Run Code Online (Sandbox Code Playgroud)
然后在构建之前标记 RHEL 或 Centos “base-image”(使用 -f)
$ docker tag -f centos base-image
$ docker build -t my_image/builtfromcentos .
$ docker tag -f rhel base-image
$ docker build -t my_image/builtfromrhel .
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4210 次 |
最近记录: |