Lima入門

# はじめに
Mac環境でもDocker Desktopを卒業するべく、Docker on Limaを触ってみました。

# 環境
ホストOS：macOS Vetntura 13.4.1
プロセッサ：1.4GHz デュアルコアIntel Core i7
VM：Docker on Lima
limactl：0.17.0

# 1.各種インストール
LimaでDockerを扱うため、docker、docker-compose、limaをそれぞれインストールしていきます。

## 1-0.Homebrewをインストール
docker類をインストールするために、homebrewを使用します。  
[公式](https://brew.sh/index_ja)を参考にインストールします。

## 1-1.dockerをインストール

```shell
% brew install docker
```

```shell
% docker -v
Docker version 24.0.5, build ced0996600
```

## 1-2.docker-composeをインストール

```shell
% brew install docker-compose
```

```shell
% docker-compose -v          
Docker Compose version 2.20.3
```

## 1-3.limaをインストール

```shell
% brew install lima
```

limaをインストールするとlimaを制御するlimactlコマンドがインストールされます。

```shell
% limactl -v
limactl version 0.17.2
```

# 2.limaでdockerを扱うための準備
## 2-1.limaインスタンスを作成
### 現状確認
limaをインストールするとdefaultインスタンスが最初から作成されています。
今回は、自分で新規インスタンスを作成してdockerを扱うようにしてみます。

まず、現状を確認。

```shell
% limactl ls           
NAME       STATUS     SSH                VMTYPE    ARCH      CPUS    MEMORY    DISK      DIR
default    Running    127.0.0.1:60022    qemu      x86_64    4       4GiB      100GiB    ~/.lima/default
```

### 設定ファイルを取得
Limaのインスタンスを作成するにはyaml形式の設定ファイルを指定します。
[Limaのリポジトリ](https://github.com/lima-vm/lima)にテンプレート例が複数パターン用意されてるので、
そちらを利用してインスタンスを作成します。

今回は[docker.yaml](https://github.com/lima-vm/lima/blob/master/examples/docker.yaml)を利用します。

### Linuxインスタンスを作成
「limactl start」でインスタンスを作成・起動します。
コマンド実行直後に設定の適用方法について選択肢が出ます。
今回はコマンドで指定したyamlファイルを使用するので「Proceed with the current configuration」を選択します。

```shell
% limactl start --name=develop ~/docker.yaml
? Creating an instance "develop"  [Use arrows to move, type to filter]
> Proceed with the current configuration
  Open an editor to review or modify the current configuration
  Choose another template (docker, podman, archlinux, fedora, ...)
  Exit
```

起動後、「limactl list」でLinuxインスタンスを一覧し、「develop」が表示されてstatusも「Running」になっていればOKです。

```shell
% limactl list                                                
NAME       STATUS     SSH                VMTYPE    ARCH      CPUS    MEMORY    DISK      DIR
default    Running    127.0.0.1:60022    qemu      x86_64    4       4GiB      100GiB    ~/.lima/default
develop    Running    127.0.0.1:55839    qemu      x86_64    4       4GiB      100GiB    ~/.lima/develop
```

##  2-2.Dockerコンテキストを作成
続いて、作成したLinuxインスタンス「develop」で扱うDockerコンテキストを作成します。
### 現状確認
「docker context ls」でDockerコンテキストを確認します。

```shell
% docker context ls
NAME            DESCRIPTION                               DOCKER ENDPOINT                                      ERROR
default *       Current DOCKER_HOST based configuration   unix:///var/run/docker.sock                          
desktop-linux   Docker Desktop                            unix:///Users/xxx/.docker/run/docker.sock 
```

こちらもdefaultとdesktop-linuxしかないので、新規コンテキストを作成していきます。

### 新規コンテキストを作成
「docker context create」でコンテキストを作成できるので、developインスタンス用に新規作成します。
limaをインストールした時、ホームディレクトリ直下に「.lima」が作成されているので、
コマンド実行時にdevelopインスタンスのdocker.sockを指定します。

```shell
% docker context create develop --docker "host=unix:///Users/$USER/.lima/develop/sock/docker.sock"
develop
Successfully created context "develop"
```

コンテキストを確認

```shell
% docker context ls                                                                               
NAME            DESCRIPTION                               DOCKER ENDPOINT                                             ERROR
default *       Current DOCKER_HOST based configuration   unix:///var/run/docker.sock                                 
desktop-linux   Docker Desktop                            unix:///Users/xxx/.docker/run/docker.sock          
develop                                                   unix:///Users/xxx/.lima/develop/sock/docker.sock
```

developコンテキストが作成ましたが、 「*」マークはdefaultに表示されてます。
カレントのDockerホストはdefaultのままということなので、続けてDockerホストも切り替えます。

### コンテキストの切り替え
「docker context use」でdevelopをカレントコンテキストに選択します。

```shell
% docker context use develop
develop
Current context is now "develop"
```

コンテキストを再度確認

```shell
% docker context ls         
NAME            DESCRIPTION                               DOCKER ENDPOINT                                             ERROR
default         Current DOCKER_HOST based configuration   unix:///var/run/docker.sock                                 
desktop-linux   Docker Desktop                            unix:///Users/xxx/.docker/run/docker.sock          
develop *                                                 unix:///Users/xxx/.lima/develop/sock/docker.sock
```

指定したコンテキストに「*」が付いていれば切り替えOKです。

# 3.動作検証
## コンテナイメージをプルしてみる
nginxのコンテナイメージをプルしてみてDockerが使用出来ることを確認してみます。

```shell
% docker pull nginx    
Using default tag: latest
latest: Pulling from library/nginx
52d2b7f179e3: Pull complete 
・・・
Digest: sha256:104c7c5c54f2685f0f46f3be607ce60da7085da3eaa5ad22d3d9f01594295e9c
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
```

コンテナイメージを確認

```shell
% docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
nginx        latest    eea7b3dcba7e   3 days ago   187MB
```

無事、コンテナイメージをプルできました。

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