Technology sharing

Usus docker buildx aedificare crucis suggestus imagines

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

buildx instrumentum aedificationis publice a Docker provisum est. Utentes adiuvare potest imagines cito et efficaciter aedificare Docker, et constructionem plurium suggestorum sustinet. Utentes buildx, utentes imagines multas architecturas aedificare possunt, ut x86 et architecturae armandae, in uno imperio sine manu ad multa mandata aedificanda operantur. In addition, buildx etiam sustinet multi-scaenae constructionis et dockerfilii caching, quae efficientiam et celeritatem imaginis constructionis magnopere emendare potest.

buildx est CLI obturaculum-in eo quod Docker aedificat administrat. Substratum iacuit utitur BuildKit ad ampliandum facultatem aedificandi Docker.

BuildKit est summus perficientur fabricare machinam publice a Docker provisum, quod fabricare machinam originale Docker reponere adhiberi potest. Cum machina originali comparata, BuildKit celeritas aedificandi, parallelismus altiorem, minus subsidii usus et securitas melior.

Ad institutionem et usum buildx, numerus versionis Docker Engine maior est quam vel aequalis 19.03.

Crucem suggestus imaginem aedificii belli

Hic aedificator varias rationes ad imagines crucis suggestus aedificandas sustinet.

Usus QEMU aemulatio in nucleo

Si Docker Desktop uteris, QEMU iam sustentatur et est simplicissimum consilium ad imagines crucis suggestus aedificandas. Mutationes aliquas ad Dockerfile original non requirit.

principium opus;

QEMU est processus simulator qui CPU architecturas diversas simulare potest. Eam ut aliam speciem machinae virtualis intelligere possumus. In buildx, QEMU binarios fungi pro architecturae non-nativarum in processu aedificandi adhibita. Exempli causa, cum ARM imaginem aedificans in hospite x86, QEMU ambitum ARM simulare potest et binaries ARM currere.

binfmt_misc modulus est nuclei Linux qui users ad formas documentorum exsecutabiles et respondentes interpretes admittit.Cum nucleus incidit in documentum exsecutabile formae ignotae, binfmt_misc adhibetur ut interpres in forma tabellae coniungitur (QEMU in hoc casu) et tabella currunt. . Hoc munus in rk3568 suggestum est.

Coniunctio QEMU et binfmt_misc facit aedificium crucis suggestus possibilis per buildx. Hoc nobis permittit imagines fabricare Docker unius architecturae in hospite aliis architecturae sine odio habere scopum ipsum.

Etsi Docker Desktop prae-figuratur cum fulcimento binfmt_misc pro aliis suggestis, pro aliis versionibus Docker, opus est imagine tonistiigi/binfmt uti in vase privilegiato ad fulciendum incipere.

docker run --privileged --rm tonistiigi/binfmt --install all

Currens hoc praeceptum interpretem programmata architecturae diversarum instituet, id est, qemu simulator in directorio /usr/bin;

Modulus binfmt_misc oneratur in servo nostro compilation:

Munus docker buildx per qemu

Docker Buildx notam experimentalem est Docker quae facultatem aedificandi Docker porrigit, incluso usui multi-nodi, qemu, etc. QEMU fons apertus est programmatis virtualis machinae quae CPUs et alia ferramenta simulare potest, sinit nos imaginem alterius systematis operantis in una ratio operante aedificare.

Usura qemu functionis Docker Buildx adiuvare potest nos imagines aedificare Docker pro multiplicibus architecturae diversis (ut ARM, MIPS, etc.).

Hoc exemplum simplex est ostendens quomodo uteretur Docker Buildx et QEMU ad imaginem fabricandam Docker pro ARM architecturae:

  1. # 创建一个新的 buildkit 实例
  2. docker buildx create --name mybuilder --use
  3. # 启动 buildkit 实例
  4. docker buildx start mybuilder
  5. # 启用 QEMU 驱动支持
  6. docker buildx inspect --bootstrap
  7. # 构建一个面向 ARM 架构的 Docker 镜像
  8. docker buildx build --platform linux/arm/v7 -t myimage:latest .

In hoc exemplo;--platform Parameter designat scopum suggestum quod aedificare volumus nam ARM v7. Hoc modo, Docker QEMU utetur ad ambitum ARM simulare et imaginem Docker pro ARMA architecturae in machina architecturae x86 construere.

ratio fasciculi binfmt_misc

binfmt-misc munus est a Linux nucleo simile fasciculi consociationi in Fenestra, sed potentior quam consociatio fasciculi est quod non solum iudicare potest innixa tabella nominis suffixi, sed etiam aperiri potest utens diversis programmatibus in tabella content (Magic Bytes) . Usus typicus missionis est qemu utatur ut lima binaria in aliis suggestis architecturae concurrat.

Admitte binfmt-misc

Ut temporaliter id facias, hoc utere imperio;

$ sudo mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc

Haec methodus irrita fiet post restarting.

none  /proc/sys/fs/binfmt_misc binfmt_misc defaults 0 0

Praecepto sequenti uti potes ut reprimas an aperiatur bene;

  1. $ mount | grep binfmt_misc
  2. binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,relatime)
  3. $ ls -l /proc/sys/fs/binfmt_misc
  4. 总用量 0
  5. --w------- 1 root root 0 25 22:55 register
  6. -rw-r--r-- 1 root root 0 25 22:55 status

Primum rationem cum architectura arm64 para.

bash: ./go-test:无法执行二进制文件: 可执行文件格式错误

Nunc, aptum instituendum qemu-user-binfmt mandatum exequamur, ac deinde programmata superius arm64 curramus et invenias quod regulariter currere potest. Post qemu-user-binfmt insertis, plura scrinia creabuntur in directorio /proc/sys/fs/binfmt_misc, inter unum qemu-aarch64.

  1. root@ubuntu:/proc/sys/fs/binfmt_misc# cat qemu-aarch64
  2. enabled
  3. interpreter /usr/bin/qemu-aarch64-static
  4. flags: OC
  5. offset 0
  6. magic 7f454c460201010000000000000000000200b700
  7. mask ffffffffffffff00fffffffffffffffffeffffff
  8. root@ubuntu:/proc/sys/fs/binfmt_misc#

Hic file praecepta lima describitur:

Prima linea para indicat regulam admittit;

Secunda linea interpres /usr/bin/qemu-aarch64-staticum indicat uti /usr/bin/qemu-aarch64-static ad binarium fasciculum exequendum;

Tertia linea: OC vexillum currentem repraesentat, significatio speciei talis est;

P: significat pro conserva-argv, quod significat cum vocans simulatorem, parametri originalis conservabitur.Hoc utile est in condicionibus in quibus programmata tacita necesse habent nomen proprium cognoscendi (i.e. argv[0]) apud runtime

O: offset repraesentat, quod significat antequam simulator incipiens, cinguli legi debet ex fasciculo binario, et haec cinguli pro modulo simulatoris adhibebitur.

C: significat documentorum, quod significat aemulatorem currentem cum eodem usuario ID et coetus ID programmatis originalis adhibita, quae adiuvat ut aemulus curreret iisdem permissionibus ac programmatis originalibus.

Quarta linea: offset 0 significat incipiens tabella ex 0 valorem legere;

Quintus versus: magia 7f454c46020101000200b7000000000000000000b700 modulo byte comparatae repraesentat;

Campus notoria in titulo architecturae ELF limae arm64 talis est, quod significat ratio fasciculi binfmt_misc determinare potest qua architectura simulator utatur ad currendam tabellam in campo magiae ELF fasciculi:

Infra duo alia architecturae

Mips architectura: 7f454c4601020100000000000000000000020008
arm64 architectura: 7f454c460201010000000000000000000200b700

Linea 6: larva 00ffffffffffffffffffffffffff byte larva repraesentat, quae in tabella quaedam parvas bytes ignorare potest.

ARMA ARMA ARCHITECTURA Docker image in x86_64 systema

Nunc utimurdockerPraeceptum decurrit ad imaginem arm64;

  1. $ docker run -it arm64v8/ubuntu bash
  2. Unable to find image 'arm64v8/ubuntu:latest' locally
  3. latest: Pulling from arm64v8/ubuntu
  4. 005e2837585d: Pull complete
  5. Digest: sha256:ba545858745d6307f0d1064d0d25365466f78d02f866cf4efb9e1326a4c196ca
  6. Status: Downloaded newer image for arm64v8/ubuntu:latest
  7. standard_init_linux.go:207: exec user process caused "no such file or directory"

Post explorationem, comperi dum tale praeceptum facio;apt install qemu-user-staticErgo incipit DockercontinensTation praesent.

Per multi scaena crucis-constructum in Dockerfile

Complexitas compilationis crucis non in Docker sed in ipso programmatis consistit. Exempli gratia: Progressiones Ire facile possunt transire compilata. Tantum opus est duas variabiles ambitus GOOS et GOARCH exsequi cum programmata aedificandi utendi eunt.

Create architectus

Ut buildx utatur ut aedificet suggestum crucis, primum opus est fabricatorem creare, qui ut aedificator interpretari potest.

Utere docker buildx ls mandatum videre artifex album:

  1. root@ubuntu:/proc# docker buildx ls
  2. NAME/NODE DRIVER/ENDPOINT STATUS PLATFORMS
  3. mybuild * docker-container
  4. mybuild0 unix:///var/run/docker.sock running linux/arm64*, linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/amd64/v4, linux/386
  5. vigilant_hugle docker-container
  6. vigilant_hugle0 unix:///var/run/docker.sock stopped
  7. default docker
  8. default default running linux/amd64, linux/386

Signum * significat structoris nunc in usu. AGITATOR/ENDpoint in secunda columna auriga usus indicat. buildx hoc sustinet rectoribus:

  • docker: Utere bibliotheca BuildKit sarcina in Docker daemoni, quod est default BuildKit insertis Docker.
  • docker-continens: Usus Docker ad novum vas constructum creandum.
  • kubernetes: Pod BuildKit crea in botro kubernetes.
  • remote: Connect directe ad structuram manually managed daemonem.

Quia fabricator default utens auriga agitator non sustinet structuram crucis suggestuum imagines uno imperio utentes (parametrum default aedificatoris solum unum valorem accipit), necesse est novum fabricatorem creare utens scopulus continentis exactoris .

Praeceptum syntaxis est haec:

$ docker buildx create --name=<builder-name> --driver=<driver> --driver-opt=<driver-options>

Parametri sensus talis est;

--name: Constructum nomen, required.

-- Coegi: conditor agitator, defalta est docker-continens.

--driver-opt: optiones exactoris. Exempli gratia, optio --driver-opt=image=moby/buildkit:v0.11.3 designatum versionem BuildKit instituere potest.

Possumus creare novum artificem utens hoc mandato:

  1. $ docker buildx create --name mybuilder
  2. mybuilder

Reprehendo hic album iterum:

  1. $ docker buildx ls
  2. NAME/NODE DRIVER/ENDPOINT STATUS BUILDKIT PLATFORMS
  3. mybuilder * docker-container
  4. mybuilder0 unix:///var/run/docker.sock inactive
  5. default docker
  6. default default running 20.10.21 linux/arm64, linux/amd64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
  7. desktop-linux docker
  8. desktop-linux desktop-linux running 20.10.21 linux/arm64, linux/amd64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6

Potes invenire quod constructum electum est switched ad Mybuilder.

Satus architectus

Mystructor noster nuper creatus est nunc otiosus et eget ante ut incipiat antequam adhiberi potest.

  1. $ docker buildx inspect --bootstrap mybuilder
  2. [+] Building 16.8s (1/1) FINISHED
  3. => [internal] booting buildkit 16.8s
  4. => => pulling image moby/buildkit:buildx-stable-1 16.1s
  5. => => creating container buildx_buildkit_mybuilder0 0.7s
  6. Name: mybuilder
  7. Driver: docker-container
  8. Nodes:
  9. Name: mybuilder0
  10. Endpoint: unix:///var/run/docker.sock
  11. Status: running
  12. Buildkit: v0.9.3
  13. Platforms: linux/arm64, linux/amd64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6

Inspectus subimperandi ad statum aedificationis reprimendum adhibetur.

  1. $ docker buildx ls
  2. NAME/NODE DRIVER/ENDPOINT STATUS BUILDKIT PLATFORMS
  3. mybuilder * docker-container
  4. mybuilder0 unix:///var/run/docker.sock running v0.9.3 linux/arm64, linux/amd64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6
  5. default docker
  6. default default running 20.10.21 linux/arm64, linux/amd64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
  7. desktop-linux docker
  8. desktop-linux desktop-linux running 20.10.21 linux/arm64, linux/amd64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6

Valor in craticulas columnae ostendi

linux/arm64, linux/amd64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6 fulciuntur a fabricatore currenti. pulpita.

Nunc ps ps nauale utere, ut videas ut vas aedificatoris respondens incepit aedificatori meo.

  1. $ docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. b8887f253d41 moby/buildkit:buildx-stable-1 "buildkitd" 4 minutes ago Up 4 minutes buildx_buildkit_mybuilder0

Hoc continens adhibetur ut nos ad imagines crucis suggestus aedificandas adiuvet.

Utere hic aedificare imagines crucis suggestum

$ docker buildx build --platform linux/arm64,linux/amd64 -t jianghushinian/hello-go .

Syntax aedificandi docker constructi idem est ac clavicularius aedificator. --platform parameter indicat suggestum scopo imaginis aedificandi, -t significat tag imaginis; . contextus indicat hodiernam directorium。 

Sola res quae non operatur est firmamentum parametri --platformi. Parametri docker --platform tantum sustinet praeteriens unum suggestum informationem, ut --platform linux/arm64, quod significat unum suggestum imagini posse. edificari tempore.

Utens docker buildx aedificavit ad aedificandum subsidia imaginis tradendae multiplex notitia tribunalis simul, commatibus Anglicis separatis, ita munus aedificandi plures imagines crucis suggestus uno tantum imperio cognoscens.

Post preceptum supradictum exequentes monitionem dabimus;

WARNING: No output specified with docker-container driver. Build result will only remain in the build cache. To push result image into registry use --push or to load image into docker use --load

Monitio haec nos admonet nos non nominavisse output pro dromedario exactoris loci servare imaginem.

Haec causa est, quia novus aedificator noster incipit vas ad currendum BuildKit

Conemur speciem --load servare imaginem in locali exercitui.

  1. $ docker buildx build --platform linux/arm64,linux/amd64 -t jianghushinian/hello-go . --load
  2. [+] Building 0.0s (0/0)
  3. ERROR: docker exporter does not currently support exporting manifest lists

Erit error log. Videtur quod imagines crucis suggestus locali non sustineat. Hoc est, quod multiplex --platforms praetereunt machina.

Tunc solum possumus imaginem crucis suggestus ad remotum horreum per impulsum parametri impellere. Nihilominus, antequam hoc facias, efficere debes ut login uteres docker ad perficiendum.

$ docker buildx build --platform linux/arm64,linux/amd64 -t jianghushinian/hello-go . --push

Nunc ini ad Docker Hub et imaginem crucis eiectae videre potes.

Imagines etiam uti possumus ad manifestas informationes imaginis crucis suggestus reprimendas. Hoc mandatum tantum adhiberi potest ad informationes imaginum in horreis obtinendas, et imagines locales aspici non possunt.

  1. $ docker buildx imagetools inspect jianghushinian/hello-go
  2. Name: docker.io/jianghushinian/hello-go:latest
  3. MediaType: application/vnd.docker.distribution.manifest.list.v2+json
  4. Digest: sha256:51199dadfc55b23d6ab5cfd2d67e38edd513a707273b1b8b554985ff562104db
  5. Manifests:
  6. Name: docker.io/jianghushinian/hello-go:latest@sha256:8032a6f23f3bd3050852e77b6e4a4d0a705dfd710fb63bc4c3dc9d5e01c8e9a6
  7. MediaType: application/vnd.docker.distribution.manifest.v2+json
  8. Platform: linux/arm64
  9. Name: docker.io/jianghushinian/hello-go:latest@sha256:fd46fd7e93c7deef5ad8496c2cf08c266bac42ac77f1e444e83d4f79d58441ba
  10. MediaType: application/vnd.docker.distribution.manifest.v2+json
  11. Platform: linux/amd64

 

Ut videre potes, haec imago crucis suggestus imagines duorum suggestorum scutorum continet, nempe linux/arm64 et linux/amd64.