ミディアムにクロス投稿
4月24日(水)、 DockerはArmとのパートナーシップを発表しました 大規模なArmエコシステムへのコンテナの採用を加速するのに役立ちます。本日の DockerCon San Francisco 2019 で、Docker は Docker Desktop 内で改善されたマルチアーキテクチャ ビルドのテクニカル プレビューをリリースします。
Docker Desktopは、コンテナ化されたアプリケーションの開発に関しては事実上の標準です。このテクニカルプレビューは、Docker Desktopですでに使用および開発している何百万人もの開発者に豊富なArmエコシステムを開きます。 これにより、クラウド内のAmazon EC2 A1 Armベースのインスタンスにデプロイするためのコンテナイメージの開発が簡素化されるだけでなく、世界中の1兆台のArmベースのエッジ&IoTデバイスへの道が開かれます。 なぜこれを行うのか、すべてがどのように機能するのか、そしてどのように始めることができるのかを掘り下げてみましょう。
なぜDockerはこれをしているのですか?
2018年11月、Amazonは、AWSが設計した64ビットArm Neoverseコアとカスタムシリコンを搭載したAWS Gravitonプロセッサを搭載したEC2 A1インスタンスを発表しました。 A1 EC2 インスタンスは、スケールアウトワークロード向けにコストとパフォーマンスが最適化されており、他の EC2 インスタンスと比較して最大 45% のコスト削減を実現します。 この Docker Desktop テクニカル プレビューにより、Docker は、Arm サーバーおよびデバイス上でのコンテナーの開発をこれまで以上に簡単にします。 使い慣れた標準の Docker ツールとプロセスを使用して、さまざまなコンピューティング アーキテクチャでシームレスにイメージの構築、プッシュ、プル、実行を開始できます。Arm のビルドを開始するために、Dockerfile やソース コードを変更する必要はありません。 本日リリースされる新機能を使用してイメージを再構築するだけです。最後に、DockerはエッジとIoTに急速に拡大しており、これはそのプロセスの重要なステップであると考えています。Dockerは常に開発者に関するものであり、物事を簡単にします。それが私たちがこれをした理由の核心です。
それはどのように機能しますか?
Docker Desktop は macOS と Windows で利用できます。コンテナの開発を非常に簡単にするユーザー向けの多くのものをバンドルして構成します。Docker Desktop には、ホスト OS 用のハイパーバイザーが付属しています。ハイパーバイザーは、Docker Desktop の一部として含まれている軽量の Linux カーネル (LinuxKit) を実行する役割を担います。この高速で軽量なコンテナOSは、QEMUエミュレータにパッケージ化されており、事前設定されています binfmt_misc サポートされているアーキテクチャのバイナリを実行します。Armはサポートに全力で取り組んでいます Docker の QEMU フォーク そして、このプロジェクトを維持するのに役立ちます。すべてのパッチはアップストリームされますが、Docker Desktopには最新のエミュレーションサポートが含まれます。上の図では、arm/v6、arm/v7、arm64 Docker イメージの QEMU エミュレーションを確認できます。
Docker Desktop Edge リリースには、と呼ばれる新しい CLI コマンドが付属しています。 ビルドX. Buildxを使用すると、ローカルで(そしてすぐにリモートで)マルチアーキテクチャイメージをビルドし、マニフェストファイルと一緒にリンクして、1つのコマンドですべてをレジストリにプッシュできます。付属のエミュレーションを使用すると、ネイティブイメージ以上のものを透過的に構築できます。Buildxは、以下に基づいて新しいビルダーインスタンスを追加することでこれを実現します BuildKit、および Docker デスクトップ テクノロジ スタックを活用して非ネイティブ バイナリを実行します。
では、なぜビルドxなのでしょうか?まず名前から始めましょう。x は実験的を表します。将来、これらの新しいビルド機能が安定して一般公開されたら、x を削除し、これらの機能を既存の docker build コマンドに直接統合します。buildx は実験的なものであるため、機能とフラグは変更される可能性があることに注意してください。
はじめ
Docker デスクトップをまだお持ちでない場合は 、まずダウンロードしてください. インストール手順に従ってインストールします。インストール後、またはすでにDocker Desktopを使用している場合は、タスクトレイにDockerアイコンが表示され、[設定]をクリックして、エッジリリースに切り替えるだけです。
ドロップダウンで [Docker デスクトップについて] を開いて、バージョン 2.0.4.0 (33772)+ を使用していることを確認します。
例!
今では、これらの優れた新機能の使用方法に興味があると確信しています。いくつかの例を簡単に見てみましょう。まず、ビルダーをリストアップします。
~ ❯❯❯ docker buildx ls 名前/ノード ドライバー/エンドポイントの状態プラットフォーム デフォルト * ドッカー Linux/amd64, linux/arm64, linux/arm/v7, linux/arm/v6 を実行しているデフォルトのデフォルト
現在、基本的に古いビルダーであるデフォルトのビルダーを使用しています。いくつかの新しいマルチアーキテクチャ機能にアクセスできる新しいビルダーを作成しましょう。
~ ❯❯❯ docker buildx create --name myBuilder マイビルダー ~ ❯❯❯ docker buildx use myBuilder ~ ❯❯❯ docker buildx inspect --bootstrap [+]建物 2.5秒 (1/1) 完成しました => [内部] ビルドキット 2.5s の起動 => => イメージのモビー/ビルドキットを引っ張る:マスター1.3秒 => => 1.2秒buildx_buildkit_mybuilder0コンテナの作成 名前: マイビルダー ドライバ:ドッカーコンテナ ノード: 名前: マイビルダー0 エンドポイント: unix:///var/run/docker.sock ステータス: 実行中 プラットフォーム: linux/amd64, linux/arm64, linux/arm/v7, linux/arm/v6
ここでは、mybuilderという名前の新しいビルダーインスタンスを作成し、それに切り替えて検査しました。--bootstrap
これは必要ではなく、ビルドコンテナをすぐに起動するだけです。次に、ワークフローをテストし、マルチアーキテクチャイメージを構築、プッシュ、実行できることを確認します。簡単なサンプル Dockerfile を作成し、いくつかのイメージ バリアントをビルドして、Hub にプッシュしてみましょう。
~ ❯❯❯ mkdir test & cd test && cat <<EOF > Dockerfile ウブンツから RUN apt-get update & apt-get install -y curl WORKDIR /src 写し。. EOF
~/test ❯❯❯ docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t adamparco/demo:latest --push . [+]建物 6.9s (19/19) 終了しました ... => =>レイヤー2.7秒を押す => =docker.io/adamparco/demo:latest のマニフェストをプッシュ>2.2
それはうまくいきました!このフラグは --platform
、Intel 64ビット、Arm 32ビット、およびArm 64ビットアーキテクチャ用のLinuxイメージを生成するように指示 buildx
されています。 このフラグは --push
、マルチアーキテクチャ マニフェストを生成し、すべてのイメージを Docker Hub にプッシュします。私たちがしたことに inspect
使用 imagetools
しましょう。
~/test ❯❯❯ docker buildx imagetools inspect adamparco/demo:latest 名前: docker.io/adamparco/demo:latestMediaType: application/vnd.docker.distribution.manifest.list.v2+jsonダイジェスト:sha256:2a2769e4a50db6ac4fa39cf7fb300fa26680aba6ae30f241bb3b6225858eab76 マニフェスト: 名前: docker.io/adamparco/demo:latest@sha256:8f77afbf7c1268aab1ee7f6ce169bb0d96b86f585587d259583a10d5cd56edca MediaType: application/vnd.docker.distribution.manifest.v2+json プラットフォーム: linux/amd64 名前: docker.io/adamparco/demo:latest@sha256:2b77acdfea5dc5baa489ffab2a0b4a387666d1d526490e31845eb64e3e73ed20 MediaType: application/vnd.docker.distribution.manifest.v2+json プラットフォーム: linux/arm64 名前: docker.io/adamparco/demo:latest@sha256:723c22f366ae44e419d12706453a544ae92711ae52f510e226f6467d8228d191 MediaType: application/vnd.docker.distribution.manifest.v2+json プラットフォーム: linux/arm/v7
このイメージは、adamparco/demo:latest というタグを付けて Docker Hub で利用できるようになりました。そのイメージからコンテナを Intel ラップトップ、Amazon EC2 A1 インスタンス、Raspberry Pis などで実行できます。Docker は現在のアーキテクチャに適したイメージをプルするため、Raspberry Pis は 32 ビット Arm バージョンを実行し、EC2 A1 インスタンスは 64 ビット Arm を実行します。
SHA タグは完全修飾イメージ バリアントを識別し、Docker Desktop で別のアーキテクチャをターゲットとするイメージを実行することもできます。SHAタグを使用してそれらのいくつかを実行し、それらが実際に期待するアーキテクチャであることを確認できます。
~/test ❯❯❯ docker run --rm docker.io/adamparco/demo:latest@sha256:2b77acdfea5dc5baa489ffab2a0b4a387666d1d526490e31845eb64e3e73ed20 ウナメ -m aarch64
~/test ❯❯❯ docker run --rm docker.io/adamparco/demo:latest@sha256:723c22f366ae44e419d12706453a544ae92711ae52f510e226f6467d8228d191 ウナメ -m アームV7L
上記では、期待どおりにaarch64とarmv7lが返されたことがわかります uname -m
が、このすべてのビルドと実行は、私のネイティブmacOS開発者マシンで実行されています。これらすべてを可能にするために必要なテクノロジ スタックと構成については上記で説明しましたが、エクスペリエンスが実際にどれほど強力でシームレスであるかを振り返ってみましょう。Docker Desktopとbuildxがなければ、これを行うのははるかに難しく、間違いなくもっと面倒だったでしょう。
最後のもう少し複雑な例、ホストアーキテクチャを表示するPythonフラスコWebアプリケーションを実行します。
~❯❯❯ docker buildx build -t adamparco/helloworld:latest --platform linux/arm64 --push github.com/adamparco/helloworld [+]建物 69.1s (11/11) 完成しました =>キャッシュされた[内部]ロードgitソース github.com/adamparco/helloworld0.0秒 => [内部]docker.io/library/python:3.7-alpine 0.5秒のメタデータをロードする => [ベース1/1] docker.io/library/python:3.7-alpine@sha256:b3957604aaf12d969 から 3.6秒 ... => => プッシュレイヤー 7.3秒 => =>docker.io/adamparco/helloworld:latest のマニフェストをプッシュする0.3秒
ここでは単一のプラットフォームを指定したので、このイメージは64ビットArm専用にビルドされています。今私はそれを実行し、いくつかのポートを公開します。
~❯❯❯ docker run -p5000:5000 adamparco/helloworld:latest ... *フラスコアプリ「こんにちは」の提供(遅延読み込み) * 環境: 生産 *デバッグモード:オフ * http://0.0.0.0:5000/ で実行 (終了するには Ctrl + C キーを押します)
私のブラウザをロードしてそれをポイントすると localhost:5000
、次のようになります。
アマゾン EC2 A1 クレジット
期間限定で、でサインアップしてください beta.docker.com Amazon EC2 A1 インスタンスの 無料 クレジットを受け取り、Arm イメージのテストとデプロイを今すぐ開始できます。
参考
Github リポジトリ
https://github.com/docker/buildx
https://github.com/moby/buildkit
https://github.com/linuxkit/linuxkit
https://github.com/docker/for-mac
https://github.com/docker/for-win
フォーラム
https://forums.docker.com/c/docker-desktop-for-mac/