在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用預裝程序創建并分發AArch64容器

安晟培半導體 ? 來源:安晟培半導體 ? 作者:Dave Neary ? 2022-09-30 10:57 ? 次閱讀

本文我們將探討如何使用預裝程序創建并分發 AArch64 容器。

創建容器

首先需要建立一個 Dockerfile。由于創建容器的目的是為小程序提供一個快速且占用資源最小的環境,因此選擇 Alpine Linux 作為容器運行時。Alpine Linux 是一個小型的容器基礎鏡像(8MB),在容器開發中很受歡迎。初始的 Dockerfile 非常小,在獲取容器鏡像后,將“fizzbuzz”可執行文件從預存的構建環境第一部分復制到容器中,并將可執行文件設置為容器的入口點(當容器運行時將自動運行可執行文件):

FROM alpine:latest

WORKDIR /root/

COPY ./fizzbuzz ./

ENTRYPOINT [“./fizzbuzz”]

本次演示以 Podman 為例,其命令行與 Docker 的原理類似:

[dneary@fedora fizzbuzz-c]$ podman build -f ./Dockerfile -t fizzbuzz:1

STEP 1/4: FROM alpine:latest

STEP 2/4: WORKDIR /root/

--> Using cache

a6bfe2eb0767b7966a2e25e3f1fdd638b5a74aaf8abf2abd12f54a8f20fdf9be

--> a6bfe2eb076

STEP 3/4: COPY ./fizzbuzz ./

--> 772088bc011

STEP 4/4: ENTRYPOINT ["./fizzbuzz"]

COMMIT fizzbuzz:1

--> 4afe789ccb9

Successfully tagged localhost/fizzbuzz:1

4afe789ccb91e3ce11907a81f0b0ebbe559b65b10d9e50ff86da8a610670434d

以上步驟看似可成功運行,但當運行容器時:

[dneary@fedora fizzbuzz-c]$ podman run fizzbuzz:1

{"msg":"exec container process (missing dynamic library?) `/root//./fizzbuzz`:

No such file or directory","level":"error","time":"2022-07-11T2334.000019606Z"}

顯然,運行失敗了,但失敗是容器開發的必經之路。

問題在于:構建在 Fedora 主機上的二進制文件被編譯后要動態鏈接到 glibc,而 Alpine Linux 基于 Busybox 并采用 musl 的小型 libc,旨在用于桌面和服務器之外的嵌入式環境。當我們在 Alpine 中運行二進制文件時,無法找到其所需的庫,于是便出現以上錯誤。

對于以上問題,有幾個選項可以進行修正:

1. 在主機上靜態鏈接二進制文件并復制一個嵌入了靜態版本 glibc 的全包二進制文件;

2. 給 Alpine 添加一個兼容層,讓它運行時動態鏈接到 glibc 的二進制文件;

3. 最后一項則為最優選:在 Alpine Linux 容器中構建應用程序。新 Docker 文件在 Alpine 上安裝“build-base”,并復制 C 文件和 Makefile,在容器內編譯 fizzbuzz。

FROM alpine:latest

WORKDIR /build/

# Install C compiler and Make

RUN apk --no-cache add build-base

COPY fizzbuzz.c Makefile ./

RUN make clean && make all

ENTRYPOINT ["./fizzbuzz"]

該方法相當簡單且有效。當我們建立一個新的容器并使用 Podman 運行它時,熟悉的 FizzBuzz 輸出便呈現出來。然而,當運行“podman images fizzbuzz”時,出現了以下問題:

9443a498-3fe9-11ed-b1c7-dac502259ad0.png

內存優化

由于我們安裝了 GNUMake 以及整個 C 和 C++ 開發堆棧,輕量型小容器從不到 6MB 急劇擴大到了 192MB。那么是否存在一種方法將新構建的可執行文件復制回較小的鏡像?

答案是肯定的:使用“多階段構建”容器來返回到容器的上一層,并從構建環境中復制文件。使用“builder”標記構建的環境,然后將可執行文件復制到原始容器。這也使得 Dockerfile 的復雜性略有增加。

FROM alpine:latest AS builder

WORKDIR /build/

# Install C compiler and Make

RUN apk --no-cache add build-base

COPY fizzbuzz.c Makefile ./

RUN make clean && make all

FROM alpine:latest AS app

WORKDIR /root/

# Add our executable from the builder container

COPY --from=builder /build/fizzbuzz ./

ENTRYPOINT ["./fizzbuzz"]

不過鏡像大小問題可以很好地得到解決:遷移到多階段構建后,容器鏡像恢復到可管理的 5.84MB:

接下來準備在 GitHub 中構建自定義運行程序。我們將使用預安裝在 GitHub “ubuntu-latest” 虛擬環境上的 Docker 堆棧,并在 OCI 上的自托管 AlmaLinux 實例上使用 Podman。

將 Dockerfile 添加到存儲庫后,選擇“添加新工作流”,GitHub Actions 將推薦“構建 Docker 容器”操作:

946ae846-3fe9-11ed-b1c7-dac502259ad0.png

我們自己的 Docker 鏡像工作流程如下所示。因為在每個運行器上使用的工具鏈不同,所以新的工作流程文件中存在較多重復。遺憾的是,沒有一種簡單的方法來創建一個 build matrix,從而實現在共享其余操作的同時,還能指示不同主機使用哪個容器運行時和 Builder。

name: Docker Image CI

on:

push:

branches: [ "master" ]

pull_request:

branches: [ "master" ]

jobs:

x86-fizzbuzz-container:

runs-on: ubuntu-latest

steps:

- uses: actions/checkout@v3

- name: Build the Docker image

run: docker build . --file Dockerfile --tag fizzbuzz:latest –-tag fizzbuzz:${{ github.sha }}

- name: Run the Docker image

run: docker run fizzbuzz

aarch64-fizzbuzz-container:

runs-on: [self-hosted, linux, ARM64]

steps:

- uses: actions/checkout@v3

- name: Build the Docker image with Buildah

uses: redhat-actions/buildah-build@v2

with:

image: fizzbuzz

tags: latest ${{ github.sha }}

containerfiles: |

./Dockerfile

- name: Run the Docker image

run: podman run fizzbuzz

在運行器上安裝 Podman 和 Buildah 工具后,每一次推送項目到 GitHub 后,我們終于可以在本地構建容器并在兩個不同的操作系統上運行。隨后還可以采取一些后續措施來進行完善,比如:

在構建前將項目源目錄安裝到容器中;

運行一組“冒煙測試”驗證最后一次提交未產生任何破壞;

構建容器后自動上傳到容器注冊表;

潛在地構建一個跨硬件架構容器。

不過,本文不會就構建 CI pipeline 進行介紹,我們將在今后的文章中針對基于 Ampere 處理器構建持續集成和持續交付(CI/CD)系統進行介紹。

非常感謝 Podman 社區,GitHub 貢獻的大量操作文檔,以及來自 Twitter 的優秀容器開發者對初學者問題的解答幫助。Ampere 持續挖掘開發社區的創造力,并將其與我們世界一流的處理器相結合。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11304

    瀏覽量

    209484
  • 容器
    +關注

    關注

    0

    文章

    495

    瀏覽量

    22061
  • aarch64
    +關注

    關注

    0

    文章

    7

    瀏覽量

    5029

原文標題:創芯課堂 | 通過 Ampere? Altra? 和 GitHub Actions 構建并測試 AArch64 容器

文章出處:【微信號:AmpereComputing,微信公眾號:安晟培半導體】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    誰能提供下aarch64的工具呢

    在ARM64的ubuntu里編譯xr806_openharmony,其他工具鏈都處理好了,mkimage最后生成鏡像時報錯,誰能提供下aarch64的該工具,或者可以把XRADIO_mkimage的源碼放出來,我自己編譯下,感謝!
    發表于 12-28 06:04

    在ARMv8中aarch64aarch32是怎樣進行切換的

    A64的elf程序,供fastmodel使用。如下圖所示:但是對于aarch64鏈接器,只能將A64的.o文件,鏈接到一起,不能鏈接A32的.o文件,因此這里要用到一個小技巧,將A32
    發表于 04-01 15:09

    一文讀懂ARM AArch64 state的寄存器

    表明使用SP_ELx,x表示異常級別的數字。EL0只使用SP_EL0,所以它沒有h后綴。Program Count(PC,程序計數器) in AArch64 statePC:當前執行指令的地址。它是由
    發表于 05-09 09:37

    如何在x86環境下基于Qemu和Docker快速搭建AARCH64開發環境

    :ubuntu_19.04_sve 的 docker image,讀者可以通過 AARCH64 開發環境準備 這一節提供的命令進入 AARCH64 開發環境。也可以通過 附錄 提供的方法,手動創建開發環境。到目前為止
    發表于 07-11 15:18

    為什么aarch64和x86不像以前那樣支持條件執行了呢

    為什么aarch64和x86不像以前那樣支持條件執行了呢?有哪位大神可以解釋一下嗎
    發表于 08-01 14:12

    AArch64異常模型指南

    。是的尤其與任何編寫代碼以設置或管理異常的人相關。 在本指南的最后,您可以檢查您的知識。您將能夠列出異常級別,說明執行如何在它們之間移動,命名和描述執行狀態。你還將能夠詳細說明一個簡單的AArch64矢量表的組成部分,描述如
    發表于 08-02 06:03

    AArch64自托管調試指南

    集成在Arm核心中的調試邏輯提供了觀察和控制CPU和系統環境,同時在深度嵌入式處理器上執行軟件。手臂調試體系結構規范允許將調試邏輯合并到Arm體系結構中。 本指南介紹了調試,介紹了AArch64
    發表于 08-02 10:05

    AArch64外部調試詳解

    用自托管調試模型正在調試。調試異常是自托管調試模型的基礎。這個調試器對調試邏輯進行編程以生成調試事件。這些調試事件生成調試例外情況。您可以在我們的AArch64自托管調試指南中閱讀有關此主題的內容。 當
    發表于 08-02 06:37

    Arm AArch64體系結構的可擴展矢量擴展指南

    本指南簡要介紹Arm AArch64體系結構的可擴展矢量擴展(SVE)。在本指南中,您可以了解SVE的概念和主要功能,SVE的應用領域,以及SVE與Neon的比較。我們還描述了如何為支持SVE的目標開發程序
    發表于 08-10 06:43

    AArch64平臺上性能下降的例子

    編者按:目前許多公司同時使用 x86 和 AArch64 2 種主流的服務器。這兩種環境的算力相當,內存相同的情況下:相同版本的 JVM 和 Java 應用,相同的 JVM 參數,應用性
    的頭像 發表于 09-09 11:11 ?2423次閱讀

    kvm_arm64資料下載

    支持AArch64AArch32執行狀態 ■ 32-64位互通受限于異常邊界 ■ AArch64始終具有比AArch32更高的
    發表于 06-02 11:06 ?1次下載

    AArch64寄存器介紹

    作為 RISC 架構,AArch64 提供了大量的通用寄存器。除通用寄存器之外,本節還會介紹特殊寄存器、系統控制寄存器、處理器狀態、函數調用標準。
    的頭像 發表于 08-24 09:57 ?6120次閱讀

    最新的Linux aarch64 LSA驅動程序

    電子發燒友網站提供《最新的Linux aarch64 LSA驅動程序.zip》資料免費下載
    發表于 08-23 15:46 ?2次下載
    最新的Linux <b class='flag-5'>aarch64</b> LSA驅動<b class='flag-5'>程序</b>

    探索aarch64架構上使用ftrace的BPF LSM

    aarch64跟x86_64的內核功能有差異。在筆者嘗試定位這些差異時,看到這篇文章,可以讓大家更直觀地了解LSM eBPF在兩種CPU 內核上的差異。
    的頭像 發表于 01-25 09:30 ?739次閱讀

    第四章:在 PC 交叉編譯 aarch64 的 tensorflow 開發環境測試

    本文介紹了在 PC 端交叉編譯 aarch64 平臺的 tensorflow 庫而非 tensorflow lite 的心酸過程。
    的頭像 發表于 08-25 11:38 ?1083次閱讀
    第四章:在 PC 交叉編譯 <b class='flag-5'>aarch64</b> 的 tensorflow 開發環境<b class='flag-5'>并</b>測試
    主站蜘蛛池模板: 亚色中文| 丁香综合网| japanesexxx日本69| 婷婷免费视频| 又粗又大的机巴好爽欧美| 午夜国产精品久久久久| 四虎影库在线播放| brazzers在线| h网站国产| 日本三级黄色网址| 午夜精品久久久久久99热| 九九精品国产| 一级做a爰片久久毛片人呢| 久久国产精品亚洲综合| 久久9966精品国产免费| 亚洲国内精品自在线影视| 男人你懂的网站| 免费一级毛片正在播放| 亚洲一区中文字幕在线| 日韩精品一区二区三区毛片| 亚洲第一香蕉视频| 日本高清一区二区三区不卡免费| 美女张开大腿让男人桶| 国产永久免费爽视频在线| 亚洲三级在线视频| 黄色工厂在线播放| 日韩一级黄| 一二三区电影| 1024人成网站色| 色yeye在线观看| 性a爱片免费视频性| 99日精品欧美国产| 人人插人人爽| 人人射人人干| 狠狠干狠狠操| 一级做a爰片久久毛片人呢| 大香交伊人| 日本免费一区二区视频| 国模私拍视频在线| 中文字幕av一区二区三区| 精品一区二区影院在线|