文章目录
- 配置宿主机网络
- 固定内核版本
- 安装 lxd、zfs 及 bridge-utils
- 安装宿主机显卡驱动
- lxd 初始化
- 创建容器模板
- 安装容器显卡驱动
- 复制容器
配置宿主机网络
- 进入
/etc/netplan/
目录有一个 yaml 配置文件,下面的命令需要根据自己的 yaml 文件名称自行修改:
修改内容如下:sudo cp /etc/netplan/01-netcfg.yaml /etc/netplan/01-netcfg.yaml.bak sudo vim /etc/netplan/01-netcfg.yaml
其中:# This file describes the network interfaces available on your system # For more information, see netplan(5). network:version: 2renderer: networkdethernets:eno1:dhcp4: nodhcp6: nobridges:br0:dhcp4: nodhcp6: nointerfaces:- eno8303addresses: [ 192.168.23.115/24 ]gateway4: 192.168.23.1nameservers:addresses:- 114.114.114.114- 8.8.8.8parameters:stp: falseforward-delay: 0
- addresses: [ 192.168.23.115/24 ] 为任意网络无人占用的 IP 即可。
- gateway4: 192.168.23.1 为网关地址。
- eno8303 为网卡名称,可以使用
ip a
命令查看。
- 应用网络配置:
sudo netplan --debug apply
固定内核版本
sudo apt-mark hold linux-image-generic linux-headers-generic
安装 lxd、zfs 及 bridge-utils
sudo snap install lxd
sudo apt install zfsutils-linux bridge-utils
安装宿主机显卡驱动
- 安装依赖:
sudo apt install gcc g++ make
- 安装驱动:
sudo bash ./NVIDIA-Linux-x86_64-550.90.07.run
- 查看显卡:
nvidia-smi
lxd 初始化
- 初始化 lxd:
在初始化过程中,不要创建新的网桥,已存在的网桥名为 br0,其他设置默认即可.sudo lxd init
Would you like to use LXD clustering? (yes/no) [default=no]: Do you want to configure a new storage pool? (yes/no) [default=yes]: Name of the new storage pool [default=default]: lxd Name of the storage backend to use (btrfs, ceph, dir, lvm, zfs) [default=zfs]: Create a new ZFS pool? (yes/no) [default=yes]: Would you like to use an existing block device? (yes/no) [default=no]: Size in GB of the new loop device (1GB minimum) [default=100GB]: 1200 Would you like to connect to a MAAS server? (yes/no) [default=no]: Would you like to create a new local network bridge? (yes/no) [default=yes]: no Would you like to configure LXD to use an existing bridge or host interface? (yes/no) [default=no]: yes Name of the existing bridge or host interface: br0 Would you like LXD to be available over the network? (yes/no) [default=no]: Would you like stale cached images to be updated automatically? (yes/no) [default=yes] Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:
创建容器模板
-
创建的容器版本最好与宿主机版本相同:
sudo lxc launch ubuntu:22.04
-
为方便后续使用,修改容器名:
sudo lxc stop equipped-locust sudo lxc rename equipped-locust template sudo lxc start template
-
为容器添加设备和权限:
sudo lxc config device add template gpu gpu sudo lxc config set template security.nesting true sudo lxc config set template security.privileged true
-
如果宿主机有多张显卡,一定要指定 GPU 的索引号:
sudo lxc config device add template gpu-tmp0 gpu id=0 sudo lxc config device add template gpu-tmp1 gpu id=1
使用
nvidia-smi
查看 GPU 的索引号:
-
启动容器:
lxc start template
-
进入容器:
sudo lxc exec template bash
其中
template
为容器名。 -
和宿主机一样,进入
/etc/netplan/
目录有一个 yaml 配置文件,下面的命令需要根据自己的 yaml 文件名称自行修改:
编辑 yaml 配置文件:mv /etc/netplan/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml.bak vim /etc/netplan/50-cloud-init.yaml
修改内容如下:
network:version: 2ethernets:eth0:dhcp4: nodhcp6: noaddresses:- 192.168.23.150/24gateway4: 192.168.23.1nameservers:addresses:- 114.114.114.114- 8.8.8.8
其中:
- addresses 为容器模板的 IP,与宿主机在同一网段下。
- gateway4 为网关地址。
-
应用网络配置:
netplan --debug apply
-
更改容器用户名和密码:
容器默认用户名为 ubuntu,这里想把他改成 tmp,命令如下:usermod -l tmp -d /home/tmp -m ubuntu groupmod -n tmp ubuntu
此时 /home 文件夹下只剩下 tmp 目录。
更改 tmp 用户密码和 root 密码:passwd tmp passwd root
-
配置容器 ssh 连接:
安装 ssh :sudo apt install openssh-server
安装完后,使用 systemctl 启动 ssh 服务:
sudo systemctl enable --now ssh
然后检查 ssh 服务运行状态,确保服务正常运行并且没有错误输出(显示 active running 表示服务正常):
sudo systemctl status ssh
编辑 ssh 配置文件:
vim /etc/ssh/sshd_config
将其中以下内容进行修改:
Port 22 PubkeyAuthentication no PasswordAuthentication yes KbdInteractiveAuthentication yes
重启 ssh 服务:
systemctl restart sshd
此时可以用 exit 命令退出到宿主机中,用 SSH 命令远程连接容器:
sudo ssh ubuntu22-tmp@10.22.118.222
输入密码,能登录则没问题。
-
配置容器软件源:
备份原来的源:sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak
将源的内容设置为清华镜像:
sudo apt install vim sudo rm /etc/apt/sources.list sudo vim /etc/apt/sources.list
将其中内容改为:
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释 deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse# 预发布软件源,不建议启用 # deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse 作者:贝拉的海 https://www.bilibili.com/read/cv17891624?spm_id_from=333.999.0.0 出处:bilibili
更新软件列表:
sudo apt update sudo apt upgrade
-
设置 pip 清华源:
sudo apt install python3-pip pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
安装容器显卡驱动
容器和宿主机的显卡驱动必须保持一致,因此需要将宿主机的驱动文件传输到容器中。 因为刚安好了 ssh,因此可以选择 scp 传输。在宿主机中输入以下命令:
scp ./NVIDIA-Linux-x86_64-550.90.07.run yhl@192.168.23.151:/home/yhl/
传输后通过 ssh 进入容器,输入以下命令安装显卡驱动:
sudo bash ./NVIDIA-Linux-x86_64-418.56.run --no-kernel-module
由于容器和宿主机共享内核,所以在安装容器的显卡驱动时需要添加 --no-kernel-module 参数。
复制容器
lxc copy template yhl
新复制的容器用于与容器模板相同的配置,但需要另行安装显卡驱动。