LoginSignup
4
6

More than 1 year has passed since last update.

うるせえさっさと docker buildx させろ - ubuntuならこれ一撃で動くよ!

Last updated at Posted at 2021-10-13

「最新のMacからラズパイ4、それに従来のamd64まで
 マルチに対応したコンテナが作れる docker buildx

なにそれすごい!

無慈悲.sh
❯ docker buildx
docker: 'buildx' is not a docker command.
See 'docker --help'

おおう...

どうも2021/10時点で、「Windows/Mac版 Docker Desktop」なら設定一箇所変えるだけで使えるようですが、
Linux版はプロプリなバイナリを含む関係で apt 一発では入らないのでした。

てわけで tl&dr; なアナタに、一撃設定スクリプトを書いてみました。
Dockerデーモンの再起動までやっちゃいます。
/etc/docker/daemon.json を弄るので、もし何か設定をされている場合は上書きされてしまうのでご注意下さい!!

setup_docker_buildx.sh
#!/usr/bin/env bash
# 必要なパッケージ
sudo apt-get install -y qemu qemu-user-static binfmt-support debootstrap

# linuxではbuildxランタイムの手動インストールが必要
# 参考: https://docs.docker.com/buildx/working-with-buildx/
mkdir -p ~/.docker/cli-plugins/
cd ~/.docker/cli-plugins/ || exit
wget https://github.com/docker/buildx/releases/download/v0.6.3/buildx-v0.6.3.linux-amd64
mv buildx-v0.6.3.linux-amd64 docker-buildx
chmod a+x ~/.docker/cli-plugins/docker-buildx

sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.backup$(date '+%Y%m%d_%H%M%S')
echo '{"experimental":true}' | sudo tee /etc/docker/daemon.json
sudo systemctl restart docker

数分で終わります。(複数アーキテクチャが並列ビルドされてちょっと面白いです)
終わったら docker buildx versionが実行出来ることを確認します:

試す.sh
❯ docker buildx version
github.com/docker/buildx v0.6.3-docker 266c0eac611d64fcc0c72d80206aa364e826758d

お、何か動いてる!

上記がOKでしたら、こんな感じで従来の
docker build だった部分をそのまま docker buildx build + オプション指定に置き換えて実行すれば、
だいたい一発で動いちゃうと思います。こりゃすごい

build_and_push.sh
# まずビルダーを作成
docker buildx create --name armBuilder
docker buildx use armBuilder

# multi arch ビルド & プッシュ
docker buildx build . \
    --platform linux/amd64,linux/arm64/v8 \
    --output=type=image,push=true \
    --tag taiyodayo/my_app

エラー無く実行できたら多分成功です!おめでとうございます!
ubuntuやalpineベースのイメージは結構な割合でそのままビルドできちゃう印象です。
こりゃ Apple Silicon が捗ります。

さてここからは確認だけですので忙しい方は読み飛ばしてOKです!
まず docker hub から イメージがマルチアーキになっているか確認します:

Screenshot 2021-10-13 at 23.14.36.png

うへーいしっかりarm64/amd64が選べるようになってます!

コマンドからも確認できます。
docker image inspect taiyodayo/my_app するとJSONでイメージのマニフェストが確認できます

# M1 MacBook Air から docker pull taiyodayo/my_app した場合
        "Architecture": "arm64",
        "Os": "linux",
        "Size": 611768789,
        "VirtualSize": 611768789,

# amd64のUbuntuマシンで docker pull taiyodayo/my_app した場合
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 658537637,
        "VirtualSize": 658537637,

しっかり各アーキテクチャごとにビルドされてますね!
なにげに push も一緒に出来たり buildx、色々試しがいがありそうです。
こりゃ楽しい!

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6