Docker容器数据持久化与镜像管理实战指南

Docker容器数据持久化与镜像管理实战指南

formacion Documentación para formarse en docker formacion 项目地址: https://gitcode.com/gh_mirrors/fo/formacion

前言

在Docker容器技术中,数据持久化和镜像管理是两个至关重要的核心概念。本文将深入探讨Docker卷(Volumes)的使用方法、不同类型卷的特点,以及如何有效地存储和分发Docker镜像。

Docker卷基础概念

什么是Docker卷?

Docker卷是Docker容器中用于持久化数据的核心机制。它们本质上是宿主机文件系统中的目录,能够独立于容器的生命周期而存在。当容器被删除或重建时,卷中的数据不会丢失。

为什么需要卷?

  • 数据持久化:确保应用数据不会因容器重启或重建而丢失
  • 数据共享:多个容器可以访问同一份数据
  • 开发效率:开发过程中可以实时查看代码变更
  • 日志管理:集中存储和查看日志文件
  • 备份恢复:方便进行数据备份和恢复操作

Docker卷类型详解

1. 匿名卷(Anonymous Data Volumes)

匿名卷是在创建容器时未指定名称自动生成的卷。例如:

docker run -ti --rm -v /data alpine:3.4 sh

其他容器可以通过--volumes-from参数挂载这个匿名卷:

docker run -ti --rm --volumes-from adoring_lovelace alpine:3.4 sh

2. 命名卷(Named Data Volumes)

命名卷是独立于容器的持久化存储,可以通过以下方式创建:

docker volume create --name vol1

或者直接在运行容器时创建:

docker run -ti --rm -v vol2:/data alpine:3.4 true

查看现有卷:

docker volume ls

命名卷不会自动删除,需要手动清理:

docker volume rm vol1

3. 绑定挂载卷(Mounted Volumes)

绑定挂载允许将宿主机目录或文件直接挂载到容器中:

docker run -ti --rm -v /etc/hostname:/root/parent_name:ro -v /opt/:/data alpine:3.4 sh

其中:ro表示只读挂载,默认是可读写。

卷管理实战技巧

创建和管理卷

创建命名卷:

docker volume create mis_datos

查看卷详细信息:

docker volume inspect mis_datos

删除卷:

docker volume rm mis_datos

容器使用卷示例

将命名卷挂载到容器中的MySQL数据目录:

docker run -d -it --name ubu1 -v mis_datos:/var/lib/mysql ubuntu:17.10

使用当前目录下的data文件夹:

docker run -d -v $(pwd)/data:/data awesome/app bootstrap.sh

服务中使用卷

在Docker服务中使用共享卷:

docker service create -d --replicas=4 --name web-service --mount source=mis_datos,target=/app ubuntu:17.10

只读卷设置

docker run -d -it --name ubu1 -v mis_datos:/var/lib/mysql:ro ubuntu:17.10

绑定挂载实践

将宿主机目录挂载到容器:

docker run -d -it --name ubu2 -v /var/lib/mysql2:/var/lib/mysql ubuntu:17.10

使用相对路径:

docker run -d -it --name ubu2 -v "$(pwd)"/datos:/var/lib/mysql ubuntu:17.10

临时文件系统(TMPFS)

使用内存作为临时存储:

docker run -d -it --name ubu3 --tmpfs /var/html/tempo ubuntu:17.10

限制临时文件系统大小:

docker run -d -it --name ubu3 --tmpfs /var/html/tempo:size=999bytes ubuntu:17.10

Docker镜像存储与分发

推送镜像到仓库

  1. 登录Docker镜像仓库:
docker login
  1. 构建并标记镜像:
docker build --tag usuariologin/scratch-example:latest .
  1. 推送镜像:
docker image push usuariologin/scratch-example:latest

搭建私有仓库

  1. 拉取Registry镜像:
docker image pull registry:2
  1. 运行Registry容器:
docker container run -d -p 5000:5000 --name registry registry:2
  1. 标记并推送镜像到私有仓库:
docker image tag alpine localhost:5000/localalpine
docker image push localhost:5000/localalpine

容器与卷的备份恢复

备份容器

  1. 创建容器快照:
docker commit my-app my-app_backup
  1. 导出为tar文件:
docker save -o my-app_backup.tar my-app_backup
  1. 删除临时镜像:
docker image rm my-app_backup

备份卷数据

  1. 停止容器:
docker container stop my-app
  1. 创建卷数据备份:
docker run --rm -it -v vol-my-app:/volume -v /tmp:/backup debian:stable-slim \
tar -cf /backup/vol-my-app.tar -C /volume ./
  1. 重启容器:
docker container start my-app

恢复容器

  1. 加载备份的镜像:
docker load < my-app_backup.tar
  1. 创建新卷:
docker volume create vol-my-app
  1. 恢复卷数据:
docker run --rm -it -v vol-my-app:/volume -v /tmp:/backup debian:stable-slim \
sh -c "rm -rf /volume/* /volume/..?* /volume/.[!.]* ; tar -C /volume/ -xf /backup/vol-my-app.tar"
  1. 启动恢复的容器:
docker run -d --restart unless-stopped --name my-app -v vol-my-app:/var/lib/my-app -p 8888:8888/tcp my-app_backup

高级存储方案

Docker支持多种高级存储后端:

  • Azure文件存储
  • Google云存储(GCS)
  • Amazon S3
  • OpenStack Swift
  • Ceph存储
  • NFS共享存储

例如,使用NFS卷:

docker service create --name nfstest \
--mount type=volume,volume-opt=o=addr=192.168.1.111,volume-opt=device=:/DATA/NFS,volume-opt=type=nfs,source=DATA_NFS,target=/DATA,readonly=false \
--replicas 1 busybox ping www.google.es

总结

通过本文,我们全面了解了Docker卷的各种类型及其应用场景,掌握了镜像的存储和分发方法,并学习了容器和数据的备份恢复技术。这些知识对于构建可靠、可维护的Docker化应用至关重要。合理使用卷和镜像管理技术,可以显著提高容器化应用的稳定性和可移植性。

formacion Documentación para formarse en docker formacion 项目地址: https://gitcode.com/gh_mirrors/fo/formacion

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓬玮剑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值