異なるアーキテクチャ用にビルドされた Docker イメージを Docker HUB で公開するにはどうすればよいですか?

異なるアーキテクチャ用にビルドされた Docker イメージを Docker HUB で公開するにはどうすればよいですか?

私はコンテナを上に構築していますデビアン:ジェシー(opensslコンパイルとカスタムのものがいくつかあります)。私のイメージは発射可能さまざまなアーキテクチャ、たとえば「通常の」x86_64 OS だけでなく、RaspberryPI のような ARM ベースのアーキテクチャでも使用できます。

x86_64 でイメージをビルドして HUB に公開すると、ARM デバイスでプルしても機能しないことがわかりました。その逆も同様です。そうしようとすると、「一部のライブラリが見つかりません」または「認識されないコマンド」というエラーが発生します。

質問は、他のアーキテクチャで使用できるようにイメージをビルドして公開する方法 (そして、重要なのは、ダウンロード時に適切なものを自動的に選択するように docker に指示する方法) です。

わかりますDebianコンテナはさまざまなアーキテクチャに「移植」されているしかし、私のイメージでこれを実現する方法についての情報が見つかりません。

答え1

Dockerのマルチアーキテクチャイメージは現在開発中です。その鍵となるのがdocker manifestこのPRではまだ開発中

まず、適切なアーキテクチャ システムでいつでも直接実行できる、さまざまなアーキテクチャのイメージを作成する必要があります。マルチアーキテクチャ イメージは、これらのイメージを指す「マニフェスト リスト」です。マルチアーキテクチャ イメージをプルすると、Docker クライアントはそのリストから適切なイメージをプルします。

上記のPRがDockerに統合されるまでは、マニフェストツールこれにより、マニフェスト リストを定義してレジストリ サーバーにプッシュできます。これにより、次の例のような入力 yaml ファイルが可能になります。

image: myprivreg:5000/someimage:latest
manifests:
  -
    image: myprivreg:5000/someimage:ppc64le
    platform:
      architecture: ppc64le
      os: linux
  -
    image: myprivreg:5000/someimage:amd64
    platform:
      architecture: amd64
      features:
        - sse
      os: linux

次に、以下を実行して上記の yaml ファイルを取得し、定義済みのレジストリにプッシュされるマニフェスト リストに変換します。

./manifest-tool push from-spec someimage.yaml

答え2

  1. 関連するアーキテクチャのイメージに基づいてイメージを構築します。
    • 例:arm32v7/debian:jessieの代わりにdebian:jessie
  2. 別のものとしてタグ付けしてください。
    • 例: fracz/fooapp:arm32-latest、、fracz/fooapp:raspi-latestfracz/fooapp:grandma-use-this-one
  3. イメージを実行したい人は、適切なタグを選択する責任があります。
    • ただし、ドキュメントやReadmeなどに関連情報を記載しておくと良いでしょう。

関連情報