Docker之数据的可持续化

本文介绍了Docker中数据卷(Volumes)的使用,包括Volumes的优势、常见操作,如创建、管理、在多容器环境中共享数据的方法,以及如何利用Volumes进行数据备份和迁移。通过Volumes,可以实现Docker容器数据的高效、安全和持久化管理。
摘要由CSDN通过智能技术生成

1 前言

Docker初体验一文中我们介绍了Docker的基本概念,之后我们又分享了如何教你成功在Win10系统中运行docker使用GitHub Action自动构建和推送Docker镜像,尝试过的朋友应该可以在Docker中为自己的程序代码创建镜像,运行容器,或是在Github Action中使用Docker等基本操作。今天,我们将说说如何Docker中持续化管理数据--数据卷(Volumes)的使用。

2 管理数据的必要性

初次体验Docker的人可能会发现,每当我们重启容器时,之前的数据都会丢失,又或是感觉数据很难转移。这些都是因为Docker的默认设置会将所有的文件都创建在一个容器中的某些可读容器层。换句话说,一个容器的数据是独立不能共享的,为了实现数据共享和数据迁移,就需要我们使用一些方法可持续化地管理数据。

3 关于Volumes

3.1 优势

Volumes是一种由Docker创建并维护的数据管理机制。如下图所示,它最大的特点是将文件存放在Docker主机内,是不允许其他程序的访问,在不同容器间共享数据时具有较高的安全性;且可直接用Docker命令进行数据备份和数据迁移。除此之外,Volumes在Docker Desktop的表现性能比其他方式更加出色,这也是官方最推荐的方式。

来自:Docker官方文档

3.2 Volumes常见操作

这里参考官方文档[1],我们介绍几种不同情况下对Volumes的使用。

1.我们可通过以下基本命令创建及管理Volumes:

# 创建volumes并命名 my-vol
docker volume create my-vol

# Volumes列表
docker volume ls

# 查看Volumes特性
docker volume inspect my-vol

# 移除Volumes
docker volume rm my-vol

# 移除所有Volumes
docker volume prune

2.可在启动容器时指定Volumes:

## 运行devtest容器
## 并将容器myvol2挂在/app目录中
 docker run -d \
  --name devtest \
  -v myvol2:/app \
  nginx:latest

3.当建立多容器服务的时候,开发者往往会选择docker compose这一多容器管理的工具,并编写好docker-compose.yml文件。一方面,此文件可以帮助我们将所有容器的配置参数融合在一个file里面统一管理,另外一方面它可以帮助多容器的服务快速启动或终止,这里我们不详细介绍yml文件的每个参数,而着重说一下如何在此文件中定义Volumes。

version: "3.9"
services:
  frontend:
    image: node:lts
    volumes:
      - myapp:/home/node/app
volumes:
  myapp:
    external: true

这里的两个volumes设定,第一个是设置services的volumes,名为myapp,路径是储存在/home/node/app下,第二个顶级volumes中的设置是为了实现多个容器的共享,比如这里就是设置myapp可以被所有容器共享。

4.使用已存在的容器数据为新的容器创建Volumes。这里新容器名为nginxtest,新Volumes命名为nignx-vol,其数据来源的路径是/usr/share/nginx/html

 docker run -d \
  --name=nginxtest \
  -v nginx-vol:/usr/share/nginx/html \
  nginx:latest

在此基础上,你也可以通过添加ro来设置只读权限,这样可以防止其他人在共享容器数据时的误删或其他失误。

 docker run -d \
  --name=nginxtest \
  -v nginx-vol:/usr/share/nginx/html:ro \
  nginx:latest

5.Volumes还可以运用在数据备份,数据迁移的场景中。

首先,我们创建一个名dbstore的容器且带有Volumesdbdata

docker run -v /dbdata --name dbstore ubuntu /bin/bash

第二步,为这个容器的Volumes进行备份,利用--volumes-from指定容器的来源,指定将dbdata备份到路径/backup下的backup.tar文件中:

docker run --rm --volumes-from dbstore -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata

接下来,迁移上一步已经备份好的容器数据, 需要创建一个新的容器dbstore2

docker run -v /dbdata --name dbstore2 ubuntu /bin/bash

最后,再从backup.tar文件中迁移到新的容器中:

 docker run --rm --volumes-from dbstore2 -v $(pwd):/backup ubuntu bash -c "cd /dbdata && tar xvf /backup/backup.tar --strip 1"

4 总结

当部署服务时,功能的开发是一方面,数据的可持续化管理也是必不可少的一个部分。希望这篇文章可以帮助你在使用Docker Volume时选择合适的命令来管理容器中的数据。

欢迎各位小伙伴留言讨论!

参考资料

[1]

Docker Volumes: https://docs.docker.com/storage/volumes/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值