基于docker compose容器构建单一镜像

Sun*_*nny 11 docker docker-compose

我的 compose-yaml 有 3 个服务,当我使用 docker-compose up 时,我能够成功运行容器。现在我想将这 3 个容器构建成单个图像。是否可以?这是我的 compose-yaml

version: '2'

services:
  tomcat:
    container_name: tomcatcomposejdk
    build: .
    image: 'apexits/ubuntu-oracle-jdk8-tomcat9'
    ports:
      - "8787:8080"
      - "5003:5003"
    networks:
      b:
        ipv4_address: 10.5.0.6
    expose:
       - "8787"
       - "5003"

  mysql:
    container_name: mysqlcompose
    build: .
    image: 'mysql:5.6.36'
    ports:
      - "3306:3306"
    expose:
      - "3306"  
    networks:
      b:
        ipv4_address: 10.5.0.7
    environment:
      MYSQL_DATABASE: "bird251"
      MYSQL_ROOT_PASSWORD: "root"
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
    volumes:
      - ./BIRD251.sql:/tmp/BIRD251.sql
      - ./import.sh:/tmp/import.sh

  elasticsearch:
    container_name: escompose
    build: .
    image: 'elasticsearch:2.3.4'
    ports:
      - "9200:9200"
      - "9300:9300"
    expose:
      - "9200"
      - "9300"
    networks:
      b:
        ipv4_address: 10.5.0.8

networks:
  b:
    driver: bridge
    ipam:
     config:
       - subnet: 10.5.0.0/16
         gateway: 10.5.0.1
Run Code Online (Sandbox Code Playgroud)

yam*_*enk 6

根本不建议这样做。您将需要对每个图像进行逆向工程,并将所需的二进制文件/文件复制到组合图像中。方法是使用docker multistage build

FROM apexits/ubuntu-oracle-jdk8-tomcat9 as tomcat

FROM mysql:5.6.36 as mysql

FROM elasticsearch:2.3.4
COPY --from=tomcat /.../tomcat-installtion .../tomcat-installation
COPY --from=mysql /.../mysql-installtion .../mysql-installation
...
Run Code Online (Sandbox Code Playgroud)

这种方法非常棘手,您需要对每个图像进行逆向工程,以找出需要将哪些文件/文件夹/配置复制到组合图像上......

或者,您可以从其中一个映像开始,然后使用每个映像的标准安装指南来安装其他程序。

即使您成功了,您也需要在同一个容器中启动多个进程,这是不推荐的,并且会带来许多复杂性。

  • 感谢您的评论..现在我尝试在 Windows 单个映像上构建 mysql、tomcat、elasticsearch 和另一个服务..我无法运行所有这些服务..我收到错误,因为 VM 初始化期间发生错误无法为对象堆保留足够的空间...请帮助我解决这个问题.. (2认同)