1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

#9.Dockerコンテナビルド時にWindowsとMacの違いで苦戦した話

Posted at

はじめに

本日、台東区でおこなわれた株式会社ギークフィード様主催のもくもく会に参加してきました。
お菓子やドリンク、さらに個人用に接続用のモニターも準備されており、エンジニアが集中して学べる快適な環境が提供されていました。

今回は、こちらで勉強している際にWindowsとMacの違いで苦戦した点について記事にしました。

Macの操作むずすぎない?

Macはほとんど触っておらず(Spotlightのショートカットも今日知ったレベル)
普段はWindowsデスクトップのWSL2を利用して学習しているのですが、
外出時やイベント参加のために以前Macを購入しており、VScodeやGitの設定を最低限行なって放置しておりました。
しかもWindowsとショートカットキーが全然違うので、中々慣れずたいへんでした。

MySQLのコンテナビルド時にエラーが起きる

本日は、Kubernetesの勉強をしようと考えており、
実際にKubernetesの勉強を始めようと思い、事前にGitに上げていたマニフェストファイルをpullした後にdocker build コマンドを実行したのですが、以下のようにエラーが発生しました。

nayataiyounoMacBook-Air:mysql nayataiyou$ docker build . -t mysql:v1.0.0
[+] Building 1.9s (3/3) FINISHED                                                                                           docker:desktop-linux
 => [internal] load build definition from Dockerfile                                                                                       0.0s
 => => transferring dockerfile: 1.03kB                                                                                                     0.0s
 => ERROR [internal] load metadata for docker.io/library/mysql:8.0.28                                                                      1.8s
 => [auth] library/mysql:pull token for registry-1.docker.io                                                                               0.0s
------
 > [internal] load metadata for docker.io/library/mysql:8.0.28:
------
Dockerfile:1
--------------------
   1 | >>> FROM mysql:8.0.28
   2 |     
   3 |     # 環境変数の設定
--------------------
ERROR: failed to solve: mysql:8.0.28: failed to resolve source metadata for docker.io/library/mysql:8.0.28: no match for platform in manifest: not found

プラットフォームに対応していないといったメッセージが発生したので、イメージファイルの状態を確認してみました。

nayataiyounoMacBook-Air:mysql nayataiyou$ docker manifest inspect mysql:8.0.28
{
   "schemaVersion": 2,
   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
   "manifests": [
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 2828,
         "digest": "sha256:e9fee3e714fd69cd2ccfa0c6a141fac0a60f2a02f72d43c0e7055601aaf481b0",
         "platform": {
            "architecture": "amd64",
            "os": "linux"
         }
      }
   ]
}

Dockerのビルド時にアーキテクチャを明示しない場合、デフォルトでは使用しているマシンのCPUアーキテクチャに依存します。
なので自環境のアーキテクチャを確認してみました。

アーキテクチャの確認

nayataiyou@nayataiyounoMacBook-Air ~ % uname -m
arm64

arm64と出てきましたね。
ということでアーキテクチャが違っただけみたいですね。

なので使用するアーキテクチャを明示的に指定してビルドしてみます。

nayataiyounoMacBook-Air:mysql nayataiyou$ docker build . --platform linux/amd64 -t mysql:v1.0.0
[+] Building 2.8s (13/13) FINISHED                                                                                         docker:desktop-linux
 => [internal] load build definition from Dockerfile                                                                                       0.0s
 => => transferring dockerfile: 1.03kB                                                                                                     0.0s
 => [internal] load metadata for docker.io/library/mysql:8.0.28                                                                            2.7s
 => [auth] library/mysql:pull token for registry-1.docker.io                                                                               0.0s
 => [internal] load .dockerignore                                                                                                          0.0s
 => => transferring context: 2B                                                                                                            0.0s
 => [1/7] FROM docker.io/library/mysql:8.0.28@sha256:fc77d54cacef90ad3d75964837fad0f2a9a368b69e7d799665a3f4e90e600c2d                      0.0s
 => => resolve docker.io/library/mysql:8.0.28@sha256:fc77d54cacef90ad3d75964837fad0f2a9a368b69e7d799665a3f4e90e600c2d                      0.0s
 => [internal] load build context                                                                                                          0.0s
 => => transferring context: 65B                                                                                                           0.0s
 => CACHED [2/7] RUN rm -f /etc/apt/sources.list.d/mysql.list     && apt-get update     && apt-get install -y --no-install-recommends      0.0s
 => CACHED [3/7] RUN echo "ja_JP.UTF-8 UTF-8" > /etc/locale.gen     && locale-gen ja_JP.UTF-8                                              0.0s
 => CACHED [4/7] RUN touch /var/log/mysqld.log     && chown mysql:adm /var/log/mysqld.log                                                  0.0s
 => CACHED [5/7] RUN mkdir /var/mysql     && chown mysql:adm /var/mysql     && rm -rf /etc/mysql/conf.d                                    0.0s
 => CACHED [6/7] COPY ./my.cnf /etc/mysql/                                                                                                 0.0s
 => CACHED [7/7] RUN chmod 644 /etc/mysql/my.cnf                                                                                           0.0s
 => exporting to image                                                                                                                     0.0s
 => => exporting layers                                                                                                                    0.0s
 => => exporting manifest sha256:24bfc8f6b67d686af6bd38a28590f23503024532835f5b21cafea44fc82ca815                                          0.0s
 => => exporting config sha256:cceef464a75dd3403d8911953d7d64b4c14bf2470838e7f9e4c0649eee64c09d                                            0.0s
 => => exporting attestation manifest sha256:4191413e51a26ea048c3d8e133f6ce78e92471b67eff0b2177ed8111314ecbfd                              0.0s
 => => exporting manifest list sha256:c6c2418cc2172314204aa68709516a1cd3694b4ace6426784f8654699b74421d                                     0.0s
 => => naming to docker.io/library/mysql:v1.0.0                                                                                            0.0s

どうやらいけたっぽい

nayataiyounoMacBook-Air:mysql nayataiyou$ docker images

[省略】
mysql                                     v1.0.0                                                                        c6c2418cc217   59 minutes ago   184MB

まとめ

こうした些細なことでも、知っているかどうかで解決までの時間が大きく変わると思います。今回の経験は良い学びになりましたし、初めて遭遇するトラブルでも、似たような事象が発生した際に「前にもこんなことがあったなぁ〜」と思い出して対応できることが増えると思います。やはり、小さな知識や経験の積み重ねは大切だと改めて実感しましたね!

もくもく会を開催いただいた株式会社ギークフィード様ありがとうございました!
とても快適な環境で勉強させていただきました。
年明けも開催するとのことなので、気になる方はぜひ参加してみましょう!

■参考リンク

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?