数据挂载基本概念
Docker 数据挂载(Volume Mount)允许将主机上的目录或文件挂载到容器内部,实现主机和容器之间的数据共享和持久化存储。
挂载类型
绑定挂载(Bind Mount):直接挂载主机上的特定目录
卷挂载(Volume):使用 Docker 管理的卷
第一部分:Docker 数据目录迁移
# 1. 创建挂载目录(确保有足够空间)
sudo mkdir -p /home/gao/data/docker
sudo chown root:root /home/gao/data/docker
# 2. 停止 Docker 服务
sudo systemctl stop docker
# 3. 迁移现有数据(使用rsync更安全)
sudo rsync -aqxP /var/lib/docker/ /home/gao/data/docker/
# 4. 备份原docker目录(可选)
sudo mv /var/lib/docker /var/lib/docker.bak
# 5. 修改 Docker 配置文件
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"data-root": "/home/gao/data/docker",
"storage-driver": "overlay2"
}
EOF
# 6. 重新加载并启动 Docker
sudo systemctl daemon-reload
sudo systemctl start docker
# 7. 验证更改
docker info | grep "Docker Root Dir"
# 8. 确认服务正常后删除备份(谨慎操作)
# sudo rm -rf /var/lib/docker.bak
第二部分:Nginx 挂载案例
# 1. 创建目录结构(使用变量更灵活)
NGINX_DATA_DIR="/home/gao/data/nginx"
sudo mkdir -p ${NGINX_DATA_DIR}/{html,conf,logs}
sudo chown -R $USER:$USER ${NGINX_DATA_DIR}
# 2. 获取默认配置(使用一次性容器避免残留)
docker run --rm \
--name nginx_temp \
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nginx:1.26.3 \
sh -c "tar -czf - -C /etc/nginx ." | tar -xzf - -C ${NGINX_DATA_DIR}/conf
# 3. 创建测试页面(添加更多内容)
cat > ${NGINX_DATA_DIR}/html/index.html <<EOF
<!DOCTYPE html>
<html>
<head>
<title>Welcome to Nginx</title>
<style>
body { width: 800px; margin: 20px auto; font-family: Arial, sans-serif; }
</style>
</head>
<body>
<h1>Hello Nginx!</h1>
<p>Served from Docker container with mounted volumes</p>
<p>Host directory: ${NGINX_DATA_DIR}</p>
</body>
</html>
EOF
# 4. 启动正式容器(添加重启策略和时区)
docker run -d \
--name my_nginx \
--restart unless-stopped \
-p 8088:80 \
-v ${NGINX_DATA_DIR}/html:/usr/share/nginx/html \
-v ${NGINX_DATA_DIR}/conf:/etc/nginx \
-v ${NGINX_DATA_DIR}/logs:/var/log/nginx \
-e TZ=Asia/Shanghai \
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nginx:1.26.3
# 5. 检查容器状态(格式化输出)
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"
# 6. 测试访问(带HTTP状态码检查)
curl -I http://localhost:8088