Docker マルチCPUアーキテクチャーについて(複数アーキテクチャーに対応したDockerイメージの作成)


Docker のマルチCPUアーキテクチャーを使って、Docker Desktop for Windowsでx86_64(amd64)とArm64(AArch64)の2つのアーキテクチャーに対応したイメージを作成し、Arm64に対応したイメージをJetson NanoのJetpackにプレセットされているNVIDIA Dockerで動かしてみます(あぁ、ややこしい!)。

例えばWindowsプラットフォーム(x86_64)で複数のアーキテクチャに対応したイメージを作成します。

Firefoxを起動するイメージ

 

マルチCPUアーキテクチャについてはコチラのページ参照

前段はほぼこのページを参考にしています。手順のみざっくりと。

後段はJetson Nanoでのイメージの実行です。


事前準備1

Windows 10 Pro (64bit) にDocker Desktop for Windows をインストールする方法やFirefoxをGUIで表示する方法などは

Docker Desktop for Windows で X Window を使ってGUI表示

 


事前準備2

Docker Hubにアカウントを作っておきます。

ローカルDockerは自身で動作するイメージを扱うことを前提にしていますから「異なる環境のイメージは保持できない」そうです。

そこで、ビルドしたDockerイメージをローカルに保持することなく「Docker Hub」へ直接出力するために、ご自分用のアカウントが必要になります。

 


詳細はコチラのページを見ていただくとして、ざっくりと手順のみ

Docker のマルチCPUアーキテクチャをつかうために、Dockerの実験的機能「buildx」なるものを有効化しておきます。

Docker DesktopのDashboardから

 

PowerShellを起動して確認

 


ビルダーインスタンスというものを使う

デフォルトのビルダーインスタンスを確認してみます。

「default」の横に「*」マークが付いていますが、これは「現在使用するビルダーインスタンス」です。

「マルチCPUアーキテクチャー」に対応したイメージのビルドは、デフォルトのビルダーインスタンスを使って行うことはできません。

新規に「mybuilder」という名前のビルダーインスタンスを作成します。

次に、使用するビルダーインスタンスを「mybuilder」にするように変更します。

さらにビルダーインスタンスを起動して有効化します。

ビルダーインスタンスの一覧を確認します。

「mybuilder」の横に「*」マークが移動し、「mybuilder」の状態が「running」になっています。
これでOKです。

DockerイメージとDockerコンテナの一覧を確認してみます。

「moby/buildkit」というDockerイメージがロードされていて、イメージからDocekrコンテナが起動されていることも分かります。
これが「mybuilder」のビルダーインスタンスの実体で、このコンテナを使ってビルドが行われます。

「buildx」コマンドを使ってDockerイメージのビルドを実行します。

適当なフォルダーを作ってそこにDockerファイルを作ります。

Ubuntu 18.04 で Firefox を使うイメージです。WindowsでEmEditorというエディターを使っています(なんでもいいです)。

【Dockerfile】


「マルチCPUアーキテクチャ」に対応したイメージのビルド

ビルド実行時に「プラットフォーム」を指定します。

「マルチCPUアーキテクチャー」対応イメージをDocker Hubへ直接出力するようにします。

ご自分のアカウントとパスワードでDocker Hub にログインします。

イメージ名は「my-firefox:latest」だとします。

注意が必要なのはpushでHubにビルドする場合、「-t」オプションでは、Docker_Hub_ID/イメージ名になります。

アカウントIDがxxxxの場合、以下のコマンドを実行します。

amd64とarm64の2つのアーキテクチャに対応したイメージ

そこそこお時間かかります。

終了後、確認。

Docker Hub上に出力された (プッシュされた) Dockerイメージを確認。
自分のDocker Hubアカウントのページに行く。
「Tags」タブを選択すると、Dockerイメージが対応するOS/アーキテクチャの一覧が表示されます。
ちゃんと「linux/amd64」「linux/arm64」の2つが登録されています。

コマンドで確認する方法もあります。


Docker Hubのイメージをpull して arm64アーキテクチャーのJetson Nano で使ってみます。

OSはJetpack(ver 4.4)です。

 

Jetpack(ver 4.4)にはNVIDIA Docker がプレセットされています。

ご参考までに、Jetson NanoでDockerを試してみる

 

Docker HubからDockerイメージをプルします。

以下のxxxxはご自分のアカウントIDで置き換えてください。

プルしたDockerイメージを確認します。

Dockerイメージの内容を確認しましょう。

arm64アーキテクチャに対応しています。

以下のコマンドを実行してFirefoxを立ち上げます。

イメージIDのyyyyはご自分ので書き換え。

sudo xhost +si:localuser:root

sudo docker run --runtime nvidia --network host -it -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix yyyy

 

 

Moduleのロードに失敗していますが、気にしない。

 


後始末

WindowsでDocker Hub にログインしていたら、

ビルダーインスタンスを戻しておく

 


 

 

Be the first to comment

Leave a Reply

Your email address will not be published.


*