数据卷

数据卷容器

数据卷迁移数据

端口映射

容器间通信

数据卷的管理

当需要查看容器内应用产生的数据或者把容器内数据备份及多个容器数据共享。有两种方式,数据卷以及数据卷容器。

数据卷

数据卷是一个可供容器使用的特殊目录,它绕过文件系统,特性如下:

  1. 数据卷可以在容器之间共享和重用
  2. 对数据卷的修改会立马生效
  3. 对数据卷的更新不会影响镜像
  4. 卷会一直存在,直到没有容器使用
  5. 其使用类似与mount操作。

在容器内创建一个数据卷

#docker run -d -P --name web -v /webapp training/webapp python app.py

-v 多次使用可以创建多个数据卷

挂载一个主机目录作为数据卷

这里挂载宿主机/mydata目录到容器的data_web1,可指定权限,默认rw

#docker run -d -P --name web1 -v /mydata:/data_web1:ro training/webapp python app.py

然后使用docker inspect web1验证创建卷并安装正确。寻找Mounts部分:

然后进入到容器,并在/data_web1目录下创建一个a.txt文件

最后退出容器回到宿主机到/mydata目录查看是否有a.txt文件

数据卷容器

如果需要在容器之间共享一些持续更新的数据,可以使用数据卷容器。

创建一个数据卷容器,并且在其中一个数据卷挂载到/dbdata,然后在其他容器中使用 --volumes-from来挂载dbdata容器中的数据卷。

两个容器任何一个在该目录下写入,另一个容器都能看到。--volumes-from参数所挂载数据卷的容器自身并不需要保持在运行状态。

使用数据卷容器备份恢复数据

备份

在这之前先创建一个容器卷,并创建两个文件。

# docker run -d -P --name dbdata -v /dbdata training/webapp python app.py

使用 --volumes-from 挂载上面容器的dbdata 容器卷,并从主机挂载当前目录到容器的 /backup 目录。命令如下:

# docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata

容器启动后,使用了 tar 命令来将 dbdata 卷备份为容器中 /backup/backup.tar 文件,也就是主机当前目录下的名为 backup.tar 的文件。

恢复

恢复数据到一个容器,首先创建一个带有空数据卷的容器 dbdata2。

# docker run -v /dbdata --name dbdata2 ubuntu /bin/bash

然后创建另一个容器,挂载 dbdata2 容器卷中的数据卷,并使用 untar 解压备份文件到挂载的容器卷中。

busybox是一个集成了一百多个最常用的linux命令和工具的软件,包括一些cat和echo,grep、find、mount等等。此镜像非常精巧,只有1~2M。

# docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf

/backup/backup.tar

查看

查看恢复的数据,再启动一个容器挂载同样的容器卷来查看

# docker run --volumes-from dbdata2 busybox /bin/ls /dbdata

网络的配置

端口映射

在启动容器时,不指定对应参数,在容器外是无法通过网络来访问容器内的网络应用和服务。一般就需要使用参数-p和-P。-p指定端口。-P随机映射一个端口。

可以看到上面创建容器卷的时候使用了-P,所有地址的端口32777映射到宿主机的5000端口。

如果要选择地址映射使用如下格式即可:

docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py

如果要映射指定地址的任意端口:

docker run -d -p 127.0.0.1::5000 training/webapp python app.py

查看端口配置使用docker port

使用docker inspect [CONTAINER ID|NAMES]可以查看容器所有的信息。

容器间的link

同一个宿主机上的多个docker容器之间如果想进行通信,可以通过使用容器的ip地址来通信,也可以通过宿主机的ip加上容器暴露出的端口号来通信,前者会导致ip地址的硬编码,不方便迁移,并且容器重启后ip地址会改变,除非使用固定的ip,后者的通信方式比较单一,只能依靠监听在暴露出的端口的进程来进行有限的通信。通过docker的link机制可以通过一个name来和另一个容器通信,link机制方便了容器去发现其它的容器并且可以安全的传递一些连接信息给其它的容器。

那么首先讲下name,使用--name标记可以为容器自定义名称,此名称是唯一的,当需要再次使用同一个名称时,必须要使用docker rm来先删除。

在执行docker run的时候添加--rm标记容器会在终止后立刻删除。--rm和-d不能同时使用。

创建一个后台运行的容器

#docker run -d -P --name dbdata training/webapp python app.py

然后创建另外一个容器,并link到上一个容器

#docker run -d -P --name web --link dbdata:aliasdb training/webapp python app.py

然后docker ps可以看到,看不出来是否有连接,可以通过上面说的docker inspect web来查看。

进入容器web,进行测试,通过ping容器名或者别名都可以通。

容器的host信息会添加到父容器的/etc/hosts文件(也可以链接多个子容器到父容器),下图可以看到:

docker数据卷管理及网络基础配置的更多相关文章

  1. Docker学习第三天(Docker数据卷管理)

    1.Docker数据卷管理 在Docker中,要想实现数据的持久化(所谓Docker的数据持久化即数据不随着Container的结束而结束),需要将数据从宿主机挂载到容器中.目前Docker提供了三种 ...

  2. docker 数据卷管理

    在生产环境中使用docker,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这涉及到容器对数据管理的操作 容器对数据的管理主要有两种方式: 数据卷(Data Volumes): 容器内 ...

  3. 『现学现忘』Docker基础 — 33、Docker数据卷容器的说明与共享数据原理

    目录 1.数据卷容器的说明 2.数据卷容器共享数据原理 3.总结 4.练习:MySQL实现数据共享 1.数据卷容器的说明 (1)什么是数据卷容器 一个容器中已经创建好的数据卷,其它容器通过这个容器实现 ...

  4. docker 数据卷之进阶篇

    笔者在<Docker 基础 : 数据管理>一文中介绍了 docker 数据卷(volume) 的基本用法.随着使用的深入,笔者对 docker 数据卷的理解与认识也在不断的增强.本文将在前 ...

  5. docker 数据卷 ---- 进阶篇

    笔者在<Docker 基础 : 数据管理>一文中介绍了 docker 数据卷(volume) 的基本用法.随着使用的深入,笔者对 docker 数据卷的理解与认识也在不断的增强.本文将在前 ...

  6. 实例解析Docker数据卷+数据卷容器+flocker数据共享+DockerHub操作

    Docker内部数据管理和Docker之间的数据共享为数据卷和数据卷容器,实例解析1.将本地的文件作为容器的数据卷,2.数据卷flocker插件实现容器集群(或者Docker Swarm)的数据共享3 ...

  7. docker数据卷学习-利用数据卷实现mysql的快速恢复和迁移

    docker数据卷学习 一 新建带有数据卷的容器 1.从docker hub下载centos7镜像 # docker pull centos 2. 创建container # docker run - ...

  8. docker数据卷挂载

    docker数据卷挂载笔记 我们的服务运行时必不可少的会产生一些日志,或是我们需要把容器内的数据进行备份,甚至多个容器之间进行数据共享,这必然涉及容器的数据管理操作. 容器中管理数据主要有两种方式: ...

  9. Docker学习笔记之使用Docker数据卷

    Docker数据卷将数据存储到主机而非容器,多个容器需要共享数据时,常常使用数据卷. 1. 为容器设置数据卷(不指定主机目录) 2. 容器与主机之间.容器与容器之间共享数据卷(指定主机目录) 3. 使 ...

随机推荐

  1. linq使用Take和Skip实现分页

    ;//第1页 ;//页大小 var list = list.Skip((pageIndex-1) * pageSize).Take(pageSize).ToList();

  2. ConcurrentHashMap底层实现原理(JDK1.8)源码分析

    ref:https://blog.csdn.net/xu768840497/article/details/79194701 http://www.cnblogs.com/leesf456/p/545 ...

  3. Java 初级软件工程师 认证考试试卷1

    Java 初级软件工程师 认证考试试卷   笔试(A卷)   考试时间150分钟 总分 100分     姓    名_______________________ 身份证号_____________ ...

  4. Windows下使用Rtools编译R语言包

    使用devtools安装github中的R源代码时,经常会出各种错误,索性搜了一下怎么在Windows下直接打包,网上的资料也是参差不齐,以下是自己验证通过的. 一.下载Rtools 下载地址:htt ...

  5. Java并发编程(七)深入剖析ThreadLocal

    一.对ThreadLocal的理解 ThreadLocal,很多地方叫做线程本地变量,也有些地方叫做线程本地存储,其实意思差不多.可能很多朋友都知道ThreadLocal为变量在每个线程中都创建了一个 ...

  6. 服务器 nginx配置 防止其他域名绑定自己的服务器

    基于我的网站被其他的域名恶意绑定了,我做出了如下处理,全站转https,同时配置nginx跳转禁止其他绑定ip的域名访问(原理主机空域名可绑定任意的,参考https://www.jb51.net/ar ...

  7. SQL去除空格、截取数据的方法:trim、substring

    1.如device表中的identity字段正常的字段长度是32位,但是某些不正常的数据,后面多出空格,需要去掉后面的空格,可执行以下命令: ; ; 2.使用substring函数截取某字段的的其中一 ...

  8. Linux下的sysfs与udev的关系是什么?

    sysfs  sysfs 把连接在系统上的设备和总线组织成为一个分级的文件,它们可以被从用户的空间存取到.简单介绍sysfs文件系统,您可能想知道 sysfs 是怎么认出系统中存在的设备以及应该使用什 ...

  9. if 嵌套if 的先后顺序的区别 (自测)

    # 验证 verify very good! # username = input("请输入用户名").capitalize()# password = input("请 ...

  10. JDBC学习笔记之JDBC简介

    1. 引言 JDBC API是一种Java API,可以访问任何类型的表格数据,特别是存储在关系数据库中的数据. JDBC可以帮助我们编写下列三种编程活动的java应用程序: 1.连接到数据源,如数据 ...