4.Docker数据管理

4.1.数据卷

数据卷是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似与Linux的mount行为。

特性:

  1. 数据卷可以在容器之间共事和重用,容器间传递数据将变得高效与方便;
  2. 对数据卷内数据的修改会立马生效,无论是容器内操作还是本地操作;
  3. 对数据卷的更新不会影响镜像,解摘开应用和数据;
  4. 卷会一直存在 ,直到没有容器使用,可以安全地卸载它。

相关用法:

Usage:	docker volume COMMAND
Manage volumes
Options:
--help Print usage
Commands:
create Create a volume
inspect Display detailed information on one or more volumes
ls List volumes
prune Remove all unused volumes
rm Remove one or more volumes

4.1.1.创建数据卷

命令:docker volume create 数据卷名

Usage:	docker volume create [OPTIONS] [VOLUME]
Create a volume
Options:
-d, --driver string Specify volume driver name (default "local")
--help Print usage
--label list Set metadata for a volume (default [])
-o, --opt map Set driver specific options (default map[])

4.1.2.绑定数据卷

在使用docker run命令运行容器的时候,可以使用-mount命令绑定数据卷

命令:docker run [options] --mount type=类型,source=主机真实绝对路径,target=docker虚拟路径

type有以下三种类型:

  1. volume:普通数据卷,映射到主机/var/lib/docker/volumes路径下,如果使用此种类型,source参数则不需要写。
  2. bind:绑定数据卷,映射到主机指定路径下
  3. tmpfs:临时数据卷,只映射到内存中

这里如果docker版本太旧的话会不支持-mount命令,使用mount命令时,需要保证主机映射的指定文件存在,如果不存在则会报错

这里还有一个相似的命令也可以绑定数据卷

命令:docker run [options] -v 主机真实绝对路径:docker虚拟路径 镜像名/镜像ID

这个命令如果主机映射文件不存在,会自动创建不会报错

Docker 挂载数据卷的默认权限是读写(rw),用户也可以通过 ro 指定为只读,即在虚拟路径后加:ro

命令:docker run [options] -v 主机真实绝对路径:docker虚拟路径:ro 镜像名/镜像ID

以上的主机真实绝对路径也可以换为docker volume create命令创建的数据卷的名称,会自动映射到已创建的数据卷的路径

4.2.数据卷容器

如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。 数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载。

先使用docker run -it -v docker虚拟路径 --name 容器名 镜像名/镜像ID命令创建一个数据卷容器

然后就可以用--volumes-from 容器名命令来挂载之前创建的容器的数据卷中的内容

4.3.使用数据卷容器迁移数据

可以利用数据卷容器对其中的数据卷进行备份、恢复,以实现数据的迁移。

4.3.1.备份

docker run -it --volumes-from volumecontainer -v $(pwd):/backup --name worker mycentos:test tar cvf /backup/backup.tar /volume

这条命令可以分解着看:

-volumes-from是挂载数据卷容器的数据卷即volume文件夹

-v $(pwd):/backup是将宿主机的当前真实路径挂载到容器中的backup文件夹下

然后创建完容器后执行tar cvf /backup/backup.tar /volume命令,将volume文件夹压缩到容器的backup文件夹下,又因为这个文件夹是挂载的宿主机当前文件夹,所以宿主机也出现了压缩包

4.3.2.恢复

原理跟备份差不多,只不过前者是压缩,后者是解压

5.端口映射与容器互联

5.1.端口映射实现容器访问

启动容器时,如果如果不指定对应参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。可以使用-p-P参数来指定端口映射。

当使用-P(大写)标记时,Docker会随机映射一个端口到内部容器开放的接口,例如:

当使用-p(小写)标记时,可以指定端口进行映射,支持的格式有:

将容器指定端口映射到主机随机端口,会绑定本地接口上的所有地址:ContainerPort

将容器指定端口映射到主机指定端口,会绑定本地接口上的所有地址:HostPort:ContainerPort

将容器ip和指定端口随机映射到主机上:IP::ContainerPort

将容器ip和指定端口映射到主机指定端口上:IP:HostPort:ContainerPort

还可以用多次-p来绑定多个端口以及使用udp标记来指定udp端口

5.2.互联机制实现便捷互访

容器的互联是一种让多个容器中的应用进行快速交互的方式,它会在源和接收容器之间创建连接关系,接收容器可以通过容器名快速访问到源容器,而不用指定具体的IP地址。

使用--link参数可以让容器之间安全地进行交互,参数的格式为:--line name:alias,name是要连接容器地名称,alias是别名。

可以看出连接之后,可以ping通连接的容器,环境变量也能够查找到。此时如果base容器里面的环境变量更新,也会同步到link容器。

Docker学习笔记三的更多相关文章

  1. Docker学习笔记三 Dockerfile 指令 定制镜像

    本文地址:https://www.cnblogs.com/veinyin/p/10412079.html  镜像是分层存储的,每一层都是独立存在的,修改当前层并不会修改其依赖的上一层,删除某一层也只是 ...

  2. Docker学习笔记三:Docker部署Java web系统

    Docker部署Java Web系统 1.在root目录下创建一个路径test/app mkdir test && cd test&& mkdir app && ...

  3. Docker学习笔记 - Docker容器内部署redis

    Docker学习笔记(2-4)Docker应用实验-redist server 和client的安装使用 一.获取redis容器(含客户端和服务端) 二.创建服务端容器 1.在终端A中运行redis- ...

  4. docker学习笔记(一)—— ubuntu16.04下安装docker

    docker学习笔记(一)—— ubuntu16.04下安装docker 原创 2018年03月01日 14:53:00 标签: docker / ubuntu 1682 本文开发环境为Ubuntu ...

  5. Docker学习笔记总结

    Docker学习笔记 https://yeasy.gitbooks.io/docker_practice/content/   一 环境搭建 Ubuntu安装 .添加软件源的GPG密钥 curl -f ...

  6. Docker 学习笔记一

    Docker 学习笔记一 1.Docker是什么?         Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源.让开发者打包他们的应用以及依赖包到一 ...

  7. Docker学习笔记之-通过Xshell连接 CentOS服务

    上一节演示如何在虚拟机中安装 CentOS服务,Docker学习笔记之-在虚拟机VM上安装CentOS 7.8 本节主要演示如何通过 Xshell软件链接CentOS服务,本例以虚拟机作为演示,直接在 ...

  8. Docker学习笔记之-在CentOS中安装Docker

    上一节演示了如何 通过Xshell连接CentOS服务,链接:Docker学习笔记之-通过Xshell连接 CentOS服务 本节将演示 如何在CentOS中安装 Docker 第一步:更新系统包到最 ...

  9. Docker学习笔记之--安装mssql(Sql Server)并使用Navicat连接测试(环境:centos7)

    前一节演示如何使用Nginx反向代理 .net Core项目容器,地址:Docker学习笔记之-部署.Net Core 3.1项目到Docker容器,并使用Nginx反向代理(CentOS7)(二) ...

随机推荐

  1. 安装NodeJs和NPM到Ubuntu(APT)

    运行环境 系统版本:Ubuntu 16.04.2 LTS 软件版本:node-v10.16.3.npm-6.9.0 硬件要求:无 安装过程 1.安装NPM和NodeJs root@localhost: ...

  2. Anaconda使用教程全攻略

    Anaconda使用教程全攻略 本文转自 https://zhuanlan.zhihu.com/p/32925500           〇.序 Python是一种面向对象的解释型计算机程序设计语言, ...

  3. PMP--3. 项目启动过程组

    ####################################################### 从第三章开始,我正式进入项目过程,启动.规划.执行.监控.收尾五大过程组的具体在之后依次 ...

  4. Blazor初体验之寻找存储client-side jwt token的方法

    https://www.cnblogs.com/chen8854/p/securing-your-blazor-apps-authentication-with-clientside-blazor-u ...

  5. vue使用JSEncrypt实现rsa加密及挂载方法

    挂载全局方法 使用jsencrypt进行rsa加密 原文链接:Js参数RSA加密传输,jsencrypt.js的使用 - CSDN博客* https://blog.csdn.net/p31201115 ...

  6. mysql必知必会--排序检索数据

    排序数据 其实,检索出的数据并不是以纯粹的随机顺序显示的.如果不排 序,数据一般将以它在底层表中出现的顺序显示.这可以是数据最初 添加到表中的顺序.但是,如果数据后来进行过更新或删除,则此顺 序将会受 ...

  7. 在香蕉派的树莓派系统上配置 Syncthing 自启动

    在香蕉派的树莓派系统上配置 Syncthing 自启动 —— 魏刘宏 2020 年 1 月 19 日 首先做个名词解释,” 香蕉派” 是国内一款山寨树莓派的硬件产品,” 树莓派系统” 指的是”rasp ...

  8. 广度优先搜索BFS---求出矩阵中“块”的个数

    题目: 给出一个 m x n 的矩阵,矩阵中的元素为0或1.如果矩阵中有若干个 1是相邻的,那么称这些1构成了一个“块”.求给定的矩阵中“块”的个数. 0 1 1 1 0 0 1 0 0 1 0 0 ...

  9. 根据词频生成词云(Python wordcloud实现)

    网上大多数词云的代码都是基于原始文本生成,这里写一个根据词频生成词云的小例子,都是基于现成的函数. 另外有个在线制作词云的网站也很不错,推荐使用:WordArt 安装词云与画图包 pip3 insta ...

  10. Selenium实战(四)——unittest单元测试2(断言方法+discover()多测试用例的执行)

    一.断言方法 方法 检查 版本 assertEqual(a,b) a==b   assertNotEqual(a,b) a!=b   assertTrue(x) bool(x) is True   a ...