本文目录导读:

在Shell脚本中配置容器存储策略,主要取决于你使用的容器运行时环境,以下是针对不同场景的配置方法:
Docker 存储策略配置
配置存储驱动
#!/bin/bash
# 配置Docker使用overlay2存储驱动
cat > /etc/docker/daemon.json << EOF
{
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
EOF
# 重启Docker服务
systemctl restart docker
配置镜像存储路径
#!/bin/bash
# 修改Docker数据目录
cat > /etc/docker/daemon.json << EOF
{
"data-root": "/data/docker",
"storage-driver": "overlay2"
}
EOF
# 迁移现有数据(如需要)
systemctl stop docker
rsync -aP /var/lib/docker/ /data/docker/
systemctl start docker
Podman 存储策略配置
配置存储路径和驱动
#!/bin/bash # 创建Podman存储配置文件 cat > /etc/containers/storage.conf << EOF [storage] driver = "overlay" runroot = "/run/containers/storage" graphroot = "/var/lib/containers/storage" [storage.options] size = "" # 设置存储大小限制 remap-uids = "" remap-gids = "" EOF # 或为用户级别配置 mkdir -p ~/.config/containers/ cat > ~/.config/containers/storage.conf << EOF [storage] driver = "overlay" graphroot = "$HOME/.local/share/containers/storage" EOF
存储卷管理策略
自动清理未使用的存储卷
#!/bin/bash
# Docker卷清理脚本
cleanup_docker_volumes() {
echo "清理未使用的Docker卷..."
docker volume prune -f
# 清理特定时间前的卷
docker volume ls -qf dangling=true | while read volume; do
if [ -n "$volume" ]; then
echo "删除卷: $volume"
docker volume rm "$volume" 2>/dev/null
fi
done
}
# 设置定时清理任务
setup_cleanup_cron() {
cat > /etc/cron.daily/docker-volume-cleanup << 'EOF'
#!/bin/bash
docker system prune -af --volumes
EOF
chmod +x /etc/cron.daily/docker-volume-cleanup
}
存储限制策略
#!/bin/bash
# 限制容器存储使用量
limit_container_storage() {
local container_name=$1
local max_size=$2 # 如: 10g
# Docker run时设置存储限制
docker run -d \
--storage-opt size=$max_size \
--name $container_name \
nginx
# 或对运行中的容器限制
docker update \
--storage-opt size=$max_size \
$container_name
}
# 设置全局存储配额
setup_quota() {
# 启用磁盘配额支持
if ! grep -q "usrquota" /etc/fstab; then
sed -i 's/defaults/defaults,usrquota/g' /etc/fstab
mount -o remount /
fi
# 初始化配额数据库
quotacheck -cug /
quotaon -ug /
}
分布式存储配置
配置NFS存储
#!/bin/bash
# 配置NFS作为Docker存储后端
setup_nfs_storage() {
local nfs_server="192.168.1.100"
local nfs_path="/exports/docker"
local mount_point="/mnt/docker-storage"
# 安装NFS客户端
apt-get install -y nfs-common
# 挂载NFS
mkdir -p $mount_point
mount -t nfs $nfs_server:$nfs_path $mount_point
# 配置Docker使用NFS卷
docker volume create \
--driver local \
--opt type=nfs \
--opt o=addr=$nfs_server,rw \
--opt device=:$nfs_path \
nfs-volume
}
自动扩缩容策略
基于存储使用率的自动清理
#!/bin/bash
# 监控存储使用并自动清理
monitor_and_cleanup() {
threshold=80 # 使用率超过80%时清理
storage_path="/var/lib/docker"
while true; do
usage=$(df -h $storage_path | awk 'NR==2 {print $5}' | sed 's/%//')
if [ "$usage" -gt "$threshold" ]; then
echo "存储使用率达到 ${usage}%,执行清理..."
# 清理未使用的镜像
docker image prune -af
# 清理停止的容器
docker container prune -f
# 清理构建缓存
docker builder prune -af
# 发送告警
send_alert "存储空间不足,已执行清理"
fi
sleep 3600 # 每小时检查一次
done
}
# 告警函数
send_alert() {
local message=$1
echo "[$(date)] $message" >> /var/log/storage-alert.log
# 可添加邮件或webhook通知
}
配置文件示例
完整的存储策略配置脚本
#!/bin/bash
set -e
# Docker存储策略配置
configure_docker_storage() {
echo "配置Docker存储策略..."
# 备份现有配置
[ -f /etc/docker/daemon.json ] && cp /etc/docker/daemon.json /etc/docker/daemon.json.bak
# 写入新配置
cat > /etc/docker/daemon.json << EOF
{
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"registry-mirrors": ["https://mirror.ccs.tencentyun.com"],
"data-root": "/data/docker"
}
EOF
# 重启Docker
systemctl daemon-reload
systemctl restart docker
echo "Docker存储策略配置完成"
}
# 配置存储清理策略
configure_cleanup_policy() {
echo "配置存储清理策略..."
# 创建清理脚本
cat > /usr/local/bin/docker-cleanup.sh << 'EOF'
#!/bin/bash
# 保留最近7天的镜像
docker image prune -a --filter "until=168h" -f
# 清理未使用的卷
docker volume prune -f
# 清理网络
docker network prune -f
# 清理构建缓存
docker builder prune -f
# 输出清理结果
echo "清理完成: $(date)"
df -h /var/lib/docker
EOF
chmod +x /usr/local/bin/docker-cleanup.sh
# 添加定时任务(每天凌晨2点执行)
echo "0 2 * * * /usr/local/bin/docker-cleanup.sh" | crontab -
echo "清理策略配置完成"
}
# 执行配置
configure_docker_storage
configure_cleanup_policy
echo "所有存储策略配置完成!"
验证配置
#!/bin/bash
# 验证存储配置
verify_storage_config() {
echo "验证存储配置..."
# 检查Docker存储驱动
docker info | grep "Storage Driver"
# 检查存储路径
docker info | grep "Docker Root Dir"
# 查看卷列表
docker volume ls
# 检查存储使用
df -h | grep docker
}
verify_storage_config
这些脚本提供了容器存储策略的配置方法,你可以根据实际需求选择和组合使用,记得在部署前测试脚本,并根据系统环境调整参数。