MacBook Air (M1, 2020) macOS Monterey 12.0.1にDockerインストール

IT/インターネット
スポンサーリンク

このサイト、以下の、Slackの不在時の自動応答のボットのエントリーが継続的にアクセスありまして…

Slackで不在時に自動応答させるボット – Toto Note

おそらく、ペパボのボットを調べてこのサイトに辿り着くんじゃないかと思って、念の為、「Slack 不在通知」とかで検索してみたら、なんと3つ目にこのエントリーが上がってくるじゃないですかwwww

  1. Slackの公式ドキュメント
  2. ペパボの同ボットの作者のページ
  3. Slackで不在時に自動応答させるボット – Toto Note

こりゃぁー、ちゃんとボットの設置方法を掲載しないといけないかな?ってなって、そのためにはDockerのおさらいと、k8sの勉強が必要なので、それをしようとしているところからの、まずは、手元のMacBookにDocker入れないと、ということで本エントリー

以前のマシンにもDockerは入れていたし、すでに、M1マシンにも購入時の環境構築でM1対応のプレビュー版を入れていたんだけど、今は、正式にM1(Apple Silicon/chip)対応版が出ているようなので、改めて、M1環境下のDockerについて情報収集して、環境を作ろう!という感じ

Dockerのインストール前に情報収集

.dmgでインストールすれば終わりなんだろうけど… その前に、巷の「DockerをM1に入れました!」エントリーをいくつか見ておいて、もしかしたらのハマりどころなどを把握しておく

ついにM1 MacでDockerを使うことに成功しました!!うおー!

M1 Macに対応したDocker[Apple Silicon]がリリースされたので早速動作確認した

とりあえず、Docker自体はインストールできるよとw

以下、Dockerだけじゃなく、M1上で開発環境を整備する際のエトセトラなので情報量多いけど参考に

Dockerに関しても、M1 Macはややイレギュラーな対応が必要となります。具体的には以下となります。

・Rosetta2 (Intel CPU用に開発されたアプリを動かすためのツール)のインストールが必要
・一部のDocker Imageが正常に動作しない

(中略)

また、VSCodeのRemote Containersアドオンがインストールされていれば、リモート接続タブから以下のように作成したコンテナにアクセスすることができます

(中略)

下記記事のように一部のImage(mysql等)では、M1 Macに非対応であることに由来したエラーが発生します。

M1 MacによるDocker開発環境構築エラー – Qiita

上記記事に記載されているように、docker-composeにplatform: 'linux/amd64'という定義を追加すれば(あるいはrunやup時に--platform linux/amd64というオプションを追加)、エラーを回避することができます(公式にも記載あり

【M1 Pro/Max対応】M1 Mac環境構築ベストプラクティス – Qiita

VS CodeからDocker操作できるのは便利そう!

VS CodeでDocker操作!

本題からズレるけど… どうやら上記にサラッと書かれている以上に中身は複雑?Dockerを丸っとVS Codeで使える感じに拡張できるっぽいなぁ

Remote Containerで生まれるメリット

* 簡単に作って壊せる
* ローカル環境が汚れない
* Shellがコンテナ内のものになるので、OS毎のコマンド操作の差異が消える
* 設定や拡張機能をプロジェクト毎に設定できる
* コンテナの立ち上げや停止も全部管理してくれる

色々書いていますがDocker環境の恩恵をそのまま受けられるのが一番大きいです。

VSCode の Remote Containerを推したい!!

ローカル環境が汚れないってのは、スゴく良い気がする

以下のようなことができるVScodeの拡張機能です。

* VScodeからDockerを制御できる
* Dockerの1つのコンテナ内に「VScodeサーバー」なるソフトをインストールして、そのサーバーにローカルのVScodeから接続して、あたかもローカルのVScodeを操作しているような感覚で、Docker内のVScodeを操作できる

【図解】VScodeのRemote Container拡張機能とは?わかりやすく

上記ページには図解も載っているので、それも見ておくとよい

クラメソで、この拡張に関する記事か?と思ったら、どうやら違った… 似たような拡張があるってことかなぁ

私は普段のローカル開発環境として、Dockerを利用した開発を行っており、このコンテナ環境はsshを利用してVS Codeで接続および開発できるようにしています。

一方で、VS Codeを利用しているので「せっかくVS Codeを利用しているのであれば、Remote Development(のコンテナ機能)を利用して開発したい!」という想いから設定をしてみたので、その設定方法についてまとめておきたいと思います。

既存のDocker開発環境をVS CodeのRemote Developmentで開発できるようにしてみた | DevelopersIO

有料化

検索しているとチョイチョイ目に留まったのでメモしておく
確かに、ちょっと前に賑わっていた気がする

Docker Desktopはスモールビジネス(250未満の従業員かつ$10,000,000未満の年間収益)、個人的利用、教育的利用、非商用利用、及びオープンソースプロジェクトに対しては無料のままです。

(中略)

Docker Desktopを商用利用している大規模な企業は、 2022年1月31日までに有料プランの購読か、代替手段への移行が必要です。

Docker Desktop有料化の影響 – Qiita

個人で使う分にはDocker Desktopで問題なさそうだけど…
スモールビジネス以上の規模の場合は有償化か、代替手段を用意することになるが、代替手段というのが、なかなかなさそう

既に一部ではDocker Desktopの代替手段を求める動きがあり、例えば以下のようなnerdctl, podmanによる代替手段を紹介している記事がいくつか挙がっています。

しかしこれらのアプローチはDocker CLIやDocker REST API(Docker Engine API)の制限が色々とあるため、後述する私のDocker利用用途では多くの問題が発生します。

(中略)

このため本記事ではDocker CLIとDocker REST API (Docker Engine API)を利用できるアプローチであるlima + Dockerによる実用的な代替手段について紹介します。

Docker Desktop for Macの実用的な代替手段: lima + Docker – Qiita

最新情報っぽい何か

このエントリーしばらく下書きで寝かしていたら、なんかよくまとまっている情報がZennで公開されていた

4ヶ月ほど M1 Mac で実務をやってきて、ちょっと Docker 周りのノウハウが溜まったので整理しました

これから M1 Mac を買う人買った人や迷っている人の助けになれば嬉しいです

この本は問題切り分けや対応方針の考え方をケース集としてまとめたもので、直接エラーを解決するコマンド集ではありません

M1 Mac で Docker を動かすための知識とノウハウ

とりあえず、一通り流し読みした… 基礎知識の部分は結構勉強になった
で、「ぶっちゃけ」ってところで…

Intel の Mac を持っている人はしばらくは手放さないのが一番の「対応」です

アプローチのパターン|M1 Mac で Docker を動かすための知識とノウハウ

結局、大変な思いするだけだよって話なんだけど、M1以外にマシンありませんからぁ〜

Pythonな開発環境をDockerで整備

実際に使いそうな環境整理の情報も拾っておく

Visual Studio Codeでは、Dockerコンテナ中のPythonインタープリターにアクセスする機能をデフォルトで使うことができます。

【M1 Mac】VScode+DockerでPython環境を構築する方法(データ解析・機械学習用コンテナ) | In-Silico NoteBook

VS Code使うってところがいいよねぇ、ただ、Pythonの環境がjupyter notebookのイメージ前提なのがちょっと合わないなぁ…

他にも似たようなエントリーあったけど、そちらもjupyter notebook… orz

今度勉強しようと思っている「FastAPI入門」の中でDockerで環境構築の情報が出ていた

以下のコマンドでDocker imageを作成します。

Dockerイメージの作成|FastAPI入門

自分でイメージ作るだけなら別にそんなトラブル発生しないんじゃない?って気がしてきたけど、どうだろうか?

公式を読もう

最後にw、公式も見ておく

Beginning with Docker Desktop 4.3.0, we have removed the hard requirement to install Rosetta 2. There are a few optional command line tools that still require Rosetta 2 when using Darwin/AMD64. See the Known issues section below. However, to get the best experience, we recommend that you install Rosetta 2. To install Rosetta 2 manually from the command line, run the following command:

Docker Desktop for Apple silicon | Docker Documentation

いくつかの追加的なコマンドを実行したい場合は、Intel系の処理?を補完するツールのRosetta2をインストールする必要があるよ?ってことかな

とりあえず、Rosseta2は入れないで進めていく

実際にDockerをインストールしてみる

DockerのチュートリアルページからMacのインストールパッケージを落としてくる

ダウンロード完了するとパッケージが展開されてアプリケーションのディレクトリに入れるか?とFinderが開くのでドラッグしてインストール実行

ブラウザ(今回利用したのがBrave)から落としてきたけどいいの?って聞かれるの、無論OK

インストール、というかアプリのディレクトリへのコピーが完了して、Docker.appをダブルクリックしたら、こんなメッセージが出て???ってなった

CPUが合わないって???

一瞬、思考が追いつかなかったけど、なんのことはない、落としてくるインストールパッケージを間違っていただけ、M1のパッケージクリックしたつもりが旧CPUのIntel版を落としてたw

再度、落とし直して、インストールして改めてDocker.appをダブルクリックすると、ネットワーク関連のコンポーネントをインストールするから特権アクセスが必要だよ?ってメッセージが出てきた

OKして、パスワード入力してインストール

サービス規約変わったよ?の注釈ありで同意求められるので「I accept the terms」してAccept!

Docker起動してきて、ちょっと待ち

今度は、2分のチュートリアルのお誘いが出てきたのでStartした

GitHubレポジトリから落としてきて、イメージをビルドしてコンテナーを実行せよ!と

実行するコマンドはコピペできなくて、マウスオーバーするとクリックできそうで、そのままターミナルで実行できそうだったけど、こういうのは写経(手書き)するのが良いので手書きしてみた

んが、なんかおかしい… 引数多すぎってエラってる…

一度、閉じて(閉じる必要はないけど、ターミナルをキレイにする意図で)、再度チュートリアルと開いてからの

掲載されているコマンドをマウス操作でクリックしてみたら…

なんのことはない、実行コマンドが2行だったw (バックスラッシュで複数行またぎを表記していたけど、2行のコマンドだってわかりづらいよなぁー)

docker run -name repo alpine/git clone https://github.com/docker/getting-started.git 

docker cp repo:/git/getting-started/ .

docker runで落としてくる部分は、一度実行しているのでコンフリクト起こしている、のはわかるが… その後、2つ目のコマンドの docker cpError: No such container:path: repo:/git/getting-started とエラーになっている理由がよくわからんなぁ…

Docker Desktopのダッシュボードで、コンテナ、イメージ、ボリュームにそれぞれ repo がいるから削除してみよう

全削除して、再度チュートリアル実行したら上手くいった
ただ、 docker cp のコマンドの意味がよくわからない… cp だから複製(コピー)の意味?

うーん… でもぉ、ユーザーディレクトリ直下に getting-started なんていうディレクトリが新設されちゃって、なんか汚れとる…

新しくディレクトリを掘って、そこで再度実行して、Next Stepでビルドを実行

ビルドが終わると docker scan すると Synk tests ができるとあるので実行してみるが…
上手くいかない… とりあえず、docker scan はスキップしておく

Next Stepのコマンドを実行

コマンドの内容からlocalhostの80ポートで何かが立ち上がっているのだろう?と思って、ブラウザで localhost と入力してアクセスしてみると以下の「Getting Started」のコンテンツが表示された

最後の「4 Share」のステップは、Docker Hubにアカウント作成してサインインしていれば、Docker Hub上でイメージを共有できるよ?という内容だった

せっかくなので、サインインして、指定のコマンドを実行

Docker Hubにアクセスすると、パブリックなイメージとして公開されていた

以上で、インストール時のQuick start guideは完了!

インストールした後、どうする?

読み物として以下よさそうだったので

とりあえず、手を動かすためにチュートリアルやるのがいいんじゃね?ってことで…

書籍でがっつりインプットするより、まずは実際に手を動かしてみて分からない所は調べまくる。

M1 Macで始めるDocker公式チュートリアル – 未来は僕以外の手の中

公式と…

本家をGoogle翻訳でも良い気がするけど、日本語訳してくれているサイト

チュートリアルなどは、じっくり時間をとってやってみよう

コメント

タイトルとURLをコピーしました