Docker容器数据卷入门教程(超详细)

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: docker的理念将运行的环境打包形成容器运行,运行可以伴随容器,但是我们对数据的要求是希望持久化,容器之间可以共享数据,Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据作为容器的一部分保存下来,那么当容器被删除之后,数据也就没了。为了能够保存数据,在docker容器中使用卷。

概念

什么是数据卷?

docker的理念将运行的环境打包形成容器运行,运行可以伴随容器,但是我们对数据的要求是希望持久化,容器之间可以共享数据,Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据作为容器的一部分保存下来,那么当容器被删除之后,数据也就没了。为了能够保存数据,在docker容器中使用卷。
卷就是目录或者文件,存在于一个或者多个容器中,但是不属于联合文件系统,因此能够绕过Union File System提供一些用于持久化数据或共享数据的特点。

功能及特点

卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。
数据卷特点:

  1. 数据卷可在容器之间共享或重用数据
  2. 数据卷中的更改可以直接生效
  3. 数据卷中的更改不会包含在镜像的更新中
  4. 数据卷的生命周期一直持续到没有容器使用它为止

使用数据卷

注意:所有docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/xxxx/_data

方法一 直接使用命令挂载

命令:docker run -it -v 主机目录:容器内目录

启动容器

ubuntu@VM-4-3-ubuntu:~$ sudo docker run -it --name="centos01" -v /home/docker-centos:/home centos

启动后通过命令 docker inspect 容器id查看具体信息
在这里插入图片描述
测试文件的同步
在这里插入图片描述
进一步测试,进行以下操作

  1. 停止正运行的docker容器
  2. 在宿主机上修改文件test.java,写入hello docker from docker-centos
  3. 启动刚刚停止的容器
  4. 查看容器内的数据是否会同步

在这里插入图片描述
总结:容器的持久化和同步操作,容器间也可共享

方法二 匿名挂载

命令:docker run -it -v 容器内路径

以nginx为列,启动容器docker run -d -P --name nginx01 -v /etc/nginx nginx

容器启动后,使用命令doocker inspect 容器id查看一下元数据,可以看到卷的位置如下图
在这里插入图片描述

方法三 具名挂载

命令:docker run -it -v 卷名:容器内路径

启动容器 docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
使用命令doocker inspect 容器id查看一下元数据,可以看到卷的位置如下图
在这里插入图片描述
总结
如何确定试具名挂载还是匿名挂载,还是指定路径挂载

-v 容器内路径                            #匿名挂载
-v 卷名:容器内路径                              #具名挂载
-v /宿主机路径:容器内路径                 #指定路径挂载

扩展(读写权限)

通过 -v 容器内路径:ro rw改变读写权限

ro  readonly   #只读
rw  readwrite  #可读可写

#一旦这个设置了容器权限,容器对挂载出来的内容就限定了
$ sudo docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
$ sudo docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx

只要设置了ro说明这个路径只有通过宿主机来操作,容器内无法操作


数据卷容器

可实现多个容器的数据同步,比如多个mysql数据库同步数据

准备

  1. 启动一个centos容器,命名为bbx-centos01,做为父容器
  2. 创建两个新文件夹volume01volume02

这里的bbx-centos是在原有centos镜像制作的

在这里插入图片描述
启动子容器bbx-centos02继承 --volumes-from父容器bbx-centos01
在这里插入图片描述

测试
1.在centos01中volume01创建一个docker的文件,看centos02是否同步
2.在centos02中volume01创建一个docker2的文件,看centos01是否同步

在这里插入图片描述

容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用

目录
相关文章
|
2天前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
21 5
|
6天前
|
运维 Cloud Native 云计算
云原生之旅:Docker容器化实战
本文将带你走进云原生的世界,深入理解Docker技术如何改变应用部署与运维。我们将通过实际案例,展示如何利用Docker简化开发流程,提升应用的可移植性和伸缩性。文章不仅介绍基础概念,还提供操作指南和最佳实践,帮助你快速上手Docker,开启云原生的第一步。
|
4天前
|
关系型数据库 MySQL Java
【Docker最新版教程】一文带你快速入门Docker常见用法,实现容器编排和自动化部署上线项目
Docker快速入门到项目部署,MySQL部署+Nginx部署+docker自定义镜像+docker网络+DockerCompose项目实战一文搞定!
|
3天前
|
开发者 Docker Python
从零开始:使用Docker容器化你的Python Web应用
从零开始:使用Docker容器化你的Python Web应用
10 1
|
7天前
|
运维 持续交付 虚拟化
深入解析Docker容器化技术的核心原理
深入解析Docker容器化技术的核心原理
26 1
|
9天前
|
机器学习/深度学习 数据采集 Docker
Docker容器化实战:构建并部署一个简单的Web应用
Docker容器化实战:构建并部署一个简单的Web应用
|
9天前
|
JavaScript 开发者 Docker
Docker容器化实战:构建并部署一个简单的Web应用
Docker容器化实战:构建并部署一个简单的Web应用
|
6天前
|
存储 运维 数据中心
使用Docker容器化应用程序的优势与挑战
使用Docker容器化应用程序的优势与挑战
11 0
|
8天前
|
Java Docker 微服务
利用Docker容器化部署Spring Boot应用
利用Docker容器化部署Spring Boot应用
33 0
|
12天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
51 2
下一篇
无影云桌面