有没有办法跨 monorepo 共享 Dockerfile 操作
Is there a way to share Dockerfile operations across a monorepo
所以我有一个应用程序,它包含 4 个 API 和一个前端,全部保存在 monorepo 上。
一切都用 docker 设置,每个服务都有自己的 Dockerfile。
文件结构如下所示:
project
│ README.md
│ docker-compose.yml
│
└───api1
│ │ src
| | ...
│ │ Dockerfile
│
└───api2
│ │ src
│ │ ...
│ │ Dockerfile
│
└───api3
| │ src
| │ ...
...
一切正常。 API Dockerfile 看起来像这样:
FROM some_image as deployment
EXPOSE xxxx/tcp
COPY ...
RUN apk add --no-cache curl~7.80 ...
...
CMD [...]
现在我会有 curl~7.80 之类的东西以及 api 1-3 中需要的其他软件包。
我的问题是,是否有某种方式可以在我的服务中共享这个包 and/or 整个 运行 操作,以便我可以在一个地方修改它?
例如,如果 curl~7.80 中碰巧有一个假设漏洞在 7.90 中得到修复,我希望能够在一个地方修改版本,而不是遍历所有文件夹和所有 Dockerfile 来更改它.
is there some way to share this package and/or this whole RUN operation across my services in a way so that I can modify this in one place instead?
是的,您可以通过按如下方式构建项目来实现此目的:
project
│ README.md
│ docker-compose.yml
│
└───api1
│ │ src
│ │ ...
│ │ Dockerfile
│
└───...
│
│
│
│___common/
│ dependencies.txt
在 common
文件夹中,然后你可以放置一个列出依赖项的文本文件(或直接 shell 脚本),然后你可以在 Dockerfiles 中使用它:
FROM some_image as deployment
EXPOSE xxxx/tcp
COPY common/dependencies.txt .
RUN apk add `cat dependencies.txt`
...
其中 project/common/dependencies.txt
包含:
curl~7.80
注意: 这显然意味着需要从 project
目录构建 Dockerfile,例如:
docker build -f api1/Dockerfile .
所以我有一个应用程序,它包含 4 个 API 和一个前端,全部保存在 monorepo 上。 一切都用 docker 设置,每个服务都有自己的 Dockerfile。 文件结构如下所示:
project
│ README.md
│ docker-compose.yml
│
└───api1
│ │ src
| | ...
│ │ Dockerfile
│
└───api2
│ │ src
│ │ ...
│ │ Dockerfile
│
└───api3
| │ src
| │ ...
...
一切正常。 API Dockerfile 看起来像这样:
FROM some_image as deployment
EXPOSE xxxx/tcp
COPY ...
RUN apk add --no-cache curl~7.80 ...
...
CMD [...]
现在我会有 curl~7.80 之类的东西以及 api 1-3 中需要的其他软件包。
我的问题是,是否有某种方式可以在我的服务中共享这个包 and/or 整个 运行 操作,以便我可以在一个地方修改它?
例如,如果 curl~7.80 中碰巧有一个假设漏洞在 7.90 中得到修复,我希望能够在一个地方修改版本,而不是遍历所有文件夹和所有 Dockerfile 来更改它.
is there some way to share this package and/or this whole RUN operation across my services in a way so that I can modify this in one place instead?
是的,您可以通过按如下方式构建项目来实现此目的:
project
│ README.md
│ docker-compose.yml
│
└───api1
│ │ src
│ │ ...
│ │ Dockerfile
│
└───...
│
│
│
│___common/
│ dependencies.txt
在 common
文件夹中,然后你可以放置一个列出依赖项的文本文件(或直接 shell 脚本),然后你可以在 Dockerfiles 中使用它:
FROM some_image as deployment
EXPOSE xxxx/tcp
COPY common/dependencies.txt .
RUN apk add `cat dependencies.txt`
...
其中 project/common/dependencies.txt
包含:
curl~7.80
注意: 这显然意味着需要从 project
目录构建 Dockerfile,例如:
docker build -f api1/Dockerfile .