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

相关推荐
朝九晚五ฺ5 小时前
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
linux·运维·学习
Kkooe6 小时前
GitLab|数据迁移
运维·服务器·git
久醉不在酒6 小时前
MySQL数据库运维及集群搭建
运维·数据库·mysql
意疏8 小时前
【Linux 篇】Docker 的容器之海与镜像之岛:于 Linux 系统内探索容器化的奇妙航行
linux·docker
虚拟网络工程师8 小时前
【网络系统管理】Centos7——配置主从mariadb服务器案例(下半部分)
运维·服务器·网络·数据库·mariadb
墨鸦_Cormorant8 小时前
使用docker快速部署Nginx、Redis、MySQL、Tomcat以及制作镜像
redis·nginx·docker
BLEACH-heiqiyihu8 小时前
RedHat7—Linux中kickstart自动安装脚本制作
linux·运维·服务器
Code_Artist8 小时前
Docker镜像加速解决方案:配置HTTP代理,让Docker学会科学上网!
docker·云原生·容器
MXsoft6189 小时前
华为服务器(iBMC)硬件监控指标解读
大数据·运维·数据库
1900439 小时前
linux6:常见命令介绍
linux·运维·服务器