docker数据管理

数据持久化,多个容器间进行数据共享,涉及到的数据管理操纵。前端

数据卷:容器内数据直接映射到本地主机环境python

数据卷容器:用特定容器维护数据卷web

在容器内建立数据卷,把本地目录挂载到容器内数据卷中。使用数据卷容器在主机、容器和容器之间共享数据,并实现数据的备份和恢复。docker

数据卷 特殊目录,将主机系统目录映射进容器,相似于mount操做。特性:容器之间共享和重用,传递数据高效方便;卷内数据修改当即生效;数据卷更新不会影响镜像,解耦了应用和数据;卷会一直存在,直到没有容器使用,能够安全卸载。ubuntu

docker run时,用-v能够在容器内建立数据卷,屡次使用建立多个卷。 使用training/webapp镜像建立一个web容器,并建立一个数据卷挂载到容器的/webapp 目录:docker run -d -P --name web -v /webapp training/webapp python app.py 其中-P将容器服务暴露的端口,是自动映射到本地主机的临时端口。安全

推荐方式:挂载一个主机目录做为数据卷。docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py 将主机上的src/webapp目录加载到容器的/opt/webapp目录。能够放到本地目录文件在容器中测试。默认权限rw,能够指定为ro。docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp:ro python app.pybash

数据卷容器。多个容器之间共享持续的更新。是一个供其余容器挂载的容器。 docker run -it -v /dbdata --name dbdata ubuntu:14.04 建立数据卷容器dbdata,并建立数据卷挂载到/dbdata网络

其余容器挂载dbdata中的数据卷。docker run -it --volumes-from dbdata --name db1 ubuntu:14.04事实证实,确实同步改变。本机没有dbdata文件夹。--volumes-from挂载的数据卷容器自身并不须要保持运行状态。app

删除数据卷要在删除最后一个挂载它的容器时使用docker rm -v 命令指定同时删除关联的容器。webapp

使用数据卷容器来迁移数据 对其中的数据卷备份、恢复,实现数据的迁移。

备份:docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu:14.04 tar cvf /backup/backup.tar /dbdata 容器启动后将/dbdata下的内容备份为容器内的/backup/backup.tar。

恢复:建立带数据卷的容器dbdata2 .docker run -it -v /dbdata --name dbdata2 ubuntu:14.04 /bin/bash。建立新的容器,挂在dbdata2的容器,使用untar解压备份文件目标容器中docker run --volumes-from dbdata2 -v $(pwd):/backup --name worker ubuntu:14.04 tar xvf /backup/backup.tar /dbdata

数据独立于容器。

端口映射与容器互联 多个服务组件容器共同协做,须要多个容器之间可以互相访问到对方的服务。 除了网络访问外,docker提供了两个很方便的的功能来知足服务访问的基本需求:容许映射容器内应用服务端口到本地宿主主机;互联机制实现多个容器间经过容器名来快速访问。两个很实用的功能。

端口映射实现访问容器 1.从外部访问容器应用。须要指定对应参数。-p或-P指定端口映射。-P会随机映射一个49000到49900的端口到内部容器开放的网络端口。如:docker run -d -P training/webapp python app.py 而后docker ps -a 出现0.0.0.0:49100->5000/tcp 说明本地主机49100被映射到了容器的5000端口。 经过访问宿主机的49100端口就能够访问容器内的web页面。经过docker logs -f name能够查看应用的信息。 -p能够指定要映射的端口,而且在一个指定端口上只能绑定一个容器。格式为ip:hostport:containerport|ip::containerport|hostport:containerport.

屡次使用-p能绑定多个端口。 如docker run -d -p 5000:5000 training/webapp python app.py 和docker run -d -p 5000:5000 -p 3000:80 training/webapp python app.py 和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 run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py

查看当前端口映射配置docker port name 5000 容器有本身的内部网络和ip地址,用docker inspect 容器id 能看到具体信息

能够同时运行多个容器。有个问题,只能在docker run建立的时候指定端口吗?已有容器添加指定端口行吗?

互联网机制实现便捷互访。 多个容器中应用进行快速交互。在源和接收容器之间建立链接关系,接收容器经过容器名快速访问到源容器,而不用指定具体ip。

自定义容器命名。--name 参数。查看 docker ps -a 和docker inspect -f "{{.name}}" id 容器名称是惟一的。docker run时添加--rm标记,容器终止后会当即删除。--rm和-d不能同时使用。

容器互联。--link参数。如docker run -d --name db training/postgres如docker run -d -P --name web --link db:db training/webapp python app.py 这样web就和db创建互联关系。--link name:alias 。name是容器名,alias是链接的别名。 查看链接状况docker ps -a看到name列有db,web/db。表示web容器链接到db容器,容许web容器访问db容器的信息。

创建了虚拟通道,不用映射端口的虚拟通道。db创建时没有指定端口,不用暴露db到网络平台上。

能够多个web容器链接到同一个db容器上。

dcoker两种方式公开链接信息:更新环境变量和更新/etc/hosts文件。 cat /etc/hosts能够看到ip和容器名的对应,ping名称能够解析ip。

相关文章
相关标签/搜索