docker数据卷管理及网络基础配置
数据卷
数据卷容器
数据卷迁移数据
端口映射
容器间通信
数据卷的管理
当需要查看容器内应用产生的数据或者把容器内数据备份及多个容器数据共享。有两种方式,数据卷以及数据卷容器。
数据卷
数据卷是一个可供容器使用的特殊目录,它绕过文件系统,特性如下:
- 数据卷可以在容器之间共享和重用
- 对数据卷的修改会立马生效
- 对数据卷的更新不会影响镜像
- 卷会一直存在,直到没有容器使用
- 其使用类似与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数据卷管理及网络基础配置的更多相关文章
- Docker学习第三天(Docker数据卷管理)
1.Docker数据卷管理 在Docker中,要想实现数据的持久化(所谓Docker的数据持久化即数据不随着Container的结束而结束),需要将数据从宿主机挂载到容器中.目前Docker提供了三种 ...
- docker 数据卷管理
在生产环境中使用docker,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这涉及到容器对数据管理的操作 容器对数据的管理主要有两种方式: 数据卷(Data Volumes): 容器内 ...
- 『现学现忘』Docker基础 — 33、Docker数据卷容器的说明与共享数据原理
目录 1.数据卷容器的说明 2.数据卷容器共享数据原理 3.总结 4.练习:MySQL实现数据共享 1.数据卷容器的说明 (1)什么是数据卷容器 一个容器中已经创建好的数据卷,其它容器通过这个容器实现 ...
- docker 数据卷之进阶篇
笔者在<Docker 基础 : 数据管理>一文中介绍了 docker 数据卷(volume) 的基本用法.随着使用的深入,笔者对 docker 数据卷的理解与认识也在不断的增强.本文将在前 ...
- docker 数据卷 ---- 进阶篇
笔者在<Docker 基础 : 数据管理>一文中介绍了 docker 数据卷(volume) 的基本用法.随着使用的深入,笔者对 docker 数据卷的理解与认识也在不断的增强.本文将在前 ...
- 实例解析Docker数据卷+数据卷容器+flocker数据共享+DockerHub操作
Docker内部数据管理和Docker之间的数据共享为数据卷和数据卷容器,实例解析1.将本地的文件作为容器的数据卷,2.数据卷flocker插件实现容器集群(或者Docker Swarm)的数据共享3 ...
- docker数据卷学习-利用数据卷实现mysql的快速恢复和迁移
docker数据卷学习 一 新建带有数据卷的容器 1.从docker hub下载centos7镜像 # docker pull centos 2. 创建container # docker run - ...
- docker数据卷挂载
docker数据卷挂载笔记 我们的服务运行时必不可少的会产生一些日志,或是我们需要把容器内的数据进行备份,甚至多个容器之间进行数据共享,这必然涉及容器的数据管理操作. 容器中管理数据主要有两种方式: ...
- Docker学习笔记之使用Docker数据卷
Docker数据卷将数据存储到主机而非容器,多个容器需要共享数据时,常常使用数据卷. 1. 为容器设置数据卷(不指定主机目录) 2. 容器与主机之间.容器与容器之间共享数据卷(指定主机目录) 3. 使 ...
随机推荐
- css3火焰文字样式代码
css样式: <style type="text/css"> body{background:#000;} *{margin:0;padding:0;transitio ...
- css选择器:基本选择器
基本选择器 1.通用元素选择器 *表示应用到所有的标签. *{ padding:0px; margin:0px; } 2.元素/标签选择器 匹配所有p标签的元素 p{ color:red; backg ...
- Spring@Autowired注解与自动装配(转发)
1 配置文件的方法 我们编写spring 框架的代码时候.一直遵循是这样一个规则:所有在spring中注入的bean 都建议定义成私有的域变量.并且要配套写上 get 和 set方法. Boss ...
- 安卓APP应用在各大应用市场上架方法整理
想要把APP上架到应用市场都要先注册开发者账号才可以.这里的方法包括注册帐号和后期上架及一些需要注意的问题.注意:首次提交应用绝对不能随便删除,否则后面再提交会显示应用APP冲突,会要求走应用认领流程 ...
- 9.4、__del__、__doc__、__dict__、__module__、__getitem__、__setitem__、__delitem__、__str__、__repr__、__call__
相关内容: __del__.__doc__.__dict__.__module__.__getitem__.__setitem__.__delitem__.__str__.__repr__.__cal ...
- 使用spark DStream的foreachRDD时要注意哪些坑?
答案: 两个坑, 性能坑和线程坑 DStream是抽象类,它把连续的数据流拆成很多的小RDD数据块, 这叫做“微批次”, spark的流式处理, 都是“微批次处理”. DStream内部实现上有批次处 ...
- 【redis专题(4)】命令语法介绍之sorted_set
有序集合可以模拟优先级队列的实现 增 zadd key score1 value1 score2 value2 .. redis 127.0.0.1:6379> zadd stu 18 lily ...
- 洗礼灵魂,修炼python(45)--巩固篇—【转载】类的__now__和__init__
学到这里了,相信你应该对__init__非常熟悉了,就是构造器呗,当类被实例化时初始化的作用 但__init__其实不是实例化一个类的时候第一个自动调用的方法.当实例化一个类时,最先被调用的方法 其实 ...
- 洗礼灵魂,修炼python(40)--面向对象编程(10)—定制魔法方法+time模块
定制魔法方法 1.什么是定制魔法方法 首先定制是什么意思呢?其实就是自定义了,根据我们想要的要求来自定义.而在python中,其实那些所谓的内置函数,内置方法,内置属性之类的其实也是自定义出来的,不过 ...
- Beta冲刺! Day3 - 砍柴
Beta冲刺! Day3 - 砍柴 今日已完成 晨瑶:追查进度:确定推荐算法 昭锡:查看Note模块的处理逻辑.查找主页UI的解决方案 永盛:数据库的大量整合和新建,备份和还原:完成部分新的逻辑 立强 ...