docker教程系列五

比特幽影
• 阅读 2515

导航

给docker加上数据持久

数据券介绍

我们可以在概念上把docker看做虚拟机,当容器被删除的时候,容器里所有数据都会被删除,两个不同容器之间无法互通
可以把数据卷理解为虚拟机的虚拟磁盘,他是独立于容器的文件.在容器中他被挂载为一个目录的形式.
对于容器中的应用来说,数据卷是透明的,无法感知它的存在,他就是一个普通的文件夹
由于数据卷独立于容器而存在,因此删除容器的时候数据卷也不会受影响。数据卷有以下优点:

  1. 多容器可以通过挂载同一个数据卷来共享数据
  2. 数据卷可以方便地备份,存储数据

数据卷的相关命令操作

    # 创建一个volume
    docker volume create testvolume

    # 列出所有数据卷
    docker volume ls

    # 删除一个数据卷
    docker volume rm testvolume

在容器中使用数据卷

    # 先创建数据卷
    docker volume create web

    # 在运行容器的时候,使用参数--mount 如下
    # 下面的参数含义是把数据卷(web)挂载到容器的/volume目录上面
    # 这里的webimage 镜像可以用我前面文章写得Dockerfile生成
    # 这样就运行了一个带有数据卷的容器,这个容器的/volume目录中的内容在容器被删除之后仍然存在.
    # 因为它实际上是存在Docker数据卷中。
    docker run -d --name demovolume --mount source=web,target=/volume webimage

以下例子用于演示数据卷保存数据的特性

    # 执行命令在容器的 /b.txt 写入时间内容并查看
    docker exec demovolume sh -c 'date > /b.txt'
    docker exec demovolume sh -c 'cat /b.txt'

    # 删除容器后重新启动一个同名容器在查看,之前容器的内容已经没有了
    docker rm -f demovolume
    docker run -d --name demovolume --mount source=web,target=/volume webimage
    docker exec demovolume sh -c 'cat /b.txt'

    # 保存在数据卷上的文件,即使容器被删除仍然存在
    docker exec demovolume sh -c 'date > /volume/b.txt'
    docker rm -f demovolume
    docker run -d --name demovolume --mount source=web,target=/volume webimage
    docker exec demovolume sh -c 'cat /volume/b.txt'

共享目录

除了挂载数据卷以外,docker还可以挂载共享目录(这一点和虚拟机一样),共享目录的优势是使用方便,易于理解,可以在某些场景下方便使用
(比如开发是在宿主机中修改源代码docker中实时生效省却build镜像的过程)
下面用一个具体的例子来演示挂载共享目录的用法:

  1. 在当前目录下创建index.html

    <!DOCTYPE html>
    <html>
     <head>
         <meta charset="utf-8">
         <title>volume</title>
     </head>
     <body>
         <h1>这是一个在宿主机的 index.html 文件。</h1>
     </body>
    </html>
  2. 打开终端输入

     # 下面的命令会从nginx镜像运行一个名为nginx1的容器
     # 并且设置了8080:80的端口映射
     # --mount 参数的 type=bind 表明要挂载的共享目录
     # 把宿主机的当前目录映射为容器的 /usr/share/nginx/html (这是nginx容器的静态页面文件存放路径)
     # 这样在宿主机中访问localhost:8080会自动访问宿主机当前目录下的index.html文件 (这是nginx的默认静态文件首页)
    
     docker run -p 8080:80 --name nginx1 --mount type=bind,source="${PWD}",target=/usr/share/nginx/html/ nginx
    
     # 需要注意的是source参数必须使用绝对路径
     # 所以这里使用"${PWD}"的方式来在 Mac/Linux/Windows 中获取当前目录路径
     # 这是一个可以在多平台通用的获取当前目录路径的方法 (windows下必须使用PowerShell)
     # 加引号是因为路径中可能含有空格等特殊符号,如果路径有空格而未加引号,会产生错误
  3. 打开浏览器输入: localhost:8080

其他挂载模式

除了挂载整个目录,还可以单独挂载一个文件。 如果要挂载单个文件,一定要要保证宿主机文件存在,否则整个路径会被认为是一个目录挂载

  1. 创建index.html, 随便写点东西
  2. 打开终端输入以下命令

    docker run -p 8081:80 \
     --name nginx2 \
     --mount type=bind,source="${PWD}"/index.html,target=/usr/share/nginx/html/test.html \
     nginx
    
     #  这时候我们访问http://localhost:8081 返回的是nginx的默认首页
     #  而访问http:/localhost:8081/test.html 返回的是挂载的单个文件

    注意:可以创建多文件挂载

     docker run -p 8082:80 \
         --name nginx3 \
         --mount type=bind,source="${PWD}"/index.html,target=/usr/share/nginx/test.html/ \
         --mount type=bind,source="${PWD}"/test.html,target=/usr/share/nginx/test2.html/ \
         nginx
点赞
收藏
评论区
推荐文章
Stella981 Stella981
3年前
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解2016年09月02日00:00:36 \牧野(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593
Stella981 Stella981
3年前
Docker系列之MySQL安装教程
Docker系列之MySQL安装教程!在这里插入图片描述(https://oscimg.oschina.net/oscnet/up290e6ea2ceb61c35d155a02d468e92e5.png)有了前面的基础教程Docker系列之常用命令操作手册(https://www.oschina.net/action/GoToLink?
Stella981 Stella981
3年前
Docker实战笔记:Docker简介(二)
Docker实战笔记:Docker简介(二)博客分类:docker摘要:摘要:此Docker系列学习笔记,根据Reboot教育PC大神的运维自动化部分课程整理而成,补充少量个人理解以及练习日志(部分日志有删减)。PC大神在知乎的专栏:面向工资编程Docker简介(一)Docker简介(二)Docker管理系统(一)Docker管理系统(
Stella981 Stella981
3年前
Docker实践
前言本文并非一篇Docker的入门文章,而是面向对Docker有一定了解的开发人员,文章不会介绍如何安装Docker,以及什么是Docker镜像,什么是Docker容器这些概念,如果需要了解请前往Docker官方文档(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fdoc
Stella981 Stella981
3年前
Docker容器化【Docker镜像与容器相关命令】
\Docker学习目标:掌握Docker基础知识,能够理解Docker镜像与容器的概念完成Docker安装与启动掌握Docker镜像与容器相关命令掌握TomcatNginx等软件的常用应用的安装掌握docker迁移与备份相关命令能够运用Dockerfile编写创建容器的脚本能
Stella981 Stella981
3年前
Docker—微软微服务
容器与Docker简介(一)——微软微服务电子书翻译系列(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.cnblogs.com%2FRobotZero%2Fp%2F7246625.html)容器与Docker简介(二)什么是DOCKER——微软微服务电子书翻译系列(ht
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
3年前
36. docker swarm docker secret 的使用和管理
1.secretmanagement的作用  用来存储其他人不想看到的数据2.secretmanagement   存在swarmmanager节点raftdatabase里。  secret可以assign给一个service(orcontainer),这个sevice就能看到这个secret了 
Stella981 Stella981
3年前
Spring Boot教程(十一) springboot程序构建一个docker镜像
准备工作环境:linux环境或mac,不要用windowsjdk8maven3.0docker对docker一无所知的看docker教程(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.runoob.com%2Fdoc
Stella981 Stella981
3年前
Docker(一):Docker入门教程
原文:Docker(一):Docker入门教程(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.cnblogs.com%2Fityouknow%2Fp%2F8520296.html)如今Docker的使用已经非常普遍,特别在一线互联网公司。使用Docker技术可以帮助企业快
Stella981 Stella981
3年前
DevOps系列——Docker基础知识总结
docker教程1\.Docker简介1.1.Docker改名字http://qbview.url.cn/getResourceInfo?appid31&urlhttps%3A%2F%2Fjuejin.im%2Fentry%2F58fd44aada2f60005dc764f
比特幽影
比特幽影
Lv1
功盖三分国,名成八阵图。
文章
3
粉丝
0
获赞
0