Lima docker examples
#Lima #Docker
code:bash
# 作業ディレクトリの作成と移動
mkdir lima; cd $_
# Lima公式サンプルのダウンロード
curl -LO https://raw.githubusercontent.com/lima-vm/lima/master/examples/docker.yaml
# VMの作成と起動
limactl start docker.yaml
# ディレクトリのマウントとポートフォワーディングの設定ログが確認できる
INFO0043 hostagent Mounting "/Users/xxxxxx" on "/Users/xxxxxx"
INFO0044 hostagent Mounting "/tmp/lima" on "/tmp/lima"
INFO0044 hostagent Waiting for the optional requirement 1 of 1: "user probe 1/1"
INFO0044 hostagent Forwarding "/run/user/501/docker.sock" (guest) to "/Users/xxxxxx/.lima/docker/sock/docker.sock" (host)
INFO0044 hostagent Forwarding "/run/lima-guestagent.sock" (guest) to "/Users/xxxxxx/.lima/docker/ga.sock" (host)
INFO0044 hostagent Not forwarding TCP 127.0.0.53:53
INFO0044 hostagent Not forwarding TCP 0.0.0.0:22
INFO0044 hostagent Not forwarding TCP :::22
# Mac側のソケット確認
tree ~/.lima/docker/ | grep sock
├── ga.sock
├── ha.sock
├── qmp.sock
├── serial.sock
├── sock
│   └── docker.sock
└── ssh.sock
# VMの起動を確認
limactl ls
NAME STATUS SSH VMTYPE ARCH CPUS MEMORY DISK DIR
docker Running 127.0.0.1:52159 qemu aarch64 4 4GiB 100GiB ~/.lima/docker
# VMにSSHする
limactl shell docker
$ hostname;uname -a
lima-docker
Linux lima-docker 5.15.0-56-generic #62-Ubuntu SMP Tue Nov 22 19:56:13 UTC 2022 aarch64 aarch64 aarch64 GNU/Linux
# Lima側のソケット確認
ls -alh /run/ | grep lima-guestagent
srwxrwxrwx 1 root root 0 Feb 10 08:54 lima-guestagent.sock
ls -l /run/user/${UID}/docker.sock
srw-rw---T 1 xxxxxx 100998 0 Feb 10 08:55 /run/user/501/docker.sock
## UIDの確認
id $whoami
uid=501(xxxxxx) gid=1000(xxxxxx) groups=1000(xxxxxx)
# 抜ける
exit
# docker につなぐ
## またつながっていない
docker version
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
Client:
Cloud integration: v1.0.29
Version: 20.10.21
API version: 1.41
Go version: go1.18.7
Git commit: baeda1f
Built: Tue Oct 25 18:01:18 2022
OS/Arch: darwin/arm64
Context: default
Experimental: true
## 環境変数の設定
export DOCKER_HOST=$(limactl list docker --format 'unix://{{.Dir}}/sock/docker.sock')
## もう一度確認
docker version
Client:
Cloud integration: v1.0.29
Version: 20.10.21
API version: 1.41
Go version: go1.18.7
Git commit: baeda1f
Built: Tue Oct 25 18:01:18 2022
OS/Arch: darwin/arm64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 23.0.1
API version: 1.42 (minimum version 1.12)
Go version: go1.19.5
Git commit: bc3805a
Built: Thu Feb 9 19:46:30 2023
OS/Arch: linux/arm64
Experimental: false
containerd:
Version: 1.6.16
GitCommit: 31aa4358a36870b21a992d3ad2bef29e1d693bec
runc:
Version: 1.1.4
GitCommit: v1.1.4-0-g5fd4c4d
docker-init:
Version: 0.19.0
GitCommit: de40ad0
rootlesskit:
Version: 1.1.0
ApiVersion: 1.1.1
NetworkDriver: slirp4netns
PortDriver: builtin
StateDir: /tmp/rootlesskit117081334
slirp4netns:
Version: 1.0.1
GitCommit: 6a7b16babc95b6a3056b33fb45b74a6f62262dd4
## ※もしも解除するなら
unset DOCKER_HOST
Docker outside of Docker を試す
code:bash
ベースのイメージは AmazonLinux 2
## イメージのpull
docker pull amazonlinux:2
## 確認
docker run amazonlinux:2 cat /etc/os-release
NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"
# 失敗例
docker run -it --rm -v $HOME/.lima/docker/sock/docker.sock:/var/run/docker.sock --name al2 amazonlinux:2 /bin/bash
## docker のインストール
bash-4.2#amazon-linux-extras install docker -y
bash-4.2#docker version
Client:
Version: 20.10.17
API version: 1.41
Go version: go1.18.6
Git commit: 100c701
Built: Sat Dec 3 04:13:49 2022
OS/Arch: linux/arm64
Context: default
Experimental: true
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
# 成功例
docker run -it --rm -v /run/user/501/docker.sock:/var/run/docker.sock --name al2 amazonlinux:2 /bin/bash
## docker のインストール
bash-4.2# amazon-linux-extras install docker -y
bash-4.2# docker version
Client:
Version: 20.10.17
API version: 1.41
Go version: go1.18.6
Git commit: 100c701
Built: Sat Dec 3 04:13:49 2022
OS/Arch: linux/arm64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 23.0.1
API version: 1.42 (minimum version 1.12)
Go version: go1.19.5
Git commit: bc3805a
Built: Thu Feb 9 19:46:30 2023
OS/Arch: linux/arm64
Experimental: false
containerd:
Version: 1.6.16
GitCommit: 31aa4358a36870b21a992d3ad2bef29e1d693bec
runc:
Version: 1.1.4
GitCommit: v1.1.4-0-g5fd4c4d
docker-init:
Version: 0.19.0
GitCommit: de40ad0
rootlesskit:
Version: 1.1.0
ApiVersion: 1.1.1
NetworkDriver: slirp4netns
PortDriver: builtin
StateDir: /tmp/rootlesskit117081334
slirp4netns:
Version: 1.0.1
GitCommit: 6a7b16babc95b6a3056b33fb45b74a6f62262dd4
## 取得済みのdocker イメージ
bash-4.2#docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
amazonlinux 2 dfa2bfcf82b2 2 weeks ago 194MB
## 実行中のコンテナ
bash-4.2#docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0670fb5564b6 amazonlinux:2 "/bin/bash" 2 minutes ago Up 2 minutes al2
bash-4.2# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
7050e35b49f5: Pull complete
Digest: sha256:aa0cc8055b82dc2509bed2e19b275c8f463506616377219d9642221ab53cf9fe
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(arm64v8)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
おまけ
code:bash
# マウントすべきdocker.sockを出力する
$ echo "/run/user/$(limactl shell docker echo $UID)/docker.sock"
# もしもrootfullがいいなら、こっちの設定ファイルを使うとよい
## https://github.com/lima-vm/lima/blob/master/examples/docker-rootful.yaml
curl -LO https://raw.githubusercontent.com/lima-vm/lima/master/examples/docker-rootful.yaml
limactl start docker-rootful.yaml
Docker の Rootlessモードを試してみた - Qiita
dind(docker-in-docker)とdood(docker-outside-of-docker)でコンテナを料理する - Qiita