Docker使用单个Dockerfile运行多个映像?

时间:2018-12-07 08:10:38

标签: mysql docker dockerfile tomcat8

我正在尝试为我的环境测试并使用docker。这是我的Dockerfile 当我访问tomcat(http://localhost:8080)时,出现问题This site can’t be reached

注意=>对于窗口,我使用http://192.168.99.100:8080/

构建

docker build -f Dockerfile -t docker-spring-rest .

运行

docker run -p 8080:8080 -p 3306:3306 docker-spring-rest   

Dockerfile

#Prat-1 tomcat
FROM tomcat:8.5.35
COPY ./target/spring-rest.war /usr/local/tomcat/webapps/
EXPOSE 8080

#Prat-1 tomcat
FROM mysql:5.5
ENV MYSQL_ROOT_PASSWORD root
ENV MYSQL_DATABASE spring-rest
COPY ./DB.SQL /docker-entrypoint-initdb.d/

一个奇怪的事情是,如果我仅设置Part-1 tomcat而没有mysql,则可以访问http://192.168.99.100:8080/或我的应用程序http://192.168.99.100:8080/spring-rest 我的文件中是否缺少任何内容?

使用Google搜索=>我检查了此tomcat-mysql参考。为什么他们使用apt-get来安装,因为docker已经有多个映像? 我可以在单个FROM中使用多个FROM tomcat, FROM mysql, FROM xxxDockerfile吗?

1 个答案:

答案 0 :(得分:1)

关键问题在这里:“我可以在单个Dockerfile中使用多个FROM吗?”。

如果这样做,则您正在使用名为multistage-build的新docker功能。此功能使您可以分多个阶段构建图像,其中每个FROM都从一个新的基础层开始,丢弃您之前所做的一切

这不是您要执行的操作,因为当您执行FROM mysql:5.5时,会从该行上方松开整个tomcat部分。

您可以构建一个包含tomcat和mysql的docker映像(仅使用一个FROM)指令,但是我建议不要这样做。 Docker images are supposed to deal with one concern only

因此,确实最好的解决方案是创建两个Docker映像(2个Dockerfile),一个用于tomcat,一个用于mysql,然后使用docker-compose将两个作为组合运行。