モード変更


    言語

Docker on Lima

2022/01/12

こんにちは、モンスターラボで BackEnd の TechLead をしています、国平です。

今日は、いよいよ有料化が迫った Docker Desktop についてモンスターラボで検討されている代替案の一つをご紹介します。

Docker Desktop の有料化に伴う対応について、モンスターラボが世界中のグループ、パートナー、そしてお客様と一緒に働いていることもあり、一律 Docker Desktop を有料利用するという判断が行えないプロジェクトもあります。 そのため、モンスターラボではこの問題に対応するワーキンググループが Slack 上で結成され、世界中の拠点から対応に関する知見が集まっています。 今回はその中で挙がったの一つを紹介します。

なお、モンスターラボ内では開発機として macOS が主流なため、ここでは macOS の利用を前提とします。

代替案

前述のワーキンググループで挙がった代替案を列挙します。

  • podman
  • minikube
  • multipass
  • Docker on Lima
  • Colima
  • 脱 macOS (Windows や Linux の利用)

今回はこの内、 Lima を使う方法を詳しく説明します。

Docker on Lima

Docker Desktop に代わる案として、 Lima を用いて macOS 上に Linux 環境を構築し、 macOS 上の docker client から Lima 上の docker daemon にアクセスする方法があります。

https://github.com/lima-vm/lima

Install Docker client on your Mac

まず、ホストとなる mac 上に docker client をインストールします。

brew install docker

この時、間違えて --cask オプションをつけてしまうと、有料化の対象となる Docker Desktop がインストールされるので注意してください。

Install & Lanch Lima

brew install lima

今回は Docker を使いたいので、公式に配布されている docker.yaml を利用して vm を立ち上げます。

curl https://raw.githubusercontent.com/lima-vm/lima/master/examples/docker.yaml -o docker.yaml

limactl start docker.yaml --tty=false

これで、 Lima が起動しました。

limactl list

# NAME      STATUS     SSH                ARCH      CPUS    MEMORY    DISK      DIR
# docker    Running    127.0.0.1:51139    x86_64    4       4GiB      100GiB    /Users/kiyotaka_kunihira/.lima/docker

Connect host docker client to Lima's docker daemon

ホストマシンの Docker client から Lima 上の docker daemon に接続できるよう設定を行います。 先ほどダウンロードした docker.yaml には、 ホストマシンの DOCKER_HOST 環境変数を設定するコマンドが記載されていますが、今回は docker context を利用して、接続先を切り替えられるようにしたいと思います。

docker context create lima --docker "host=$(limactl list docker --format 'unix://{{.Dir}}/sock/docker.sock')"

docker context use lima

期待通りホストマシンから Lima 上の docker が利用できるか試してみます。

まず、ホストマシン上で適当に docker run します。

docker run hello-world

docker ps -a

# CONTAINER ID   IMAGE         COMMAND    CREATED          STATUS                      PORTS     NAMES
# ab69d9e5cdf3   hello-world   "/hello"   26 seconds ago   Exited (0) 25 seconds ago             flamboyant_jang

Lima 上でも docker ps -a して、同じ結果が得られるか確認します

limactl shell docker docker ps -a

# CONTAINER ID   IMAGE         COMMAND    CREATED         STATUS                     PORTS     NAMES
# ab69d9e5cdf3   hello-world   "/hello"   2 minutes ago   Exited (0) 2 minutes ago             flamboyant_jang

CONTAINER ID が一致しているので、問題なく Lima 上の docker がホストマシンから操作できています。

VSCode からアクセス

Lima で writable 設定

デフォルト設定で起動した場合、Mac のホームディレクトリが読み取り専用でマウントされるため、そのままではファイルの保存ができません。以下のマウント設定を参考に Lima の設定ファイルを修正する必要があります。

vim `limactl list docker --format '{{.Dir}}/lima.yaml'`

ファイル内の mounts の ホームディレクトリを writable に変更します。

mounts:
  - location: "~"
    writable: true # Add this line
  - location: "/tmp/lima"
    writable: true

Lima を再起動すれば設定が反映されます。

limactl stop docker
limactl start docker

VSCode からアクセス

Remote - Containers を使ってコンテナ上のファイルを編集します。

ここではサンプルとして、 nginx の docker コンテナを立ち上げ、コンテナ上のファイルを編集します。

まず、ホストマシン上で適当な html ファイルを用意します。

echo "<html><body>hello world</body></html>" > index.html

そして、 nginx コンテナを立ち上げます。

docker run -v $(pwd):/usr/share/nginx/html:rw -d nginx

VSCode の Remote Explorer ペインを開くと、 nginx コンテナが表示されるので開きます。

The remote container pane in VS Code

nginx から コンテナ内のファイルを編集できました。

Editing an file on remote container in VS Code

まとめ

Docker Desktop の代替案として、 Mac から Lima 上の docker-daemon を利用する方法をまとめました。 また、 docker container 上のファイルを VS Code から編集するための設定しました。

Article Photo by cottonbro

docker

Author

Kiyotaka Kunihira

Kiyotaka Kunihira

バックエンド/テックリード/スクラムマスター/エンジニアリングマネージャー

新卒でスマートフォン向け乙女ゲーム開発をしつつAWS, Scalaに触れ Scala忍者に。その後、スタートアップを2社経験して、2019年にモンスターラボに入社。 大阪オフィスに所属している2児の父。 去年、認定スクラムマスター資格取得しました。 最近は、エンジニアリングマネージャーとして中間管理職しています。

その他おすすめ記事

2024/11/05

エンタープライズデータ基盤における dbt の活用戦略

近年、データ駆動型の意思決定が企業の競争力を左右する重要な要素となっており、大規模かつ複雑なデータ基盤の構築が不可欠となっています。この潮流の中で、dbt(data build tool)は、エンタープライズレベルのデータ変換とモデリングを効率化する強力なツールとして注目を集めています。 dbt は、SQL を使用してデータ変換を定義し、バージョン管理、テスト、ドキュメンテーションを統合的に行うことができるオープンソースツールです。特に以下の点で、エンタープライズデータ基盤の構築に大きな価値をもたらします...

Yoshiaki Sano

Yoshiaki Sano

Architecture

2024/11/04

データエンジニアリング初心者でも分かる!dbtの魅力と基本

データ駆動型ビジネスが当たり前となった今日、多くの企業がデータ分析の課題に直面しています。複雑な SQL クエリの管理、データの整合性確保、分析プロセスの再現性など、様々な問題が山積みです。そんな中で注目を集めているのが「dbt(data build tool)」です。 本記事では、データエンジニアリングの深い知識がなくても理解できるよう、dbt の基本と魅力について解説します。 dbt とは? dbt は、SQL を中心としたデータ変換ワークフローを管理するためのオープンソースツールです。従来の SQL...

Yoshiaki Sano

Yoshiaki Sano

Architecture

サービス開発実績会社情報
採用情報インサイトお問い合わせ
© 2022 Monstarlab
情報セキュリティ基本方針個人情報の取り扱いについて個人情報保護方針