最近要把应用打包到一个 arm 架构的服务器上运行,但是手头的电脑都是 x86_64 的。
上网查了一下,可以根据摘要下载镜像,方式是 docker pull name:tag@sha256:digest
。想着直接把 arm 的镜像拉下来,应用扔进去,打包一下最后直接扔到服务器上就行了。
在我根据摘要把镜像下载之后,发现 tag 变成了空的,所以我顺手改了一下,又尝试运行了一遍,竟然可以运行。
镜像是 tomcat ,按理说用的 jdk 应该也是 arm 的,应该是不能跑的吧。这是为什么呢?
谢谢!
REPOSITORY | TAG | DIGEST | IMAGE ID |
---|---|---|---|
arm64v8/tomcat | 9.0.54-jre8-openjdk | none | 2a4d541aa065 |
tomcat | none | sha256:eacda77cc58a597806a93f5cb23e8c48d62b8b874623b05e69e3bfcfe646d41a 2a4d541aa065 |
1
matenshi OP 补充一个镜像的信息
| REPOSITORY | TAG | DIGEST | IMAGE ID | | ---- | ---- | ---- | ---- | | arm64v8/tomcat | 9.0.54-jre8-openjdk | none | 2a4d541aa065 | | tomcat | none | sha256:eacda77cc58a597806a93f5cb23e8c48d62b8b874623b05e69e3bfcfe646d41a 2a4d541aa065 | 看了看启动日志,有条是: 25-Oct-2021 08:29:32.631 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: aarch64 搜了搜,这个 arm64 和 aarch64 好像是一回事 |
2
Zhuzhuchenyan 2021-10-25 20:30:38 +08:00 1
我理解你的问题是,为什么 x86 的 docker 可以直接运行 arm64 的 docker image ?
以 Docker Desktop 为例子,安装时会自动安装 qemu 依赖,不同架构的镜像靠的是 qemu 模拟,可以参考以下回答 https://stackoverflow.com/questions/66350893/why-macosx86-can-run-docker-arm-container-arm64v8-alpine/66435150#66435150 可以通过 docker manifest 来检查一个镜像的架构,比如 docker manifest inspect --verbose arm64v8/alpine "platform": { "architecture": "arm64", "os": "linux", "variant": "v8" } |
3
ampedee 2021-10-25 21:04:55 +08:00 via iPhone 1
楼上说的对,如果你用的是 docker 客户端,自带虚拟机,两种架构的镜像都能运行
|
4
matenshi OP @Zhuzhuchenyan 谢谢解答,非常感谢。
|