如何在 Raspberry Pi 4 上创建容器化 Spring 引导应用程序?

How to create containerized Spring Boot App on Raspberry Pi 4?

我想做什么?

我想将 运行 我的 容器化的 Spring-Boot 应用程序 转换为 =123=] 在 amd64 系统上,在 Raspberry Pi 4 的 Docker 上。我该如何解决我的问题?


Raspberry Pi 上的 运行ning OS 是什么?

我已经安装了 Ubuntu Server 20.04.2 LTS for arm64 architectures using via Raspberry Pi Imager v1.6.1Raspberry Pi 4 .



我采取了哪些步骤来解决问题?(问题仍在继续)

默认版本不适用于我的 Raspberry Pi. 因此,我在下面。

我在 中将 openjdk:15-jdk-slim to arm64v8/openjdk:17 中的“FROM”行更改为dockerfile 如你所见:

FROM arm64v8/openjdk:17
COPY . /projects/red-dir
WORKDIR /projects/red-dir
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} /projects/red-dir/my_red_app.jar
ENTRYPOINT ["java","-jar","/projects/red-dir/my_red_app.jar"]

之后,我使用 Maven[ 构建并推送了我的应用程序=114=]:

$ ./mvnw clean package -Dmaven.test.skip=true && java -jar target/my_red_app.jar
$ docker build -t user/my_red_app:v1.0.0 .

然后,我的应用程序依赖于 MongoDB,所以我将 imagemongo to arm64v8/mongodocker-compose.yml 如下所示:

version: "3"
services:
    mongodb:
        container_name: mongodb
        image: arm64v8/mongo
        restart: always
        ports:
            - 27017:27017
        environment:
            MONGO_INITDB_ROOT_USERNAME: admin
            MONGO_INITDB_ROOT_PASSWORD: 12345
        networks:
            - shared-net
    colour_app:
        container_name: my_red_app
        image: user/my_red_app
        restart: always
        ports:
            - 7070:7070
        depends_on:
            - mongodb
        networks:
            - shared-net
networks:
    shared-net:
        driver: bridge


有效的方法和无效的方法

MongoDB是运行宁。我可以通过 MongoDBCompass 来使用,但是我的 Spring-启动应用程序 不工作。在 docker-compose up 命令中,我遇到了这样的输出:

...
...
colour_app    | standard_init_linux.go:219: exec user process caused: exec format error
colour_app    | standard_init_linux.go:219: exec user process caused: exec format error
colour_app    | standard_init_linux.go:219: exec user process caused: exec format error
colour_app    | standard_init_linux.go:219: exec user process caused: exec format error

让我知道哪些事情我没听清。感谢阅读。

我已经解决了我的问题,并尝试为遇到此问题的人创建简单的指南。

BUILD FOR OTHER OS(多架构/buildx 命令)

  1. 在 Docker 设置中打开“实验性”功能。
    • 对于LinuxOS
      1. sudo nano /etc/docker/daemon.json
      2. 添加以下内容:
        {
          "experimental": true
        }
        
    • 对于 Win10 OS / MAC OS:
      1. 打开Docker桌面应用程序。
      2. 转到“设置”。
      3. Select Docker 左侧的引擎 选项卡。
      4. 找到"experimental": false.
      5. 改为"experimental": true
  2. 重启Docker.
  3. 创建多架构os。 (重要:您使用的图片应该包含OS 你想创建它)
    • 创建一个 SINGLE OS :

      1. 您可以使用加载或推送命令。
        • --load表示docker保存到本地磁盘:
          docker buildx build --load --platform linux/arm64 -t <dockerhub_username>/<repository_name>:<tag_name> .
          
        • --push表示docker不保存到本地磁盘而是保存到云端(docker hub):
          docker buildx build --push --platform linux/arm64 -t <dockerhub_username>/<repository_name>:<tag_name> .
          
        • --load--push不能设置在一起
    • 创建 MANY OS :

      1. 你可以只使用 push 命令与许多 OS。

        • --push表示docker不保存到本地磁盘而是保存到云端(docker hub):

          docker buildx build --push --platform linux/amd64,linux/arm64,linux/ppc64le -t <dockerhub_username>/<repository_name>:<tag_name> .