【问题标题】:How to create containerized Spring Boot App on Raspberry Pi 4?如何在 Raspberry Pi 4 上创建容器化 Spring Boot 应用程序?
【发布时间】:2021-07-04 18:59:34
【问题描述】:

我想做什么?

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


Raspberry Pi 上运行的操作系统是什么?

我已经使用 Raspberry Pi Imager v1.6.1 安装了 Ubuntu Server 20.04.2 LTS for arm64 架构 em> 在 Raspberry Pi 4 上。



我采取了哪些措施来解决问题?(问题仍然存在)

默认版本不适用于我的Raspberry Pi。因此,我在下面尝试了一些方法。

我在我的 openjdk:15-jdk-slim 将“FROM”行从 arm64v8/openjdk:17 更改为 arm64v8/openjdk:17 >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"]

之后,我使用 MavenDocker 构建并推送了我的应用程序:

$ ./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,所以我将这个 图像mongo 更改为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-Boot 应用程序 不起作用。在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

让我知道我没有抓住哪些东西。感谢您的阅读。

【问题讨论】:

    标签: spring-boot docker maven docker-compose raspberry-pi4


    【解决方案1】:

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

    为其他操作系统构建(多架构/buildx 命令)

    1. 在 Docker 设置上启用“实验性”功能。
      • 对于 Linux 操作系统
        1. sudo nano /etc/docker/daemon.json
        2. 向其中添加以下内容:
          {
            "experimental": true
          }
          
      • 对于 Win10 操作系统/MAC 操作系统
        1. 打开 Docker 桌面 应用程序。
        2. 转到设置。
        3. 选择左侧的Docker Engine选项卡。
        4. 找到"experimental": false
        5. 将其更改为"experimental": true
    2. 重启 Docker。
    3. 创建多架构操作系统。 (重要提示:您使用的图像应包含您要创建的操作系统
      • 创建一个单一操作系统

        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 不能同时设置。
      • 创建一个许多操作系统

        1. 你可以在许多操作系统上使用 push 命令。

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

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

    【讨论】:

      猜你喜欢
      • 2022-08-17
      • 1970-01-01
      • 2020-06-19
      • 1970-01-01
      • 2020-04-22
      • 1970-01-01
      • 1970-01-01
      • 2020-07-12
      • 1970-01-01
      相关资源
      最近更新 更多