Docker-compose:合并/组合两个容器

标签 docker docker-compose

我正在尝试为我的项目创建一个 docker 环境。让我解释。

我有一个项目叫 my-project引发 war my-project.war .我创建了一个名为 my-project:latest 的 Docker 镜像其中包含 my-project.war/my-project目录。那很简单。

现在我想合并 Docker 镜像 my-project:latesttomcat:latest (这是 Tomcat 的官方 Docker 镜像)在 docker-compose.yml .我从这个开始 docker-compose.yml :

version: "3"
services:
  my-project:
    image: my-project:latest
  tomcat:
    image: tomcat:latest
    ports:
      - 8080:8080

但是我现在如何复制文件 /my-project/my-project.war来自 my-project容器到 webapps/ tomcat 中的目录容器?这在 docker-compose 中是可能的,还是应该从一个新的 Dockerfile 开始? ?

换句话说,我在组合这两个容器时遇到了麻烦。

最佳答案

你不能在 docker-compose 中做到这一点。但是,您可以在 docker 中使用一个非常好的功能,名为 MultiStage Build

基本上,创建一个新的 Dockerfile 将图像合并为一个:

FROM my-project:latest as project

FROM tomcat:latest
COPY --from=project /my-project/my-project.war /webapps

使用 docker build -t app . 构建此镜像后你将在 `/webapps' 有一个包含你 war 的 tomcat 图像。

在 docker-compose 中,只需使用此图像:
version: "3"
services:
  application:
    image: app
    ports:
      - 8080:8080

关于Docker-compose:合并/组合两个容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47461999/

相关文章:

linux - Docker 容器无法公开端口以在 Mac 上托管

docker - 构建容器时导入数据源和grafana仪表板

database - Docker-compose v3 不保留 postgres 数据库

shell - Mesos Marathon Docker容器-CommandInfo

postgresql - swarm环境docker容器中增加/dev/shm(docker stack deploy)

amazon-web-services - AWS ECS Docker : Not pointing to Drupal path and giving error You don't have permission to access this resource

docker - 我可以通过使用通用图像来节省内存吗?

asp.net - MSBUILD : error MSB1011: Specify which project or solution file to use because this folder contains more than one project or solution file

docker - Windows兼容性:权限?

docker - 如何在 Docker 中创建命名和最新标签?