docker--持久化存储

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: docker--持久化存储

前戏


假设我们启动了一个 mysql 容器,我们添加的数据都是在容器里面的,当容器挂掉之后我们的数据也会丢失。我们可以把容器内部的数据存放到宿主机上,当容器挂掉之后也不影响我们的数据。

可以在执行 Docker create 或者 docker run 时,通过 -v 参数 将主机的目录作为容器的数据卷,这部分的功能是基于本地文件系统的 volume 管理。


数据持久化 Data Volume


如果你看过 mysql 的 Dockerfile,里面有一行是这样的 VOLUME [/var/lib/mysql] ,意思就是启动一个 mysql 的容器时,会将容器里面的 /var/lib/mysql 里的文件挂载到宿主机上

启动 mysql5.7 的镜像

docker run -d --name mydb -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:5.7

-e MYSQL_ALLOW_EMPTY_PASSWORD=true 表示密码可以为空

查看 volume

docker volume ls

上面的 VOLUME NAME 对应的我们挂载的名字,那他的路径是在哪里?我们可以通过 docker volume inspect <VOLUME NAME>来查看

docker volume inspect 自己的VOLUME NAME

如果删除容器,volume 是不会删除的

删除 volume,通过 docker volume rm <VOLUME NAME>

docker volume rm 6c6de0ab3191ee293b

这个默认的 VOLUME NAME 太不好记了,我们也可以在启动容器的时候,加个 -v 参数自己指定

docker run -d --name mydb -v mysql:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:5.7

其中的 mysql 就是 VOLUME NAME 的值,:后面的是 mysql 容器里存放数据的地方

我们进入到容器内部创建一个 zouzou 的数据库

docker exec -it mydb /bin/bash
mysql -uroot -p

删除 mydb 容器,在创建一个新的 mysql 容器,指定 -v 参数,挂载到之前 VOLUME NAME 为 mysql 的上面

进入到容器内部,查看刚才我们新建的 zouzou 数据库是否存在

可以看到,我们创建的 zouzou 数据库是存在的,这样的话,当我们的容器出现事故之后,只需要重新启动一个,挂载到之前的 VOLUME NAME 上就可以了


数据持久化 Bind Mouting


data volume 需要在 Dockerfile 定义 Volume

bind mounting 只需要 -v 指明 容器外部文件夹和容器映射文件夹的对应关系即可 将本地的文件映射到容器内

还是用mysql镜像举例,使用 bind mouting

docker run -d --name db -v /tmp/test:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:5.7

进入到宿主机的/tmp/test目录下。ls

bind mouting还有一个好处,我们可以把宿主机的代码挂载到容器内部,当我们修改宿主机的代码之后,就可以看到效果了,方便我们调试代码


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
存储 关系型数据库 MySQL
Docker的持久化存储和数据共享(四)
有些容器会自动产生一些数据,为了不让数据随着 container 的消失而消失,保证数据的安全性。例如:数据库容器,数据库的表会产生一些数据,如果我把 container 给删除,数据就丢失。为了保证数据不丢失,这就有了 Volume 的存在。
Docker的持久化存储和数据共享(四)
|
存储 Docker 容器
Docker - 数据持久化存储 Data Volume & Bind Mount
Docker - 数据持久化存储 Data Volume & Bind Mount
115 0
|
存储 关系型数据库 数据库
生产环境中Docker的持久化存储模式
本文讲的是生产环境中Docker的持久化存储模式【编者的话】在生产环境中使用Docker实现持久化存储一直是业界的热点问题,本文从到配置文件、机密材料、数据库、共享数据等方面做了些探讨,文中也谈到了一些需要避免的问题以及尽量将应用设计为无状态服务的原则。
2392 0
|
5天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
23 2
|
3天前
|
运维 Cloud Native 虚拟化
一文吃透云原生 Docker 容器,建议收藏!
本文深入解析云原生Docker容器技术,涵盖容器与Docker的概念、优势、架构设计及应用场景等,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
一文吃透云原生 Docker 容器,建议收藏!
|
11天前
|
关系型数据库 MySQL API
|
7天前
|
运维 持续交付 Docker
深入理解Docker容器化技术
深入理解Docker容器化技术
|
4天前
|
缓存 监控 开发者
掌握Docker容器化技术:提升开发效率的利器
在现代软件开发中,Docker容器化技术成为提升开发效率和应用部署灵活性的重要工具。本文介绍Docker的基本概念,并分享Dockerfile最佳实践、容器网络配置、环境变量和秘密管理、容器监控与日志管理、Docker Compose以及CI/CD集成等技巧,帮助开发者更高效地利用Docker。
|
5天前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?
|
5天前
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用