Mac(M1)でLimaを使ってx86_64のDockerイメージを動かす(2022年1月版)
目次
はじめに
Docker Desktopにおいて、M1 Mac上でx86_64イメージをpullしても、動作しない場合があります。そこで、以下の手順で、Docker Desktopの代わりにLima-VM上にDockerをインストールして動作するようにします。
流れ
- Docker Desktop for Macをアンインストールする。
- HomebrewでLimaとDocker CLIをインストールする。
- Limaを設定し起動する。(執筆時点では、v0.8.1)
- docker compose v2を導入する。
概要図
引用:https://docs.docker.com/get-started/overview/#docker-architecture
手順
基本的には、Host側(macOS)にて作業します。
Docker Desktopをアンインストールする。
Docker Desktop の Mac へのインストール | Docker ドキュメント
- Docker メニューから Troubleshoot (トラブルシュート)を選択し、 Uninstall (アンインストール)を選択します。
- 確認画面で、Uninstall をクリックします。
さらに、Finderよりアプリケーション>Docker.appをゴミ箱に入れる。
HomebrewでLimaとDocker CLIをインストールする。
> brew install lima docker
確認結果。Docker ClientはARM版であることが確認できる。
> limactl -v limactl version 0.8.1 > docker version Client: Docker Engine - Community Version: 20.10.12 API version: 1.41 Go version: go1.17.5 Git commit: e91ed5707e Built: Sun Dec 12 06:28:24 2021 OS/Arch: darwin/arm64 Context: default Experimental: true Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
Limaを設定し起動する。
LimaのDocker初期セットアップする設定ファイルをGitHubより取得し、Intel版(x86_64)として動作するように記述を加える。
> curl https://raw.githubusercontent.com/lima-vm/lima/master/examples/docker.yaml -o ~/docker.yaml > echo 'arch: "x86_64"' >> ~/docker.yaml
docker.yamlファイルを元にVMを起動する。
設定を変更する必要がなければ、"Proceed with the default configuration"を選択する。
> limactl start ~/docker.yaml ? Creating an instance "docker" [Use arrows to move, type to filter] > Proceed with the default configuration Open an editor to override the configuration Exit
選択後、初期セットアップが開始する。(初回は完了まで十分程度かかる)
? Creating an instance "docker" Proceed with the default configuration INFO[0029] Attempting to download the image from "https://cloud-images.ubuntu.com/impish/current/impish-server-cloudimg-amd64.img" digest= : : INFO[0352] READY. Run `limactl shell docker` to open the shell. INFO[0352] To run `docker` on the host (assumes docker-cli is installed), run the following commands: INFO[0352] ------ INFO[0352] docker context create lima --docker "host=unix:///Users/yusuke.ono/.lima/docker/sock/docker.sock" INFO[0352] docker context use lima INFO[0352] docker run hello-world INFO[0352] ------
続いて、docker context create lima〜
、docker context use lima
を実行する。
(本手順では、環境変数DOCKER_HOSTを使用しない。)
> docker context create lima --docker "host=unix://${HOME}/.lima/docker/sock/docker.sock" lima Successfully created context "lima" > docker context use lima lima Current context is now "lima"
確認結果。Hello from Docker!
と出力される。
> docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 2db29710123e: Pull complete Digest: sha256:507ecde44b8eb741278274653120c2bf793b174c06ff4eaa672b713b3263477b Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. : > docker context ls NAME DESCRIPTION DOCKER ENDPOINT KUBERNETES ENDPOINT ORCHESTRATOR default Current DOCKER_HOST based configuration unix:///var/run/docker.sock swarm lima * unix:///Users/yusuke.ono/.lima/docker/sock/docker.sock
Lima-VM(NAME:docker)が x86_64 として起動したことを確認する。(STATUS is Running.)
> limactl list NAME STATUS SSH ARCH CPUS MEMORY DISK DIR docker Running 127.0.0.1:62986 x86_64 4 4GiB 100GiB /Users/yusuke.ono/.lima/docker
Lima-VM上ではDocker ClientとDocker ServerがAMD64で動作していることが確認できる。
> limactl shell docker docker version Client: Docker Engine - Community Version: 20.10.12 API version: 1.41 Go version: go1.16.12 Git commit: e91ed57 Built: Mon Dec 13 11:45:33 2021 OS/Arch: linux/amd64 Context: rootless Experimental: true Server: Docker Engine - Community Engine: Version: 20.10.12 API version: 1.41 (minimum version 1.12) Go version: go1.16.12 Git commit: 459d0df Built: Mon Dec 13 11:43:41 2021 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.4.12 GitCommit: 7b11cfaabd73bb80907dd23182b9347b4245eb5d runc: Version: 1.0.2 GitCommit: v1.0.2-0-g52b36a2 docker-init: Version: 0.19.0 GitCommit: de40ad0
docker compose v2を導入する。
GitHub - docker/compose: Define and run multi-container applications with Docker
GitHubより releases ページからバイナリを手動でダウンロードし、所定のディレクトリに配置する。
なお、下記の例のバージョン番号(v2.2.3)は、適宜変更する。
> mkdir -p ~/.docker/cli-plugins/ > curl -L https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-darwin-x86_64 -o ~/.docker/cli-plugins/docker-compose > chmod +x ~/.docker/cli-plugins/docker-compose
確認結果
> docker compose version Docker Compose version v2.2.3
もし、v1を使用したいならば、brew install docker-compose
でインストールする。
トラブルシューティング
Host側(macOS)のdocker composeコマンドでエラーになる。
エラー内容
error getting credentials - err: exec: "docker-credential-desktop": executable file not found in $PATH, out: ``
上記のエラーが出た場合は、Host側(macOS)の ~/.docker/config.json
にDocker Desktopでの設定が残っているので、下記コマンドでcredsStoreフィールドを削除する。なお、viエディタなどで当該行を削除しても構わない。
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
> cp -p ~/.docker/config.json ~/.docker/config.json.bak > cat ~/.docker/config.json.bak | jq 'del(.credsStore)' > ~/.docker/config.json
確認結果
> diff ~/.docker/config.json.bak ~/.docker/config.json 3d2 < "credsStore": "desktop",
Lima-VM上でファイルを作成できない。
デフォルトでLima-VMにマウントされたHost側(macOS)のHOMEディレクトリは、Read-onlyになっている。
touch: cannot touch 'aaa.txt': Read-only file system
~/.lima/docker/lima.yaml
に mountsキーにおいて、所定のディレクトリにwritable: true
を付与し、以下のコマンドでlima-vmを立ち上げ直して、変更した設定を反映させる。なお、同yamlファイルを修正した際には、lima-vmの停止・起動が必要となる。
> limactl stop docker > limactl start docker
最後に
limactl で VM をバックグラウンドで起動させておく必要はありますが、特にLima-VMにログインすることもなく、Host側のmacOSからdockerを利用できるので便利です。
参考
MacBook Pro (14インチMacBook Pro - スペースグレイ) を買いました
Macbook Pro 14インチを購入しました。
これまで、13インチのIntelモデルを使っていたのですが、M1モデルの方がスペックも高く省電力性も高いとのことで、乗り換えを決断しました。
- CPU M1 Max
- Memory 64GB
- SSD 4TB
合計は、¥ 541,800(税込)です。(高い・・・
M1 MacにおいてもParallelsを使ってWindowsを併用しています。当初は、日本語環境にしようとすると設定アプリが起動しなくなるなどの挙動が見られたのですが、この時点の最新版Parallels(v17.1.1)ではWindows11のインストールがシンプルになり、初期状態で日本語環境でセットアップされて、安定的に使うことができるようになりました。
クリックだけでApple M1チップのMacにWindows 11をインストール出来るようになった「Parallels Desktop v17.1.1 for Mac」がリリース。
とはいえ、Windowsを使うのは、Excelマクロが使われているOfficeのファイルを扱う場合や、画像やOfficeファイルの差分を取得確認ためにWinMergeを使う場合、あとはギガバイト単位のテキストファイルを扱う場合など、サブでの利用のみでメインはmacOSです。
前評判の通り、負荷の高い作業(とはいえ、動画編集は行わないのですが)を行なってもファンが回ることは、ほとんどありません。以前の13インチモデルでは、Web会議において画面共有しながらカメラをONにしただけでも、ファンが結構うるさかったのですが、M1 Maxではほんのりキーボードの中心があったかいくらいで、やはりファンはほとんど回っていないようです。
あと、キーボードのキーとキーの間が艶消し黒になったことで、キートップと同じ色のため汚れが目立ちにくいようで、気がつくとびっくりするほど汚れていることがありました。
今のところARMアーキテクチャになって、以前使っていたアプリが動かなくなったことは無いので、このままメインで使い続けていこうと思います。
JAWS DAYS 2021 に参加してきました (スライドまとめ)
JAWS DAYS 2021 に参加してきました
昨年のJAWS DAYS 2020からオンライン開催となった今年のJAWS DAYS 2021(3月20日開催)は、参加申し込み数は約4,000人!AWS関連のユーザーイベントとしては、日本最大かと思います。
見逃した方や同じ時間帯で別のセッションを試聴されていた方は、もしかしてアーカイブが配信されるかもしれません。
1回の試聴では咀嚼できなかった私は、アーカイブ配信までスライドで復習するとします :)
▼ 2021/4/15 追記
アーカイブ配信されましたね!上記のYouTubeチャンネル JAWS DAYS 2021 より視聴可能です!
スライドまとめ
[Track_B][10:00-10:40]ハニートークン型ハニーポットによる攻撃者の行動分析と脆弱性の発見と報告まで ~AdministratorAccessポリシー付きアクセスキーを手にした攻撃者がとる行動とは~
ハニートークン型ハニーポットによる攻撃者の行動分析と脆弱性の発見と報告まで / AWS HoneyToken HoneyPot - Speaker Deck
[Track_C][10:00-10:40]AWS Control Towerを利用したマルチアカウント管理とセキュリティ統制
AWS Control Towerを利用したマルチアカウント管理とセキュリティ統制 - Speaker Deck
[Track_D][10:00-10:40]AWS Security Hub を活用してマルチアカウントのセキュリティを強化した話
[Track_B][10:40-11:00]組織でAWSを使い始めるときに考えたいアカウントと請求の管理
組織におけるAWSのアカウント管理とコスト管理 - Speaker Deck
[Track_B][10:40-11:00]組織でAWSを使い始めるときに考えたいアカウントと請求の管理
HashiCorp Vaultを使った セキュアなDBアクセスの実現/Secure DB access with HashiCorp Vault - Speaker Deck
[Track_B][11:00-11:20]AWSからのメール読んでますか?
AWSからのメール読んでいますか? - Speaker Deck
[Track_C][11:00-11:20]AWS Wavelength 低遅延性能の実力に迫る!
AWS Wavelength 低遅延性能の実力に迫る! - Speaker Deck
[Track_D][11:00-11:20]医療データレイクで分析基盤の構築
医療データレイクで分析基盤の構築 / JAWS DAYS 2021 JMDC DATALAKE - Speaker Deck
[Track_B][13:00-13:40]AWS Lambdaのテストで役立つ各種ツール
[Track_D][13:40-14:00]サポーターセッション:Amazon ConnectとServerless〜事例やハマったポイントも公開〜
[JAWS DAYS 2021] Amazon Connect and Serverless - Speaker Deck
[Track_A][14:00-14:20]AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(シスコ認定インストラクター監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
[Track_C][14:20-15:00]AmplifyとLINEで作るJAWSDAYS投票システムの話/[AWS×LINE]高校の卒業記念に8,700枚の写真でモザイクアートに挑戦した話
JAWSDAYS2020_LINEDC - Speaker Deck
[Track_B][14:40-15:00]10年続いている電子書店をリニューアルする話
10年続いている電子書店をリニューアルした話 JAWS Days 2021 MediaDo/mediado-jaws-days-2021 - Speaker Deck
[Track_C][15:00-15:40]StepFunctions Expressで作るフルマネージドなサーバーレスバッチ
Step Functions Expressで作るフルマネージドなサーバーレスバッチ - Speaker Deck
[Track_D][15:00-15:20]スタートアップ企業での散乱したシステムリリースフローをととのえる話
スタートアップ企業での散乱した システムリリースフローをととのえる話/Maintain the system release flow - Speaker Deck
[Track_B][15:40-16:00]一年間運用して分かったCDKアンチパターン
JAWS DAYS2021 1年間運用して分かったCDKアンチパターン - Speaker Deck
[Track_B][16:00-16:20]Cognito+API Gateway+Lambda+S3ではじめるサーバーレスアプリ構築 ~SIer企業がはじめて挑戦してみた話~
[Track_C][15:40-16:20]AWS運用を頑張らないために何が出来るのか
AWS運用を頑張らないために何が出来るのか - Speaker Deck
[Track_C][15:40-16:20]AWS運用を頑張らないために何が出来るのか
セキュリティの基本とAWSでのセキュリティ対策をフルコースで味あう
[Track_C][16:20-17:00]CI/CDプロセスにCloudFormationを本気導入するために考えるべきこと
CI/CDプロセスにCloudFormationを本気導入するために考えるべきこと - Speaker Deck
[Track_D][16:20-17:00]AWS Codeシリーズで実現するEKSのCI/CDパイプライン
JAWSDAYS_AWS Codeシリーズで実現するEKSのCI/CDパイプライン - Google スライド
[Track_B][17:00-17:20]RDSのトラブル発生に備えて!やっておくべき設定・監視
RDS のトラブル発生に備えて!やっておくべき設定・監視 #jawsdays2021 #jawsdays2021_B - Speaker Deck
[Track_D][17:00-17:20]自宅付近の気温と湿度を可視化する時に気づいたAmazon Timestream導入時の注意点
自宅付近の気温と湿度を可視化する時に気づいたAmazon Timestream導入時の注意点 / Important point of Timestream - Speaker Deck
[Track_B][17:20-18:00]Amazon Connect愛について語り尽くす
Jawsdays2021 Amazon Connect愛について語り尽くす
[Track_C][17:20-18:00]数100台規模のnodeを使うEKSのAI推論環境構築
Mobility Technologiesにおける数100台規模のnodeを使うEKSのAI推論環境 - Speaker Deck
[Track_D][17:20-18:00]KDDI CCoE Bootstrapping ~AWS公式採用から5年後の”いま”と”これから”~
KDDI CCoE Bootstrapping 〜AWS公式採用から5年後の"いま"と"これから"〜 - Speaker Deck
ハンズオン
セキュリティグループって何? 使い方を基礎から学ぼう! - Speaker Deck
[JAWS DAYS 2021] ハンズオン 〜AWSとLINEをつないでAIボットを作ろう!初心者編〜 Presented by JAWS-UG 初心者支部
JAWS DAYS 2021 Hands-on Well-ArchitectedなIAMポリシーに挑戦する 〜最小権限の原則を実装ってどゆ…
情報処理安全確保支援士の集合研修に参加しました。(2020年2月末あたり)
情報処理安全確保支援士の集合研修とは?
情報処理安全確保支援士の更新には、登録日から3年間において、集合研修の修了が必要条件となっています。(他にも、「オンライン講習A」「オンライン講習B」「オンライン講習C」の修了が必要です)
続きを読むソフトウェア・ファーストを読んで
どうも、y-onoです。昨今は、新型コロナウイルスのニュースばかりですね。
さて、2019年末にKindle版の本書を購入しまして、Evernoteをスクラップブック代わりに、気になった箇所を写経したり図表を貼り付けたりしてました。

ソフトウェア・ファースト あらゆるビジネスを一変させる最強戦略
- 作者:及川 卓也
- 発売日: 2019/10/10
- メディア: 単行本
私もSIer側に身を置くエンジニアとして、この本を読んで非常に危機感を感じざるを得ませんでした。システムは作って終わり、あとは維持・管理していく保守を続けるSIerビジネススキームに安穏としている間に、世の中は目まぐるしく変わってしまいました。
SIerがDXで変革を起こすには、組織も事業も大きく変わることも求められていますが、丸投げに慣れてしまった体質は現状から変わることについて強いハレーションを伴います。もはや、SIerにはDX自体が相容れないものように感じました。
と悲壮感ばかり漂うのですが(笑)、個人的には今後のキャリアパスを考えるにあたっても、SIerだからこそ読んで欲しいオススメの一冊です。