Docker数据持久化的五种方式

奥黛丽·逐爱者
2026-06-29 / 0 评论 / 4 阅读 / 正在检测是否收录...

一、绑定挂载(Bind Mount)

将宿主机目录直接挂载到容器中。
优点:数据直接保存在宿主机;可以使用宿主机工具直接查看和修改文件;方便备份和迁移。
缺点:强依赖宿主机目录结构;容器跨机器迁移不方便;存在权限问题。
适用场景:开发环境;配置文件挂载;日志目录挂载。
docker run -d \  --name mysql8 \  -p 39306:3306 \  -e MYSQL_ROOT_PASSWORD="Admin@2026#" \  -e MYSQL_DATABASE=toolbox \  -e MYSQL_USER=appuser \  -e MYSQL_PASSWORD="Abc@123456" \  -v /datah/mysql:/var/lib/mysql \  mysql:8
docker exec -it mysql8 bash
mysql -h 127.0.0.1 -P 3306 -uroot -p'Admin@2026#'
二、数据卷(Volume)
Docker 官方推荐的数据持久化方式。
优点:生命周期独立于容器,易于备份和迁移,Docker 自动管理,性能较好。
缺点:数据位置不直观,需要 Docker 命令管理。
适用场景:MySQL,PostgreSQL,Redis,生产环境推荐优先使用 Volume。
2.1、创建名称为 mysql-data 的docker管理卷
docker volume create mysql-data
2.2、查看创建的数卷
docker volume ls
2.3、使用数据卷启动mysql8容器
docker run -d \  --name mysql8 \  -p 39306:3306 \  -e MYSQL_ROOT_PASSWORD="Admin@2026#" \  -e MYSQL_DATABASE=toolbox \  -e MYSQL_USER=appuser \  -e MYSQL_PASSWORD="Abc@123456" \  -v mysql-data:/var/lib/mysql \  mysql:8
2.4、查看数据卷详细挂载路径
docker volume inspect mysql-data
2.5、卸载并删除
docker stop mysql8docker rm mysql8docker volume lsdocker volume rm mysql-data

三、内存挂载(tmpfs Mount)
将数据存放在内存中,不落盘。
特点:数据保存在 RAM 中、容器停止后数据丢失、速度非常快。
优点:高性能、提高安全性(不写磁盘)。
缺点:不是真正意义上的持久化、重启即丢失。
适用场景:缓存、临时文件、敏感数据。
3.1、 宿主机创建挂载目录和配置文件
mkdir -p /opt/nginx/{conf.d,logs}
cat > /opt/nginx/nginx.conf <<'EOF'user  nginx;worker_processes  auto;error_log  /var/log/nginx/error.log warn;pid        /var/run/nginx.pid;events {    worker_connections  10240;}http {    include       mime.types;    default_type  application/octet-stream;    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '                      '$status $body_bytes_sent "$http_referer" '                      '"$http_user_agent" "$http_x_forwarded_for"';    access_log  /var/log/nginx/access.log  main;    sendfile        on;    tcp_nopush     on;    keepalive_timeout  65;    # ========== tmpfs 内存临时缓存目录配置 ==========    client_body_temp_path /var/nginx/client_temp;    proxy_temp_path       /var/nginx/proxy_temp;    fastcgi_temp_path     /var/nginx/fastcgi_temp;    uwsgi_temp_path       /var/nginx/uwsgi_temp;    scgi_temp_path        /var/nginx/scgi_temp;    # 静态资源内存缓存配置    proxy_cache_path /var/nginx/cache levels=1:2 keys_zone=nginx_cache:100m inactive=7d max_size=1G;    gzip  on;    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;    include /etc/nginx/conf.d/*.conf;}EOF
3.2、conf.d 站点配置(http + https)
cat > /opt/nginx/conf.d/demo.conf <<'EOF'
server {    listen 80;    server_name demo.dashboard.com;    return 301 https://$host$request_uri;}
server {    listen 443 ssl http2;    server_name demo.dashboard.com;
    ssl_certificate     /etc/nginx/conf.d/certs/dashboard.com.crt;    ssl_certificate_key /etc/nginx/conf.d/certs/dashboard.com.key;
    location / {        proxy_pass http://192.168.100.200:31080;
        proxy_http_version 1.1;        proxy_set_header Upgrade $http_upgrade;        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;        proxy_set_header X-Real-IP $remote_addr;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;        proxy_set_header X-Forwarded-Proto https;    }}
EOF
3.3、Docker 启动命令
  # tmpfs 内存挂载Nginx所有临时目录,限制最大2G,权限700  --tmpfs /var/nginx:size=2G,mode=700 \  # 配置日志持久化挂载  -/opt/nginx/nginx.conf:/etc/nginx/nginx.conf \  -/opt/nginx/conf.d:/etc/nginx/conf.d \  -/opt/nginx/logs:/var/log/nginx \
docker run -d \  --name nginx-gateway \  --restart always \  -p 80:80 \  -p 443:443 \  --tmpfs /var/nginx:size=2G,mode=700 \  -v /opt/nginx/nginx.conf:/etc/nginx/nginx.conf \  -v /opt/nginx/conf.d:/etc/nginx/conf.d \  -v /opt/nginx/logs:/var/log/nginx \  nginx:stable-alpine
3.4、访问域名查看界面
3.5、卸载
docker stop nginx-gatewaydocker rm nginx-gateway

四、数据卷容器(Data Volume Container)
通过一个专门的容器管理数据。
优点:多容器共享数据方便。
缺点:已经比较老旧、被 Named Volume 基本替代。
适用场景:有老项目还在使用维护。
4.1、创建数据卷容器(只做数据存储,不启动业务)
docker create \--name nginx-data \-v /etc/nginx \-v /var/log/nginx \busybox
4.2、把宿主机现有的证书、配置拷贝到数据卷容器中
# 拷贝宿主机配置目录到数据卷容器docker cp /opt/nginx/nginx.conf nginx-data:/etc/nginx/nginx.confdocker cp /opt/nginx/conf.d/. nginx-data:/etc/nginx/conf.d/
4.3、Nginx 业务容器通过 --volumes-from 挂载数据卷容器
# 从数据卷容器挂载所有声明的卷,不用再写宿主机-v路径--volumes-from nginx-data \
docker run -d \--name nginx-gateway \-p 80:80 \-p 443:443 \--volumes-from nginx-data \nginx
4.4、访问验证
4.5、多容器共享同一份数据(扩展)
如果后续部署多个 Nginx 实例,直接复用数据卷容器即可:两个 Nginx 共用一套配置、证书、日志目录。
docker run -d \--name nginx-gateway2 \-p 8080:80 -p 8443:443 \--volumes-from nginx-data \nginx
https://demo.dashboard.com:8443/
4.6、卸载
docker stop nginx-gateway nginx-gateway2docker rm -f nginx-gatewaydocker rm -f nginx-gateway2docker rm -f nginx-data

五、网络存储(NFS,分布式存储)
可以把 Volume 映射到远程存储。
优点:多节点共享数据、容器迁移方便、支持高可用。
缺点:网络依赖、配置复杂、
适用场景:集群部署、Kubernetes。
Docker 原生支持创建 NFS Volume,比直接挂载 /mnt/nfs 更优雅,容器迁移也方便。
[root@nfs-server logs]# exportfs -v/datah/nfs_share        192.168.100.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,insecure,no_root_squash,no_all_squash)

5.1、创建NFS挂载
docker volume create \  --driver local \  --opt type=nfs \  --opt o=addr=192.168.100.205,nolock,soft,rw \  --opt device=:/datah/nfs_share \  nfs_data
5.2、查看
docker volume lsdocker volume inspect nfs_data
5.3、在 NFS 服务端创建目录
mkdir -p /datah/nfs_share/nginx/conf.dmkdir -p /datah/nfs_share/nginx/htmlchmod -R 777 /datah/nfs_share/nginx
5.4、创建两个 volume
docker volume create \--driver local \--opt type=nfs \--opt o=addr=192.168.100.205,nolock,soft,rw \--opt device=:/datah/nfs_share/nginx/conf.d \nginx_conf
docker volume create \--driver local \--opt type=nfs \--opt o=addr=192.168.100.205,nolock,soft,rw \--opt device=:/datah/nfs_share/nginx/html \nginx_html
5.5、启动nginx
docker run -d \--name nginx \-p 80:80 \-v nginx_conf:/etc/nginx/conf.d \-v nginx_html:/usr/share/nginx/html \nginx:latest
5.6、访问验证
http://192.168.100.203/

5.7、卸载
[root@node ~]# docker stop nginxnginx[root@node ~]# docker rm nginxnginx[root@node ~]# docker volume rm nginx_htmlnginx_html[root@node ~]# docker volume rm nginx_confnginx_conf[root@node ~]# docker volume rm nfs_datanfs_data[root@node ~]# docker volume ls
总结
方式
数据保存位置
容器删除后数据
推荐程度
Bind Mount
宿主机目录
保留
⭐⭐⭐
Volume
Docker 管理目录
保留
⭐⭐⭐⭐⭐
tmpfs
内存
丢失
数据卷容器
Docker 管理
保留
⭐⭐
NFS/Ceph
网络存储
保留
⭐⭐⭐⭐⭐

原文来源:运维攻坚

0

评论 (0)

取消