
私はコンテナを上に構築していますデビアン:ジェシー(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
- 関連するアーキテクチャのイメージに基づいてイメージを構築します。
- 例:
arm32v7/debian:jessie
の代わりにdebian:jessie
- 例:
- 別のものとしてタグ付けしてください。
- 例:
fracz/fooapp:arm32-latest
、、fracz/fooapp:raspi-latest
fracz/fooapp:grandma-use-this-one
- 例:
- イメージを実行したい人は、適切なタグを選択する責任があります。
- ただし、ドキュメントやReadmeなどに関連情報を記載しておくと良いでしょう。