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. 使 ...
随机推荐
- 汇编语言--CPU资源和存储器(二)
二.CPU资源和存储器 需要访问的硬件资源主要有:CPU内部资源.存储器和I/O端口. 1.寄存器组 (1)16位寄存器组 16位CPU所含有的寄存器有(见图2.1中16位寄存器部分): 4个数据寄存 ...
- CentOS 通过yum来升级php到php5.6,yum upgrade php 没有更新包
在文章中,我们将展示在centOS系统下如何将php升级到5.6,之前通过yum来安装lamp环境,直接升级的话,提示没有更新包,也就是说默认情况下php5.3.3是最新 1.查看已经安装的php版本 ...
- plsql调试存储过程卡住的原因以及处理
用PLSQL调试存储过程的时候,经常会遇到这个的情况,点调试后,继续点单步都是灰色,想停下来,但是取消也要点很多次才能取消掉. 就像下面的情况: 一直以为是个BUG,直到最近有人告诉我了真相. 出现这 ...
- 在Apex中使用sObject
sObject对象的定义 Salesforce中的标准对象或自定义对象在Apex中使用时被称作"sObject".sObject对象的一个实例相当于Salesforce中的一条记录 ...
- SEIG Modbus 3.4 CVE-2013-0662 漏洞分析与利用
前言 Schneider Electric Modbus Serial Driver 会监听 27700 端口,程序在处理客户端发送的数据时会导致栈溢出. 测试环境: windows xp sp3 相 ...
- 浅谈Java多线程中的join方法
先上代码 新建一个Thread,代码如下: package com.thread.test; public class MyThread extends Thread { private String ...
- const修饰指针的三种效果
当用const进行修饰时,根据const位置的不同有三种不同效果. 判断的标准是:const修饰谁,谁的内容就是不可变的. 1 const int *p = &a; const修饰*p, *p ...
- IOS 多文件上传 Java web端(后台) 使用List<MultipartFile> 接收出现的问题
先上正确的示例: 主要是设置我们的request的content-type为multipart/form-data NSDictionary *param = @{@"assignee&qu ...
- scrapy系列(三)——基础spider源码解析
前面两章介绍了scrapy的安装和项目的新建,那么这一章就讲讲spider吧. scrapy有个命令是runspider, 这个命令的作用就是将一个spider当做一个python文件去执行,而不用创 ...
- Linux下mysql5.7数据库root登录的问题
本文最后修改时间:20180313 root默认为空密码,默认远程无法登录. mysql5.7更新了user表,网上的方法试了很多,都有点问题 #先停止MySQL服务 $ sudo service m ...