Docker数据卷

65 阅读3分钟

什么是虚拟化?

如果要对物理资源进行管理,第一步就是“虚拟化”。虚拟化是云计算的基础。简单来说虚拟化就是在一台物理服务器上,运行多台“虚拟服务器”。这种虚拟服务器,也叫虚拟机。

什么是容器?

基于硬件级虚拟化技术的缺点和不足,后续又发展出来另一种虚拟化技术,即操作系统级别的虚拟化技术。操作系统级虚拟化是运行在操作系统之上的虚拟化技术,它模拟的是运行在一个操作系统上的多个不同进程,并将其封闭在一个密闭的容器内,该技术也就被称之为容器化技术。

容器和虚拟化的区别

容器是将代码和环境打包在一起的一个集合,而虚拟机是在物理层面上分离出来的一个操作系统;多个容器可以运行在同一台硬件服务器上,并共享一个操作系统的内核资源。多个虚拟机也可以运行在同一台服务器上,但每个虚拟机都需要有一个完整的操作系统。

docker数据卷

当我们在使用docker容器的时候,会产生一系列的数据文件,这些数据文件在我们删除docker容器时是会消失的,但是其中产生的部分内容我们是希望能够把它给保存起来另作用途的,Docker将应用与运行环境打包成容器发布,我们希望在运行过程钟产生的部分数据是可以持久化的的,而且容器之间我们希望能够实现数据共享。

通俗地来说,docker容器数据卷可以看成使我们生活中常用的u盘,它存在于一个或多个的容器中,由docker挂载到容器,但不属于联合文件系统,Docker不会在容器删除时删除其挂载的数据卷。

特点:

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

容器中的管理数据主要有两种方式:

  • 数据卷:Data Volumes 容器内数据直接映射到本地主机环境
  • 数据卷容器:Data Volume Containers 使用特定容器维护数据卷

挂载命令

docker run -v /宿主机绝对路径目录:/容器内目录 镜像名

示例:

docker run -itd --name mysql --restart always --privileged=true -p 3306:3306 -e
MYSQL_ROOT_PASSWORD=admin -v /data/mysql:/var/lib/mysql mysql:5.7.31

数据覆盖问题

  • 如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中
  • 如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录会显示数据卷中的数据。如果原来容器中的目录有数据,那么原始数据会被隐藏掉

容器目录权限:

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

例如:

docker run -d -P --name nginx05 -v lagouedu2:/etc/nginx:rw nginx

cp命令

docker cp:用于容器与主机之间的数据拷贝

#宿主机文件复制到容器内
docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH

#容器内文件复制到宿主机
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH

宿主机的index.html页面覆盖容器内的index.html页面

docker cp /data/index.html nginx:/usr/share/nginx/html/index.html

容器内文件复制到宿主机

docker cp nginx:/etc/nginx/nginx.conf /data

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 3 天,点击查看活动详情