Docker内部数据管理和Docker之间的数据共享为数据卷和数据卷容器,实例解析1.将本地的文件做为容器的数据卷,2.数据卷flocker插件实现容器集群(或者Docker Swarm)的数据共享3.数据卷容器做为其余容器的数据卷.下降磁盘开销.4.数据的备份,恢复和迁移.5.Docker hub的经常使用操做.python
Data volumes是一个或者多个容器特别指定的目录,它区别于联合文件系统的(Union File System,或称UnionFS,经过底层的操做的文件系统,具备轻量级和快速的特性,Docker 容器也是使用联合文件系统去建立数据块的.),而且,对容器的数据管理以及容器之间数据共享提供了如下几点:
- 当容器被建立的同时,数据卷已经被初始化了.当镜像数据在制定的挂载点上时,存在的数据会复制到新的卷上.(可是,若是挂载的是主机路径不适用)
- 容器之间的数据卷能够重用和共享.
- 能够直接更改数据卷
- 镜像更新不会更改数据卷.
- 容器被删除,数据卷不受影响.git
在docker create
和docker run
命令中,使用-v
为容器增长一个数据卷.github
wxl@wxl-pc:~$ docker run -d -P --name myweb -v /webapp training/webapp python app.py
可见.把training/webapp
命名为myweb
,而且经过-v
建立了数据卷 /webappweb
Dockerfile
建立新的容器时,能够经过-v来建立更多的数据卷.wxl@wxl-pc:~$ docker inspect myweb
其中,Mount信息,包含了刚刚建立的数据卷详细信息.source
指定了本机路径,而Destination
则指定容器内部路径.docker
将本机的路径如/src/webapp做为volumeweb的数据卷.这样作的好处是,若是本地有代码可很方便在本地修改,在容器里查看修改后的效果.json
wxl@wxl-pc:~$ docker run -d -P --name volumeweb -v /src/webapp:/opt/webapp training/webapp python app.py
3206809decc4145427cb1f300d05a55aae88a6fffc33596e773dbd023746e479
#查看
wxl@wxl-pc:~$ docker inspect volumeweb
wxl@wxl-pc:~$ docker run -d -P --name volumeweb -v /src/webapp:/opt/webapp:ro training/webapp python app.py
仅仅在/src/webapp:/opt/webapp:ro 增长了ro,指明只读模式.ubuntu
使用-v
标志能够挂载单一文件,如将主机的bash_history文件内容,添加至新建立的容器中,此时新建立的容器的bash_history中的记录删除而存上主机bash_history的内容.centos
wxl@wxl-pc:~$ docker run --rm -it -v ~/.bash_history:/root/.bash_history ubuntu:14.04 /bin/bash
挂载一个共享数据做为Docker容器的数据卷
容器除了能够在本机上的路径做为数据卷外,还能够经过Docker volume plugins来容许一些共享数据做为数据卷,如iSCSI,NFS或者FC.这样作的好处是,共享的数据卷的位置不受容器的影响,并且只要某个容器拥有volume plugins而且可以访问,就能够将共享数据卷做为该容器的数据卷.ruby
数据卷的一个插件,用来管理共享数据,支持容器之间(容器集群)的共享数据进行迁移,打包.
注意:a.最后一步下载flocker插件时,可能由于网速而下载时间很长,建议下载的flocker时跳过.Docker 数据卷flocker插件实现容器集群的数据管理,共享和迁移等.步骤,不影响后续操做.b.本过程须要flocker正确安装,Dcoker集群环境,若是提示没有flocker插件错误,能够跳过本步骤,Docker Swarm不是本次解析重点.bash
wxl@wxl-pc:~$ sudo apt-get update
wxl@wxl-pc:~$ sudo apt-get -y install apt-transport-https software-properties-common
wxl@wxl-pc:~$ sudo add-apt-repository -y "deb https://clusterhq-archive.s3.amazonaws.com/ubuntu/$(lsb_release --release --short)/\$(ARCH) /"
wxl@wxl-pc:~$ cat <<EOF > /tmp/apt-pref
> Package: *
> Pin: origin clusterhq-archive.s3.amazonaws.com
> Pin-Priority: 700
> EOF
wxl@wxl-pc:~$ sudo mv /tmp/apt-pref /etc/apt/preferences.d/buildbot-700
wxl@wxl-pc:~$ sudo apt-get update
#下载速度很慢,根据网速而定.
wxl@wxl-pc:~$ sudo apt-get -y install --force-yes clusterhq-flocker-cli
安装Flocker Node Services(略过,过程繁琐,再也不赘述,能够去clusterhq官方文档查看.)
wxl@wxl-pc:~$ docker volume create -d flocker --name my-named-volume -o size=20GB
wxl@wxl-pc:~$ docker run -d -P \
> -v my-named-volume:/opt/webapp \
> --name web training/webapp python app.py
本过程须要flocker正确安装,Dcoker集群环境,若是提示没有flocker插件错误,能够跳过本步骤,Docker Swarm不是本次解析重点.
建立新的数据卷的容器目的是,方便一些持久性(存储)的数据在容器和容器之间共享.
使用postgres镜像建立一个数据卷容器,该容器没有应用运行,因此,其余容器的能够做为应用层,而存储的数据放在数据卷容器中,这样能够节省磁盘空间.
wxl@wxl-pc:~$ docker create -v /dbdata --name dbstore training/postgres /bin/true
--volumes-from
能够将dbdata容器中的数据卷/dbdata挂载到另外一个容器中(db1).wxl@wxl-pc:~$ docker run -d --volumes-from dbstore --name db1 training/postgres
docker run -d --volumes-from dbstore --name db2 training/postgres
docker rm -v
加上数据卷.-v
标志,这些数据卷会成为dangling状态docker volume ls -f dangling=true
docker volume rm <volume name>
Docker容器的数据卷备份,恢复,迁移通常是经过--volumes-from
标志实现的.
wxl@wxl-pc:~$ docker run --rm --volumes-from dbstore -v $(pwd):/backup ubuntu:14.04 tar cvf /backup/backup.tar /dbdata
-v
标志,将数据恢复到同一个容器或者其余任意容器.wxl@wxl-pc:~$ docker run -v /dbdata --name dbstore2 ubuntu:14.04 /bin/bash
wxl@wxl-pc:~$ docker run --rm --volumes-from dbstore2 -v $(pwd):/backup ubuntu:14.04 bash -c "cd /dbdata && tar xvf /backup/backup.tar --strip 1"
Docker Hub是Docker官方提供的容器管理工程,相似与github,不一样在于在Docker Hub中搜索存放的不是源码而是容器.
Docker Hub能够存放咱们建立的容器,若是是公开的则你们都以拿来用,也支持不公开.
wxl@wxl-pc:~$ docker login
登录信息存放在了$HOME/.docker/config.json
下.
#查找
wxl@wxl-pc:~$ docker search centos
#下载
wxl@wxl-pc:~$ docker pull centos
使用docker push yourname/newimage
来push本身的容器到hub上.
wxl@wxl-pc:~$ docker push mycentos:mydev