前端小记 前端小记
首页
  • 前端文章

    • HTML
    • CSS
    • JavaScript
    • Vue
  • 学习笔记

    • 《Vue》踩坑笔记
    • TypeScript学习笔记
    • 小程序笔记
    • JavaScript设计模式笔记
  • 工具
  • CentOS
  • Java
  • Docker
  • Linux
  • Maven
  • MySQL
  • 其他
  • 技术文档
  • GitHub部署及推送
  • Nodejs
  • 博客搭建
  • Fullpage全屏轮播插件
  • svn
  • 学习
  • 系统重装
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

sweetheart

前端小记
首页
  • 前端文章

    • HTML
    • CSS
    • JavaScript
    • Vue
  • 学习笔记

    • 《Vue》踩坑笔记
    • TypeScript学习笔记
    • 小程序笔记
    • JavaScript设计模式笔记
  • 工具
  • CentOS
  • Java
  • Docker
  • Linux
  • Maven
  • MySQL
  • 其他
  • 技术文档
  • GitHub部署及推送
  • Nodejs
  • 博客搭建
  • Fullpage全屏轮播插件
  • svn
  • 学习
  • 系统重装
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • centos

  • java

  • docker

    • Docker三要素
    • CentOS7及6安装Docker
    • Docker配置阿里云镜像加速
    • 启动Docker容器测试helloworld及Docker和虚拟机的区别
    • Docker常见帮助命令、镜像命令、容器命令
    • Docker镜像原理
    • Docker镜像commit
    • Docker容器数据卷
      • 1.引入原因
      • 2.卷的目的及其特点
      • 3.作用
      • 4.容器内添加数据卷
        • 方式一:直接命令添加
        • 方式二:DockerFile 添加
      • 5.数据卷容器
    • Docker安装MySQL
    • Docker安装Redis
  • Linux

  • maven

  • MySQL

  • 其他

  • 后端
  • docker
sweetheart
2019-11-28
目录

Docker容器数据卷

# Docker 容器数据卷

# 1.引入原因

Docker 容器产生的数据,如果不通过 docker commit 生成新的镜像,使得数据作为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了。

将运用与运行的环境打包形成容器运行,运行可以伴随着容器,但是我们对数据的要求希望是持久化的。

容器之间希望有可能共享数据。

为了能保存数据在 docker 中使用卷。

# 2.卷的目的及其特点

  卷就是目录或者文件,存在于一个或多个容器中,由docker挂载到容器,但是不属于联合文件系统,因此能够绕过 Union File Ssystem 提供一些用于持续存储或共享数据的特性。
  卷的设计目的就是为了数据的持久化,完全独立于容器的生存周期,因此Docker不会再容器删除时删除其挂载的数据卷。

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

# 3.作用

  1:容器的持久化
  2:容器间继承+共享数据
1
2

# 4.容器内添加数据卷

# 方式一:直接命令添加

//命令
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
例如:
docker run -it -v /myDataVolume:/dataVolumeContainer 镜像名
//查看数据卷是否挂载成功
docker inspect 308d75b6301
//容器和宿主机之间数据共享
//容器停止退出后,主机修改后数据是否同步
    完全同步
//命令(带权限),容器内的目录只读
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
1
2
3
4
5
6
7
8
9
10
11

# 方式二:DockerFile 添加

//根目录下新建mydocker文件夹进入
mkdir /mydocker
cd /mydocker

//可在DockerFile中使用VOLUME指令来给镜像添加一个或多个数据卷
//VOLUME指令:
VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"]
处于可移植性和分享的考虑,用-v主机目录:容器目录这种方法不能够直接在Dockerfile中实现
由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录

//File构建
vim Dockerfile
//输入的示例脚本内容为:
# volume test
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finished,--------success1"
CMD /bin/bash

//build后生成镜像
docker build -f /mydocker/Dockerfile  -t gg/centos .
//执行成功后会出现Successfullu built xxxx  ,执行 docker images 会出现自己刚才生成的镜像 gg/centos

//run容器
docker run -it gg/centos

//主机对应默认地址
"Type": "volume",
            "Name": "e640ae814d532dc7d59dd77c4207290daf78d3cf8af58df7980bbbb159854f5f",
            "Source": "/var/lib/docker/volumes/e640ae814d532dc7d59dd77c4207290daf78d3cf8af58df7980bbbb159854f5f/_data",
            "Destination": "/dataVolumeContainer1",
            "Driver": "local",
            "Mode": "",
            "RW": true,
            "Propagation": ""

/var/lib/docker/volumes/e640ae814d532dc7d59dd77c4207290daf78d3cf8af58df7980bbbb159854f5f/_data
//此地址即为默认的地址,在此地址内进行相应的操作,也可以实现文件共享。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

# 5.数据卷容器

命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器。

    //以上一步新建的镜像 gg/centos 为模板并运行容器dc01/dc02/dc03
    它们已经具有容器卷:/dataVolumeContainer1
                    /dataVolumeContainer2

    容器间传递共享(--volumes-from)
      //先启动一个父容器 (在dataVolumeContainer2中新增内容)

      //dc02/dc03继承自dc01
      docker run -it --name dc02 --volumes-from dc01 gg/centos
      cd dataVolumeContainer2
      ls -l   //可以看到dc01_add.txt
      touch dc02_add.txt   //在此容器的此目录下添加dc02_add.txt文件

      docker run -it --name dc03 --volumes-from dc01 gg/centos
      cd dataVolumeContainer2
      ls -l   //可以看到dc01_add.txt,dc02_add.txt
      touch dc03_add.txt   //在此容器的此目录下添加dc03_add.txt文件

      //回到dc01可以看到02/03各自添加的都能共享了
      docker attach dc01
      ls -l  //可以看到dc01_add.txt,dc02_add.txt,dc03_add.txt

      //删除dc01,dc02修改后dc03可否访问
      可以正常访问,并且执行 ls -l 可以看到上面的三个文件

      //删除dc02后dc03可否访问
      可以访问,并且删除dc01后在dc02中的文件操作依旧和dc03共享

      //新建dc04继承dc03后在删除dc03
      dc04依旧能正常访问,并且可以对上面的文件共享

      //结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
完善页面 (opens new window)
上次更新: 2024-11-28 17:23:47
Docker镜像commit
Docker安装MySQL

← Docker镜像commit Docker安装MySQL→

最近更新
01
git常用操作手册
12-26
02
常用的前端工具库
12-19
03
前端构建工具
12-19
更多文章>
前端小记 版权所有 | Copyright © 2021-2024
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式