Docker用单个Dockerfile运行多个镜像



我正在尝试为我的环境测试和使用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我的档案里少了什么吗?

谷歌=>我检查了这个tomcat mysql引用。为什么他们使用apt-get来安装,因为docker已经有多个映像了?我可以像在单个Dockerfile中使用FROM tomcat, FROM mysql, FROM xxx一样使用多个FROM吗?

这里的关键问题是:"我可以在一个Dockerfile中使用多个FROM吗?"。

如果你这样做,你就使用了一个新的docker功能,称为多级构建。该功能允许您在多个阶段构建图像,其中每个FROM都从一个新的基层开始,丢弃之前所做的一切

这不是你想要做的,因为当你做FROM mysql:5.5时,你会从这条线上松开整个tomcat部分。

您可以构建一个包含tomcat和mysql(只使用一个FROM(指令的docker映像,但我建议不要这样做。Docker镜像应该只处理一个问题。

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

最新更新