lxd容器初步
docker为应用级容器技术,容器内只能运行一个主进程,而lxd是lxc的上层包装,是系统级容器技术,可以像虚拟化技术一样在容器内运行一个guest OS,但是更轻量。
惯例,主机debian,这次版本是buster。
安装snap
lxd是ubuntu亲生的,所以除了ubuntu可以直接用apt安装,其他发行版需要用snap安装,忍!
1 | $ sudo apt install snapd |
安装lxd
1 | $ sudo snap install lxd --channel=3.0/stable |
这里选择stable版本
用户权限及sudo
如果想使用当前普通用户来管理lxd容器,则需要将用户添加到lxd用户组中
1 | $ sudo adduser $USER lxd |
当前用户需要重新登录用户组才能生效
因为snap安装的lxd并不在任何传统的文件系统中,它奇葩的位于/snap/bin路径下,so需要编辑/etc/sudoer文件,添加/snap/bin到secure_path
1 | $ which lxd |
下面就可以进入正题了
初始化lxd
1 | $ lxd init |
基本上一路enter即可,以后再详细了解每一项的含义吧, go
创建容器
从官方镜像源创建debian buster容器实例bst
1 | $ lxc launch images:debian/buster/amd64 bst |
如果创建ubuntu容器实例ubt,则可以这样
1 | $ lxc launch ubuntu:18.04 ubt |
ubuntu的源标签是ubuntu,其他所有发行版的源标签是images,再一次,忍!
容器列表
1 | $ lxc list |
查看容器实例信息
1 | $ lxc info bst |
容器交互
获取容器的shell
1 | $ lxc exec first -- /bin/bash |
或者执行一次性命令
1 | $ lxc exec first -- apt install procps |
源里的镜像很干净,基本的工具都需要自己安装,比如procps包里提供了free, kill, pkill, pgrep, pmap, ps, pwdx, skill, slabtop, snice, sysctl, tload, top, uptime, vmstat, w, 和 watch等基本命令行工具
从容器内部往外拉取文件
1 | $ lxc file pull first/etc/hosts . |
从外部向容器推送文件
1 | $ lxc file push hosts first/etc/ |
向容器推送文件夹
1 | $ lxc file push -r folder first/path/to |
停止容器
1 | $ lxc stop bst |
彻底删除容器
1 | $ lxc delete bst |
管理远程lxd服务器
lxc命令行工具既可以管理本地lxd服务器,也可以管理远程lxd服务器,这里的服务器是指运行的用于管理容器的lxd服务
要管理远程lxd服务器,首先在远程lxd服务器上执行:
1 | $ lxc config set core.https_address "\[::\]" |
第一条命令使lxd服务在所有本地地址上监听8443端口
第二条命令设定访问的密码凭证
然后就可以在本地添加远程的lxd服务器
1 | $ lxc remote add host-a <ip address or DNS name> |
会提示服务器指纹,并要求提供上一步设置的密码,完成之后就可以像管理本地lxd服务一样来管理远程lxd服务,除了要明确的指定远程lxd服务区的别名之外:
1 | $ lxc exec host-a:bst -- /bin/bash |
这就是在本地管理远程lxd服务器的容器实例了。
后面继续探索…
Updated(03/16/2022):
如果使用zfs后端存储,OpenZFS(zfs-dmks)更新后需要将lxd更新到4.0.x稳定版,不然会有各种问题。
更新到当前的LTS Stable Release 4.0.x
1 | $ sudo snap refresh lxd --channel=4.0/stable |