利马使用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