Mysql Docker是否使用单个Dockerfile运行多个映像?
我正在尝试在我的环境中测试和使用docker。这是我的文件 当我访问tomcat(Mysql Docker是否使用单个Dockerfile运行多个映像?,mysql,docker,dockerfile,tomcat8,Mysql,Docker,Dockerfile,Tomcat8,我正在尝试在我的环境中测试和使用docker。这是我的文件 当我访问tomcat(http://localhost:8080),我发现这个问题无法访问此站点 注意=>对于窗口,我使用http://192.168.99.100:8080/ 建造 跑 Dockerfile #Prat-1 tomcat FROM tomcat:8.5.35 COPY ./target/spring-rest.war /usr/local/tomcat/webapps/ EXPOSE 8080 #Prat-1 tom
http://localhost:8080
),我发现这个问题无法访问此站点
注意=>对于窗口,我使用http://192.168.99.100:8080/
建造
跑
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-1tomcat
而不设置mysql
,我就可以访问http://192.168.99.100:8080/
或我的应用程序http://192.168.99.100:8080/spring-其余部分
我的档案有什么遗漏吗
谷歌=>我检查了这个参考资料。因为docker已经有多个映像,为什么要使用apt get
进行安装?
我可以在单个Dockerfile
中使用多个FROM
吗?关键问题是:“我可以在单个Dockerfile中使用多个FROM
…吗?”
如果您这样做,您将使用名为的新docker功能。此功能允许您分多个阶段构建图像,其中每个FROM
从一个新的基础层开始,放弃您以前所做的一切
这不是您想要做的,因为当您从mysql:5.5中执行时,您会从该行上方松开整个tomcat部分
您可以构建一个包含tomcat和mysql的docker映像(只使用
中的一条指令),但我建议不要这样做。
因此,实际上最好的解决方案是创建两个Docker映像(2个Docker文件),一个用于tomcat,一个用于mysql,然后使用Docker compose将这两个映像作为组合运行。如果您有多个容器,则应使用Docker compose。也许他们使用apt get是因为他们将其安装到当前的映像机中?灵感:一般语法包括在Dockerfile中添加额外的时间-无论最后一个FROM语句是哪个,都是最终的基本映像。要从中间映像复制工件和输出,请使用copy--from=。除此之外(对于OP):还要注意,tomcat mysql映像作为映像是不好的做法,因为它还违反了@fab@fab,一个xxx代表一个Dockerfile?是否可以使用单个shell或其他方式同时运行所有这些脚本?现在我将检查您的参考
多级构建
是的,同时运行所有这些工具的工具是。在shell中,您只需键入docker compose up
,并且需要在当前目录中提供一个docker-compose.yaml文件,该文件引用您的tomcat和mysql映像。
docker run -p 8080:8080 -p 3306:3306 docker-spring-rest
#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/