基于Docker撰写单个图像撰写容器
我的撰写yaml有3个服务 当我使用docker-compose时,我能够成功运行容器。 现在我想将这3个容器构建成单个图像。可能吗? 这里是这不是建议我 撰写,YAML基于Docker撰写单个图像撰写容器
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
。您需要对每个图像进行逆向工程,并将所需的二进制文件/文件复制到组合图像中。造成这种情况的方法是使用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
...
这种做法是非常招,你需要逆向工程每个图像找出哪些文件/文件夹/配置需要被复制到组合图像......
或者,您可以从其中一个图像开始,然后使用每个图像的标准安装准则安装其他程序。
即使您成功了,您也需要在同一个容器中启动多个进程,这是不被推荐的,并且会引入许多复杂性。
Thnxx您的意见..现在我试图建立的MySQL,tomcat,elasticsearch和另一项服务在Windows单个图像..我无法运行所有这些服务..我得到一个错误,因为在虚拟机初始化期间发生错误 无法为对象堆预留足够的空间......请帮助我解决此问题.. –
您是否按照https://docs.docker.com/engine/admin/multi-service_container/中的步骤操作 – yamenk
不推荐,也不会正式支持。相反,你可以做的是构建一个定制的Dockker镜像,例如,以'apexits/ubuntu-oracle-jdk8-tomcat9'为基础,你可以安装和配置mysql和elasticsearch服务,而不是混合全面的Docker镜像,造成大噩梦。 –