コンテナ技術について、勉強中。
いくつも記事を読んだのですが、下記のサイトが、初心者には非常に分かりやすいと思います。
1.
下記のアーキティクチャーの通りですが、下記の絵は、多少の誤解を招くと思います。
と言うのも、この絵で言う所の"Docker Engine"が、ホストマシンの差異(CPUの差異)とかを吸収している様に見えますが、実は、Docker Engineは、「CPUの差異を吸収しないこと」が判明しました。
2.
よく読むと、上記サイトには、下記記載があります。
ホストマシーンのカーネルを利用しております。
VirtualBoxなどの仮想マシンでは、ホストマシン上でハイパーバイザを利用しゲストOSを動かし、その上でミドルウェアなどを動かします。それに対し、コンテナはホストマシンのカーネルを利用し、プロセスやユーザなどを隔離することで、あたかも別のマシンが動いているかのように動かすことができます。そのため、軽量で高速に起動、停止などが可能です。
まあ、こういう訳なので、移植性と言うことに注目すれば、ハイバーバイザー上で動く仮想インスタンスに劣るのでしょうが、「ちょっとテストしよう。」と言う場合は、コンテナは秀逸ですね。
3.
「ホストマシーンのカーネルに依存する」と言う前提に立てば、Docker Hubのサイトで、インテルCPU向けかARM向けのDockerイメージか? が分類されているのも納得できます。
尚、私は、「差異を吸収する」と思い込んでいました。
従って、自分のMac M1 PCに、インテル用のDockerイメージを入れても、うまく立ち上がらないので、丸2日間悩んでおりました。(Runしても、すぐ落ちる。)
4.
さて、ここからが本題です。
では、Mac M1 PCにDocker Desktopをインストールして(Mac with Apple Chipをインストールする必要がある。)、Dockerイメージを使いまくろうと思って、Docker Hubのサイトを物色したが、殆どがインテルCPU用のイメージです。
となると、「Mac M1でDockerイメージが使えないじゃん?」と、絶望的な気持ちになり、「Windows PCを選択すれば良かった。」と死ぬほど後悔しました。
5.
ところが、色々と調べまくったら、ソリューションがありました。
Rosetta 2 を使えば、Apple シリコンを搭載した Mac でも、Intel プロセッサ搭載 Mac 用に開発された App を使えるようになります。
基本的に、Mac PCをそこそこ使っている人は、知らない内にRosetta2をインストールしている筈ですが、念の為、ターミナルで下記コマンドを走らせた方が良いです。
$ softwareupdate --install-rosetta
6.
Roseeta2がインストールされていれば、インテルCPU向けのDockerイメージも、Mac M1で動くことが確認できました。
例えば、インテルCPU専用のPython実行環境のDockerイメージは下記にあります。
https://hub.docker.com/r/circleci/python
下記のコマンドでインストールできます。
amd64のPlatformが指定されておりますが、Rosetta2のお陰様で、きちんとMac M1のDocker Desktopでも動きます。
docker run -it --rm --platform linux/amd64 --entrypoint=/bin/bash circleci/python