Alpine Linux运行Docker
安装
使用 Alpine Linux包管理apk 添加
Community
仓库,然后执行以下命令安装dockerapk add docker
将自己的账号加入到
docker
组:addgroup huatai docker
启动Docker服务 - 参考 OpenRC :
sudo rc-update add docker boot
sudo service docker start
备注
我没有安装 docker-compose
,后续容器编排主要采用 K3s - 轻量级Kubernetes
隔离容器
执行以下命令添加 dockremap
:
adduser -SDHs /sbin/nologin dockremap
addgroup -S dockremap
echo dockremap:$(cat /etc/passwd|grep dockremap|cut -d: -f3):65536 >> /etc/subuid
echo dockremap:$(cat /etc/passwd|grep dockremap|cut -d: -f4):65536 >> /etc/subgid
此时生成的 /etc/subuid
内容:
dockremap:101:65536
/etc/subgid
内容:
dockremap:65533:65536
然后在
/etc/docker/daemon.json
中添加:{ "userns-remap": "dockremap" }
此外,可以虑考虑添加:
"experimental": false,
"live-restore": true,
"ipv6": false,
"icc": false,
"no-new-privileges": false
详细的配置参数参考 Docker docs Reference / Command-line reference / Daemon CLI(dockerd) Daemon configuration file
我实际采用配置:
{
"userns-remap": "dockremap",
"experimental": false,
"live-restore": true,
"ipv6": false,
"icc": false,
"no-new-privileges": false,
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
}
}
alpine的Docker容器资源限制配置
执行
docker info
检查配置,可能会看到:WARNING: No memory limit support WARNING: No swap limit support WARNING: No kernel memory TCP limit support WARNING: No oom kill disable support
这个问题在 ruanbekker/k3s_on_alpine.md 提供了处理方法
此外,之前我在 部署ARM架构Kubernetes 也遇到同样问题,处理方法请参考该文档。不过在 部署ARM架构Kubernetes 采用了 Systemd进程管理器 所支持的 Control Group v2 : Docker Engine 20.10 Released: Supports cgroups v2 and Dual Logging
执行cgroup的fs挂载配置:
echo "cgroup /sys/fs/cgroup cgroup defaults 0 0" >> /etc/fstab
创建
/etc/cgconfig.conf
:
cat > /etc/cgconfig.conf <<EOF
mount {
cpuacct = /cgroup/cpuacct;
memory = /cgroup/memory;
devices = /cgroup/devices;
freezer = /cgroup/freezer;
net_cls = /cgroup/net_cls;
blkio = /cgroup/blkio;
cpuset = /cgroup/cpuset;
cpu = /cgroup/cpu;
}
EOF
如果系统使用 Alpine Linux Bootloader
Syslinux
(名字是extlinux
) 则修订内核参数:sed -i 's/default_kernel_opts="pax_nouderef quiet rootfstype=ext4"/default_kernel_opts="pax_nouderef quiet rootfstype=ext4 cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory"/g' /etc/update-extlinux.conf
备注
我的系统没有找到 /etc/update-extlinux.conf
,仔细核对之后我发现实际上默认安装 alpine不使用bootloader
不过,我的 树莓派环境安装Alpine Linux到USB磁盘启动 没有使用bootloader,所以直接修订 /media/sda1/cmdline.txt
添加:
cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory
完整配置如下:
modules=loop,squashfs,sd-mod,usb-storage quiet console=tty1 root=/dev/sda2 cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory
然后重启系统,然后再次执行 docker info
就不会出现上述报错
blkio 资源限制报错
我在 树莓派Raspberry Pi 3 上使用 TF卡作为存储,同样的安装和部署,发现 docker info
有如下WARNING:
WARNING: No blkio throttle.read_bps_device support
WARNING: No blkio throttle.write_bps_device support
WARNING: No blkio throttle.read_iops_device support
WARNING: No blkio throttle.write_iops_device support
由于 Alpine Linux运行Docker 使用的是 Docker 20.10 ,支持 Control Group v2 ,我在想是否可以通过转换操作系统 cgroup v1 到 v2 来解决这个问题?