如何在docker-compose文件中使用一个服务中的多个图像?



需要了解如何在docker-compose文件中使用单个服务中的多个映像。

考虑下面的docker-compose文件

version: '3.4'
services:
postgres:
image: timescale/timescaledb:latest-pg14
restart: always
environment: 
- POSTGRES_USER=xxxx
- POSTGRES_PASSWORD=xxxx
logging:
options:
max-size: 10m
max-file: "3"
ports:
- '5432:5432'
volumes:
- ./postgres-data:/var/lib/postgresql/data
- ./sql/historydb.sql:/docker-entrypoint-initdb.d/historydb.sql    
app:
image: xxxxxxxxxxxxxx:xx.xx.xx.xx
network_mode: host 
volumes:
- ./sample:/var/sample

正如你从上面的例子中看到的,我们有两个服务(postgres和app)。

现在我们想要将这两个服务合并为一个(例如,mergedapp)。因此我们有如下的服务,

version: '3.4'
services:
mergedapp:
image: timescale/timescaledb:latest-pg14
image: xxxxxxxxxxxxxx:xx.xx.xx.xx
restart: always
network_mode: host 
environment: 
- POSTGRES_USER=xxxx
- POSTGRES_PASSWORD=xxxx
logging:
options:
max-size: 10m
max-file: "3"
ports:
- '5432:5432'
volumes:
- ./postgres-data:/var/lib/postgresql/data
- ./sql/historydb.sql:/docker-entrypoint-initdb.d/historydb.sql  
- ./sample:/var/sample

我知道上面的docker-compose内容是无效的。因此,我需要一些docker-compose文件内容来满足我的要求。

请帮助。

尝试了以下操作,但没有成功,

version: '3.4'
services:
mergedapp:
image: timescale/timescaledb:latest-pg14
image: xxxxxxxxxxxxxx:xx.xx.xx.xx
restart: always
network_mode: host 
environment: 
- POSTGRES_USER=xxxx
- POSTGRES_PASSWORD=xxxx
logging:
options:
max-size: 10m
max-file: "3"
ports:
- '5432:5432'
volumes:
- ./postgres-data:/var/lib/postgresql/data
- ./sql/historydb.sql:/docker-entrypoint-initdb.d/historydb.sql  
- ./sample:/var/sample

危险,但正好回答了你的问题:

创建一个新的Dockerfile,命名为my-merged-app-dockerfile.yml,并在该Dockerfile中使用多层。


FROM timescale/timescaledb:latest-pg14
FROM xxxxxxxxxxxxxx:xx.xx.xx.xx
#Copy everything from the first layer (red alert!)
COPY --from=0 / /

然后使用dockerfile for your compose:


services:
mergedapp:
build:
context: THE_DIRECTORY_OF_THE_DOCKERFILE
dockerfile: my-merged-app-dockerfile.yml
restart: always
network_mode: host 

但是你需要确切地知道你在做什么,因为我们把所有的东西从第一层复制到第二层。如果这就是你所说的"合并"的话。

如果你的两个基本映像的基础是相同类型的(例如ubuntu:22.04),并且你的两个映像没有重叠的库,因为不同的版本会互相终止,那么你的新映像可能在合并后存活下来。否则,可能会出现未定义的行为。

因此,我宁愿改变我的设计而不是合并(特别是如果一个图像是postgresql)

相关内容

  • 没有找到相关文章

最新更新