見出し画像

Limaを使ってDocker環境を構築する

はじめに

こんにちは。
株式会社 SHIFT DAAE 部 のブラッドフォードです。

直近のプロジェクトで Docker 環境が必要になったため、Lima を使った仮想環境の構築にトライしました。
使ってみたところ Docker Desktop と Vagrant の手軽さを兼ね備えた、とても便利なツールだと感じました。
今後も積極的に使っていきたいので、忘備録を残したいと思います。

Lima とは

Lima は macOS に Linux 仮想環境 を作成するツールです。
自動ファイル共有 や ポートフォワーディング を利用することができます。

参考:https://github.com/lima-vm/lima#readme

Lima のインストール

まずは Homebrew をインストールします。

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

次に Lima をインストールします。

$ brew install lima

macOS 側から Lima 上の Docker を利用するため docker と docker-compose もインストールしておきます。

$ brew install docker docker-compose

Lima を使った Docker 用の仮想環境 を構築

Lima を操作する時は ターミナル上で limactl XXX といったコマンドを利用します。
それでは Docker 用の仮想環境を構築していきます。

$ limactl start

選択式コマンドが表示されるので 「Choose another example」を選択します。

? Creating an instance "default"  [Use arrows to move, type to filter]
  Proceed with the current configuration
  Open an editor to review or modify the current configuration
> Choose another example (docker, podman, archlinux, fedora, ...)
  Exit

「docker」 を選択します。

? Choose an example  [Use arrows to move, type to filter]
  docker-rootful
> docker
  experimental/9p

「Open an editor to review or modify the current configuration」を選択します。

? Creating an instance "docker"  [Use arrows to move, type to filter]
  Proceed with the current configuration
> Open an editor to review or modify the current configuration
  Choose another example (docker, podman, archlinux, fedora, ...)
  Exit

Vim で設定ファイルが開かれるので、以下を追記します。
Docker を利用するプロジェクトフォルダまでのパスを指定し、書き込み権限を付与しています。

mounts:
- location: "~"
- location: "~/project/path" # 追記
  writable: true             # 追記
- location: "/tmp/lima"
  writable: true

上記の内容で保存すると、仮想環境の構築がはじまるので、完了まで待ちます。
無事完了すると以下のような文言が表示されます。

---
docker context create lima-docker --docker "host=unix:///Users/{ユーザ名}/.lima/docker/sock/docker.sock"
docker context use lima-docker
docker run hello-world
---

limactl list で作成した仮想環境を確認してみます。

$ limactl list
NAME   STATUS  SSH             ARCH   CPUS MEMORY DISK   DIR
docker Running 127.0.0.1:57142 x86_64 4    4GiB   100GiB /User...

.zshrc に以下を記載すると、以降 macOS 側から lima の Docker コマンドが利用できるようになるのでとても便利です。

# ~/.zshrc
export DOCKER_HOST=unix://$HOME/.lima/docker/sock/docker.sock

.zshrc へ記載したらターミナルを再起動して、以下を実行し「Hello from Docker!」が表示されることを確認しましょう。

$ docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

最後に Docker Compose を利用するフォルダまで移動して docker compose を実行してみましょう。

$ cd ~/project/path
$ docker compose build

無事起動できたら Docker 環境の構築は完了です。
以降、PC を起動したら以下の手順で Docker 環境を起動できます。

$ limactl start docker
$ cd ~/project/path
$ docker compose up

お疲れさまでした。

設定ファイルを使った環境構築

ここまで、コマンドのみを使いましたが .yaml を使った構築方法もあります。
docker.yaml をダウンロードして設定を変更し limactl start docker.yaml するだけです。

Docker の他に Alpine Linux や Debian など、さまざまな設定ファイルが用意されています。
参考:https://github.com/lima-vm/lima/tree/master/examples#readme

仮想マシンの操作

主要な操作コマンドは以下です。

$ limactl start // 仮想マシンを作成します
$ limactl start XXXX.yaml // 仮想マシンを作成します
$ limactl list // 各仮想マシンの情報を表示します ※仮想マシン名の確認で使う
$ limactl start {仮想マシン名} // 特定の仮想マシンを起動します
$ limactl stop {仮想マシン名} // 特定の仮想マシンを停止します
$ limactl delete {仮想マシン名} // 特定の仮想マシンを削除します

その他のコマンドも用意されていますので、以下をご参考ください。
参考:https://github.com/lima-vm/lima#command-reference

Lima の注意点

利用する際に注意すべき点があります。
こちらで言及されているように、Lima にマウントするフォルダを書込み可能にしている場合、何らかのバグでデータが損失する恐れがあります。
Lima を起動する前に、作業フォルダのバックアップを取ることや、書き込み可能なフォルダを最小限にとどめることを考慮しましょう。

おわりに

以上、Lima を使った Docker 環境の構築手順でした。
仮想環境構築の手順や操作方法が、Vagrant などと比べて非常にシンプルだと感じますし、Docker Desktop のように macOS 上のターミナルから直接 Docker コマンドが利用できるのも非常に魅力的でした。
今後も積極的に Lima を活用して開発していきたいと思います。

\もっと身近にもっとリアルに!DAAE公式Twitter/

★★★\クリスマスまで毎日公開!明日はどんな記事?!/★★★


執筆者プロフィール:ブラッドフォード
株式会社SHIFT DAAE部所属のフロントエンドエンジニアです。
直近の夢は VR 空間にバーチャルデスクを設ける事です。

お問合せはお気軽に
https://service.shiftinc.jp/contact/

SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/

SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/

SHIFTの導入事例
https://service.shiftinc.jp/case/

お役立ち資料はこちら
https://service.shiftinc.jp/resources/

SHIFTの採用情報はこちら 
https://recruit.shiftinc.jp/career/