Docker 是一个开源的平台,用于开发、部署和运行应用程序。它通过容器技术使得应用程序能够在任何环境下以一致的方式运行,解决了"环境不一致"导致的问题。
我们这里使用创建一个额外的分区用于docker的方法
查看当前分区,sudo parted -s ${DEV} unit MiB print
会以 MiB 为单位显示设备的分区表,帮助你了解设备上的各个分区及其大小。
shell
sudo apt update
sudo apt install parted fdisk
export DEV=/dev/mmcblk2 # 需要改成真实的设备
# eMMC的设备节点是/dev/mmcblk2,TF卡的设备节点是/dev/mmcblk0
sudo parted -s ${DEV} unit MiB print
调整userdata分区大小
shell
sudo passwd root # 为root用户创建密码,如果之前没有做
su - root -c 'echo "overlayfs=enable userdata=8096" > /.init_wipedata'
sudo reboot
su - root -c 'echo "overlayfs=enable userdata=8096" > /.init_wipedata'
su - root:
切换到 root 用户的环境(包括所有环境变量)。
-c 'command'
: 这个选项让 su 执行一个特定的命令并立即退出,不会切换到 root 的交互式 shell。
'echo "overlayfs=enable userdata=8096" > /.init_wipedata'
: 这是实际要执行的命令。它会将 "overlayfs=enable userdata=8096"
这段内容写入到根目录下的 /.init_wipedata 文件中。这个文件通常用于保存系统启动时的某些配置或指令。
overlayfs=enable
: 表示启用 overlayfs,这是一种文件系统,用于在不修改底层文件系统的情况下对文件系统进行更改。
userdata=8096
指定用户数据分区大小或其他相关参数。
在次查看分区大小,可以观察到userdata分区变为8G
shell
export DEV=/dev/mmcblk2 # 需要改成真实的设备
sudo parted -s ${DEV} unit MiB print
创建新分区
shell
(echo n; echo ""; echo ""; echo ""; echo w) | sudo fdisk ${DEV}
NUM=$(sudo parted ${DEV} print | awk 'NF > 1 {p = $1} END {print p}') # 获取最后一个分区的序号
sudo mkfs.ext4 ${DEV}p${NUM}
(echo n; echo ""; echo ""; echo ""; echo w) | sudo fdisk ${DEV}
:
echo n
: 这是 fdisk
命令的输入,用于创建一个新分区。
echo ""
: 这些空的 echo
命令相当于按回车键,用于选择默认值。具体来说,这些输入选择了默认的分区编号、默认的起始扇区和默认的结束扇区。
echo w
: 这一步用于将修改写入磁盘,并退出 fdisk
。
整个命令通过管道 (|
) 传递给 fdisk
,用于自动化地执行分区创建操作。
NUM=$(sudo parted ${DEV} print | awk 'NF > 1 {p = $1} END {print p}')
:
sudo parted ${DEV} print
: 打印指定设备上现有的分区表。
awk 'NF > 1 {p = $1} END {print p}'
: 这个 awk
命令用于解析 parted
输出的分区信息,并获取最后一个分区的编号,将其存储在 NUM
变量中。
sudo mkfs.ext4 ${DEV}p${NUM}
:记录这里的UUID
mkfs.ext4
是一个用于在分区上创建 ext4 文件系统的命令。
${DEV}p${NUM}
是你指定的分区路径,其中 ${DEV}
是设备路径(如 /dev/mmcblk2),${NUM}
是新创建的分区编号。
挂载新分区到docker数据目录
shell
sudo mkdir /var/lib/docker
sudo blkid ${DEV}p${NUM}
# 记下UUID
# 配置开机自动挂载新创建的分区
sudo vi /etc/fstab
# 在文件末尾加入如下内容(其中UUID需替换为真实的)
UUID=5246a7c1-c13a-4586-a001-fa740b84ff4d /var/lib/docker ext4 suid,dev,exec,auto,nouser,async,noatime,nofail 0 0
# 输入以下命令挂载分区
sudo mount /var/lib/docker
安装docker
因Docker安装程序需要使用iptables, 而Debian默认使用的是nftables, 因此安装前先设置Debian使用传统的iptables: 切换系统使用的 iptables 和 ip6tables 实现版本
shell
[ -f /usr/sbin/iptables-legacy ] && sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
[ -f /usr/sbin/ip6tables-legacy ] && sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
shell
sudo apt install lsb-release wget
codename=$(lsb_release -c | awk '{print $2}')
version=$(lsb_release -sr | cut -d'.' -f1)
wget https://download.docker.com/linux/debian/dists/${codename}/pool/stable/arm64/containerd.io_1.6.24-1_arm64.deb
wget https://download.docker.com/linux/debian/dists/${codename}/pool/stable/arm64/docker-ce-cli_24.0.6-1~debian.${version}~${codename}_arm64.deb
wget https://download.docker.com/linux/debian/dists/${codename}/pool/stable/arm64/docker-buildx-plugin_0.11.2-1~debian.${version}~${codename}_arm64.deb
wget https://download.docker.com/linux/debian/dists/${codename}/pool/stable/arm64/docker-ce_24.0.6-1~debian.${version}~${codename}_arm64.deb
wget https://download.docker.com/linux/debian/dists/${codename}/pool/stable/arm64/docker-compose-plugin_2.21.0-1~debian.11~${codename}_arm64.deb
sudo apt install ./containerd.io_1.6.24-1_arm64.deb \
./docker-ce_24.0.6-1~debian.${version}~${codename}_arm64.deb \
./docker-ce-cli_24.0.6-1~debian.${version}~${codename}_arm64.deb \
./docker-buildx-plugin_0.11.2-1~debian.${version}~${codename}_arm64.deb \
./docker-compose-plugin_2.21.0-1~debian.11~${codename}_arm64.deb
${codename}
是一个变量,代表你的 Debian 版本的代号。例如,如果你使用的是 Debian Bullseye,那么${codename}
就是 bullseye。
这里的软件包如果因为网络问题安装不上可选择本地安装,从网站下载.deb包。
pool/:存放软件包的目录。
验证是否安装成功
shell
sudo docker info
sudo docker info | grep storage -i
配置非root用户使用docker
shell
sudo groupadd docker
sudo gpasswd -a ${USER} docker
sudo systemctl restart docker
sudo chmod a+rw /var/run/docker.sock
docker images #验证