利马使用Docker

在Lima虚拟机环境中构建Docker。

22年1月18日,当壳启动时,VM启动信息已追加。

修正日期为2023年2月11日的发帖权限。

https://github.com/lima-vm/lima 的内容请用中文进行重述。

验证环境 .

    • Mac OS Monterey 12.1

 

    • MacBook Pro (Intel CPU)

 

    HomeBrew インストール済み

安装必要的软件包。

brew install lima docker

当安装完成后,将会开启一个名为limactl的命令可供使用。

limactl --version

我想要安装额外的软件包。

brew install docker-compose

准备docker.yaml文件

在一个合适的目录下创建一个名为docker.yaml的用于构建的yaml文件。

バージョンによって推奨する内容が微妙に変わるようなので、以下のURLへアクセスして内容をdocker.yamlという名前でファイルとして保存する。

GitHub /lima-vm/lima/examples/docker.yaml
https://github.com/lima-vm/lima/blob/master/examples/docker.yaml

或者,可以使用wget来下载以下文件。

wget https://github.com/lima-vm/lima/raw/master/examples/docker.yaml

将以下内容添加到docker.yaml文件中。

改变资源

在docker.yaml文件中添加以下内容以更改资源。

cpus: 2
memory: "8GiB"
disk: "100GiB"

SSH 使用

在docker.yaml文件中添加以下内容以避免错误。

~/.sshのディレクトリ以下のファイル関係で問題がある場合、loadDotSSHPubKeysをfalseにしておかないとlimactl startコマンドでINFO[0003] [hostagent] Waiting for the essential requirement 1 of 5: “ssh”のループに陥る。

ssh:
  loadDotSSHPubKeys: false

另外,如需指定端口,请在上述内容中添加并指定端口号。

ssh:
  loadDotSSHPubKeys: false
  localPort: 60006

書き込み権限

デフォルトではユーザーのホームをマウントする設定になっているが、書き込みは出来ないようになっている。そのため、writable: true書き換え可能になる。権限が大きすぎるので、必要なディレクトリ以下にのみ権限をもたせたほうが良い。

 

mounts:
- location: "~"
  writable: false
# 開発環境に使うディレクトリのみを対象にする
- location: "~/work"
  writable: true
- location: "/tmp/lima"
  writable: true

実行

执行以下操作以进行构建。 .)

limactl start ./docker.yaml
# --debugをつけると、エラーが発生した際に原因がわかりやすくなる
# limactl start ./docker.yaml --debug

确认

确认已经建立了吗?

limactl ls
NAME      STATUS     SSH                ARCH      CPUS    MEMORY    DISK      DIR
docker    Running    127.0.0.1:60006    x86_64    2       8GiB      100GiB    /Users/ユーザ名/.lima/docker

进入虚拟机

limactl

要直接登录到已部署了Docker的虚拟机,执行以下命令。

进入后,从虚拟机退出。

limactl shell docker

SSH (Secure Shell) 可以被视为一种远程登录协议,它通过加密和认证的方式,确保在网络中安全地访问和控制远程计算机。

如果使用ssh命令进入VM,则如下所示。端口号取决于创建的yaml文件。

ssh ${USER}@localhost -p 60006 -i /Users/${USER}/.lima/_config/user

この場合、known_hostsに記録されるので、作成したVMの状態が変わった場合は、以下を実行して記録を消さないとエラーになる。

ssh-keygen -R "[localhost]:60006"

DOCKER_HOST环境变量

.zshrcや.zprofile(MacOSのバージョンによっては.bash_profile)に DOCKER_HOST環境変数を追記して、Dockerのベースをlimaの仮想マシンで使用するように変更する。(Limaのバージョンによっては内容が少々変わる可能性がある)

export DOCKER_HOST=unix:///${HOME}/.lima/docker/sock/docker.sock

シェル起動時にVM起動

システムを再起動すると、作成した仮想環境はstopの状態になるので、先程の.zshrcに仮想環境を立ち上げるように追記する。

limactl start docker

考试

在中国,搭建Nginx。

试着构建nginx

docker run --name nginx_test -d -p 8080:80 nginx

可以通过 http://localhost:8080/ 能够访问到 nginx。

删除nginx

docker stop $(docker ps -aqf "name=nginx_test")
docker rm $(docker ps -aqf "name=nginx_test")

Docker在Docker之外

在使用Docker容器内部的Docker方式中,有”Docker内嵌Docker”的方式和”在容器外部使用Docker”的方式。

如果在Lima中使用 Docker outside of Docker,需要使用 chmod 命令为 VM 内的 /var/run/docker.sock 文件赋予权限。

limactl shell docker sudo chmod 0666 /var/run/docker.sock

然后,例如可以准备以下的docker-compose.yaml文件来进行操作验证。

顺便提一下,volumes中的/var/run/docker.sock路径指定了虚拟机内的套接字。

version: '3'
services:
  dood:
    image: docker:rc-git
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    tty: true
# コンテナ作成
docker-compose up -d
# docker infoコマンド
docker-compose exec dood docker info
# コンテナ等をまとめて削除
docker-compose down --rmi all --volumes --remove-orphans
广告
将在 10 秒后关闭
bannerAds