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. 使 ...
随机推荐
- 从函数式编程到Promise
译者按: 近年来,函数式语言的特性都被其它语言学过去了.JavaScript异步编程中大显神通的Promise,其实源自于函数式编程的Monad! 原文: Functional Computation ...
- 从零开始学习html(二)认识标签(第一部分)——上
一.语义化,让你的网页更好的被搜索引擎理 学习html标签过程中,主要注意两个方面的学习:标签的用途.标签在浏览器中的默认样式. 标签的用途:我们学习网页制作时,常常会听到一个词,语义化. 那么什么叫 ...
- js调用android本地java代码
js调用android本地java代码 当在Android上使用WebView控件开发一个Web应用时,可以创建一个通过Javascript调用Android端java代码的接口.也就是可以通过Jav ...
- Cookie管理 WebView同步
NoHttp的Cookie管理原理 在文档的初始化配置一章讲了NoHttp如何配置或者禁用cookie自动管理. NoHttp的Cookie自动维护,严格遵守Http协议,即区分临时Cookie和有效 ...
- OneAPM大讲堂 | 谁更快?JavaScript 框架性能评测
文章系国内领先的 ITOM 管理平台供应商 OneAPM 编译呈现. 网页性能是一个丰富且又复杂的话题.在本帖中,我们会将讨论的范围局限在前端 JavaScript 框架上,探究相对于另外一种框架而言 ...
- mybatis学习系列--逆向工程简单使用及mybatis原理
2逆向工程简单测试(68-70) SqlSessionFactory sqlSessionFactory=getSqlSessionFactory(); SqlSession session = sq ...
- etcd raft如何实现leadership transfer
leadership transfer可以把raft group中的leader身份转给其中一个follower.这个功能可以用来做负载均衡,比如可以把leader放在性能更好的机器或者离客户端更近的 ...
- Android ListView在增加HeaderView之后使用getLocationInWindow和getLocationOnScreen获得值不正确的解决方法
近日遇到一个很恶心的问题,把解决方法放到空间里来分享给大家: 问题发生的条件: 1)ListView 控件中使用addHeaderView,为其添加了一个header view.(基本常识:heade ...
- YUM仓库服务与PXE网络装机
1.yum:基于RPM包构建软件更新机制自动解决依赖关系,软件包由软件包库提供 提供方式:ftp服务:ftp://IP地址/仓库目录 Http服务:http :// IP地址/仓库目录 本地目录:f ...
- MySQL内连接(INNER JOIN)
MySQL INNER JOIN子句介绍 MySQL INNER JOIN子句将一个表中的行与其他表中的行进行匹配,并允许从两个表中查询包含列的行记录. INNER JOIN子句是SELECT语句的可 ...