Docker 数据挂载教程

发布于:2025-04-08 ⋅ 阅读:(12) ⋅ 点赞:(0)

数据挂载基本概念

Docker 数据挂载(Volume Mount)允许将主机上的目录或文件挂载到容器内部,实现主机和容器之间的数据共享和持久化存储。

挂载类型

  1. 绑定挂载(Bind Mount):直接挂载主机上的特定目录

  2. 卷挂载(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


网站公告

今日签到

点亮在社区的每一天
去签到