SOM-RK3399基于Debian系统安装Docker

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 #验证

参考 https://blog.csdn.net/Dontla/article/details/131855662

相关推荐
Arenaschi10 分钟前
在Tomcat中部署应用时,如何通过域名访问而不加端口号
运维·服务器
waicsdn_haha17 分钟前
Java/JDK下载、安装及环境配置超详细教程【Windows10、macOS和Linux图文详解】
java·运维·服务器·开发语言·windows·后端·jdk
蜜獾云43 分钟前
docker 安装雷池WAF防火墙 守护Web服务器
linux·运维·服务器·网络·网络安全·docker·容器
小屁不止是运维44 分钟前
麒麟操作系统服务架构保姆级教程(五)NGINX中间件详解
linux·运维·服务器·nginx·中间件·架构
Hacker_Oldv1 小时前
WPS 认证机制
运维·服务器·wps
bitcsljl1 小时前
Linux 命令行快捷键
linux·运维·服务器
ac.char1 小时前
在 Ubuntu 下使用 Tauri 打包 EXE 应用
linux·运维·ubuntu
Youkiup1 小时前
【linux 常用命令】
linux·运维·服务器
qq_297504612 小时前
【解决】Linux更新系统内核后Nvidia-smi has failed...
linux·运维·服务器
_oP_i2 小时前
.NET Core 项目配置到 Jenkins
运维·jenkins·.netcore