Docker | 容器数据卷详解

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: Docker | 容器数据卷详解

什么是容器数据卷


从docker的理念说起,docker将应用和环境打包成一个镜像,运行镜像(生成容器)就可以访问服务了。


  • 如果数据都存在容器中,那么删除容器,数据就会丢失!需求:数据可以持久化


  • MySQL容器删了,就相当于删库了。需求:MySQL数据可以本地存储


容器之间可以有一个数据共享的技术,docker容器产生的数据同步到本地或者别的地方。


这就是数据卷技术,就是目录挂载,将容器内的目录,挂载到虚拟机上或者Linux上

image.png

**目的:**实现容器数据的持久化和同步操作。容器间也可以数据共享


数据的覆盖问题


  1. 如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中。


  1. 如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录中会显示数据卷中的数据。如果原来容器中的目录中有数据,那么这些原始数据会被隐藏掉。


这两个规则都非常重要,灵活利用第一个规则可以帮助我们初始化数据卷中的内容。掌握第二个规则可以保证挂载数据卷后的数据总是你期望的结果。


使用数据卷


方式一:直接使用命令挂载 -v


docker run -it -v 主机目录:容器内目录
docker run -it -v /home/test:/home centos /bin/bash

docker inspect 命令查看容器信息

image.png


测试挂载卷


1、在容器内部修改文件同步到Linux主机上


进入容器,在/home目录下创建123.sh文件

image.png

主机内可以查看在容器内部创建的文件

image.png


2、同样地,在Linux上修改挂在卷文件可以同步到容器内部


image.png


3、停止容器,修改Linux主机上的文件,同步到容器内


# 1、停止容器
exit
# 2、查看容器是否还在运行
docker ps
# 3、在Linux主机上修改对应目录的文件
# 4、启动容器并查看
  # 4.1、 查看历史运行的容器
  docker ps -a
  # 4.2、 启动容器
  docker start CONTAINER ID
  # 4.3、 进去容器
  docker attach CONTAINER ID
  # 4.4、 查看数据卷文件



方式二:Dockerfile文件


请查看下一章节


数据卷命令


docker volume
docker volume --help
Usage:  docker volume COMMAND
Manage volumes
Commands:
  create      Create a volume
  inspect     Display detailed information on one or more volumes
  ls          List volumes
  prune       Remove all unused local volumes
  rm          Remove one or more volumes
Run 'docker volume COMMAND --help' for more information on a command.

image.png


具名挂载/匿名挂载


匿名挂载


-v 容器内路径
-P 自动分配端口号
docker run -d -P --name nginx02 -v /etc/nginx nginx


具名挂载


-v 卷名:容器内路径
docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx nginx

image.png


查看数据卷


方式一:docker inspect 容器ID


image.png


方式二:docker volume inspect juming-nginx


image.png

查看Linux主机docker工作目录 /var/lib/docker

所有docker容器内的卷,没有指定目录的情况下都是存放在 /var/lib/docker/volumes/xxx/_data 目录下

image.png


挂载三种方式


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


扩展


给挂载的数据卷增加读写权限控制


通过 -v 容器内路径, rorw 改变读写权限


  • ro readonly   只读
  • rw readwrite  可读写
# 一旦设置了容器权限,容器对我们挂载出来的内容就有限定了
docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx:rw nginx

ro : 说明这个路径只能通过宿主机来操作,容器内无法操作


目录
相关文章
|
9天前
|
边缘计算 物联网 开发者
什么是容器Docker?
什么是容器?容器,也叫Docker,是一个开源的容器化平台,用于开发、测试和部署应用程序。通过将软件打包为标准化的单元(容器),使得应用程序可以在任何地方一致地运行,不论是在开发者的本地机器上,还是在云计算平台上。Docker容器包含了应用程序运行所需的一切,包括代码、运行时、系统工具、系统库等,从而解决了“在我这里可以正常工作,但在服务器上不行”的问题。
32 1
|
13天前
|
安全 关系型数据库 开发者
Docker Compose凭借其简单易用的特性,已经成为开发者在构建和管理多容器应用时不可或缺的工具。
Docker Compose是容器编排利器,简化多容器应用管理。通过YAML文件定义服务、网络和卷,一键启动应用环境。核心概念包括服务(组件集合)、网络(灵活通信)、卷(数据持久化)。实战中,编写docker-compose.yml,如设置Nginx和Postgres服务,用`docker-compose up -d`启动。高级特性涉及依赖、环境变量、健康检查和数据持久化。最佳实践涵盖环境隔离、CI/CD、资源管理和安全措施。案例分析展示如何构建微服务应用栈,实现一键部署。Docker Compose助力开发者高效驾驭复杂容器场景。
30 1
|
13天前
|
存储 监控 安全
Docker Compose:轻松实现容器编排的利器
【7月更文挑战第2天】 1. **基础与概念**:服务(多容器实例)、网络(灵活通信)、卷(数据持久化)和配置(安全管理)。 2. **实战指南**:安装Compose,编写`docker-compose.yml`文件,启动应用,并介绍依赖、环境变量、健康检查和数据持久化。 3. **最佳实践**:环境隔离、CI/CD集成、资源管理、日志监控、安全策略及案例分析,展示完整应用栈搭建。
36 1
|
4天前
|
Java 应用服务中间件 持续交付
Java面试题:简述Docker等容器化技术的原理及其在Java应用部署中的作用。
Java面试题:简述Docker等容器化技术的原理及其在Java应用部署中的作用。
11 0
|
11天前
|
存储 JavaScript 容器
TS,添加注释,//,ctrl + /,shift + alt + a,输出语句,console.log(“Hello Ts‘),变量和数据类型导读,变量就是用来存储数据的容器,变量的使用,TS
TS,添加注释,//,ctrl + /,shift + alt + a,输出语句,console.log(“Hello Ts‘),变量和数据类型导读,变量就是用来存储数据的容器,变量的使用,TS
|
11天前
|
存储 语音技术 Python
语音识别,函数综合案例,黑马ATM,/t/t一个对不齐,用两个/t,数据容器入门,数据容器可以分为列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict)
语音识别,函数综合案例,黑马ATM,/t/t一个对不齐,用两个/t,数据容器入门,数据容器可以分为列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict)
|
13天前
|
Docker 容器
docker(四):数据卷
docker(四):数据卷
12 0
|
13天前
|
缓存 Linux 开发工具
docker的centos容器使用yum报错
docker的centos容器使用yum报错
52 0
|
29天前
|
NoSQL 关系型数据库 Redis
Docker的通俗理解和通过宿主机端口访问Redis容器的实例
本文目标:引导初学者入门Docker,理解镜像、容器和宿主机概念,学习常用Docker命令,特别是如何创建并从Redis容器通过宿主机端口访问。 关键点: - Docker核心:镜像(类)、容器(实例)、宿主机(运行环境)。 - `docker pull` 拉取镜像,如 `redis:3.0`。 - `docker run -d --name` 后台运行容器,如 `my-redis`。 - `-p` 参数做端口映射,如 `6379:6379`。 - `docker exec -it` 交互式进入容器,如 `bash` 或执行命令。
113 4
|
26天前
|
前端开发 安全 数据库
Web架构&前后端分离站&Docker容器站&集成软件站&建站分配
Web架构&前后端分离站&Docker容器站&集成软件站&建站分配