基于Docker撰写容器来构build单个图像

我撰写的yaml有3个服务,当我使用docker-up时,我能够成功运行容器。 现在我想把这3个容器build成单个图像。 可能吗? 这是我的撰写 – 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 

这是不build议的。 您将需要对每个图像进行逆向工程,并将所需的二进制文件/文件复制到组合图像中。 这个方法是使用docker多级构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 ... 

这种方法是非常诀窍,你需要反向工程,每个图像找出哪些文件/文件夹/configuration需要复制到组合的图像…

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

即使你是成功的,你将需要在同一个容器中启动多个进程,这是不被推荐的,会引入很多复杂性。