实例解析Docker数据卷+数据卷容器+flocker数据共享+DockerHub操作

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Docker内部数据管理和Docker之间的数据共享为数据卷和数据卷容器,实例解析1.将本地的文件作为容器的数据卷,2.数据卷flocker插件实现容器集群(或者Docker Swarm)的数据共享3.数据卷容器作为其他容器的数据卷.降低磁盘开销.4.数据的备份,恢复和迁移.5.Docker hub的常用操作.1.0.数据卷(Data volumes)Data vol

Docker内部数据管理和Docker之间的数据共享为数据卷和数据卷容器,实例解析1.将本地的文件作为容器的数据卷,2.数据卷flocker插件实现容器集群(或者Docker Swarm)的数据共享3.数据卷容器作为其他容器的数据卷.降低磁盘开销.4.数据的备份,恢复和迁移.5.Docker hub的常用操作.

1.0.数据卷(Data volumes)

Data volumes是一个或者多个容器特别指定的目录,它区别于联合文件系统的(Union File System,或称UnionFS,通过底层的操作的文件系统,具有轻量级和快速的特性,Docker 容器也是使用联合文件系统去创建数据块的.),并且,对容器的数据管理以及容器之间数据共享提供了以下几点:
- 当容器被创建的同时,数据卷已经被初始化了.当镜像数据在制定的挂载点上时,存在的数据会复制到新的卷上.(但是,如果挂载的是主机路径不适用)
- 容器之间的数据卷可以重用和共享.
- 可以直接更改数据卷
- 镜像更新不会更改数据卷.
- 容器被删除,数据卷不受影响.

1.1.增加一个数据卷

docker createdocker run命令中,使用-v 为容器增加一个数据卷.

wxl@wxl-pc:~$ docker run -d -P --name myweb -v /webapp training/webapp python app.py

这里写图片描述

可见.把training/webapp命名为myweb,并且通过-v创建了数据卷 /webapp

  • Tip,在Dockerfile创建新的容器时,可以通过-v来创建更多的数据卷.

1.2.查看创建信息

wxl@wxl-pc:~$ docker inspect myweb

这里写图片描述

其中,Mount信息,包含了刚刚创建的数据卷详细信息.source指定了本机路径,而Destination则指定容器内部路径.

1.3.本机路径作为容器数据卷

将本机的路径如/src/webapp作为volumeweb的数据卷.这样做的好处是,如果本地有代码可很方便在本地修改,在容器里查看修改后的效果.

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

这里写图片描述

1.4.设置本地路径的权限,默认是rw读写模式,可以制定能如ro只读模式

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,指明只读模式.

1.5.挂载主机文件作为数据卷

使用-v标志可以挂载单一文件,如将主机的bash_history文件内容,添加至新创建的容器中,此时新创建的容器的bash_history中的记录删除而存上主机bash_history的内容.

wxl@wxl-pc:~$ docker run --rm -it -v ~/.bash_history:/root/.bash_history ubuntu:14.04 /bin/bash

这里写图片描述

2.flocker插件实现容器集群的数据管理,共享和迁移等.(如果未配置Docker Swarm,建议跳过本步骤)

挂载一个共享数据作为Docker容器的数据卷
容器除了可以在本机上的路径作为数据卷外,还可以通过Docker volume plugins来允许一些共享数据作为数据卷,如iSCSI,NFS或者FC.这样做的好处是,共享的数据卷的位置不受容器的影响,而且只要某个容器拥有volume plugins并且能够访问,就可以将共享数据卷作为该容器的数据卷.

2.1.安装Docker容器卷驱动flocker

数据卷的一个插件,用来管理共享数据,支持容器之间(容器集群)的共享数据进行迁移,打包.
注意:a.最后一步下载flocker插件时,可能因为网速而下载时间很长,建议下载的flocker时跳过.Docker 数据卷flocker插件实现容器集群的数据管理,共享和迁移等.步骤,不影响后续操作.b.本过程需要flocker正确安装,Dcoker集群环境,如果提示没有flocker插件错误,可以跳过本步骤,Docker Swarm不是本次解析重点.

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不是本次解析重点.

3.创建一个新的数据卷容器,作为其他应用层容器的数据卷

创建新的数据卷的容器目的是,方便一些持久性(存储)的数据在容器和容器之间共享.
使用postgres镜像创建一个数据卷容器,该容器没有应用运行,所以,其他容器的可以作为应用层,而存储的数据放在数据卷容器中,这样可以节省磁盘空间.

3.1.创建新的数据卷容器dbstore

wxl@wxl-pc:~$ docker create -v /dbdata --name dbstore training/postgres /bin/true

3.2.使用--volumes-from可以将dbdata容器中的数据卷/dbdata挂载到另一个容器中(db1).

wxl@wxl-pc:~$ docker run -d --volumes-from dbstore --name db1 training/postgres

3.3.将dbstore挂载到db2容器中.

docker run -d --volumes-from dbstore --name db2 training/postgres

3.4.通过已经挂载的容器扩展挂载(如,db3通过db1或者db2来挂载dbstore数据卷容器)

这里写图片描述

如果,删除容器db1或者容器db2,数据卷是不会被删除的,如果在磁盘上删除数据卷,必须显示调用docker rm -v加上数据卷.

3.5.注意,如果删除含有数据卷的容器,在删除容器时没有使用-v标志,这些数据卷会成为dangling状态

a.显示所以没有挂载到容器上的数据卷

docker volume ls -f dangling=true

b.删除这些dangling状态的数据卷

docker volume rm <volume name>

4.0.备份,恢复,迁移数据卷

Docker容器的数据卷备份,恢复,迁移一般是通过--volumes-from标志实现的.

4.1.备份,创建一个新容器,在新容器挂载dbstore数据卷容器,并将dbstore数据卷打包为backup.tar文件,备份至新创建的容器中.

wxl@wxl-pc:~$ docker run --rm --volumes-from dbstore -v $(pwd):/backup ubuntu:14.04 tar cvf /backup/backup.tar /dbdata

这里写图片描述

4.2.恢复,通过-v标志,将数据恢复到同一个容器或者其他任意容器.

wxl@wxl-pc:~$ docker run -v /dbdata --name dbstore2 ubuntu:14.04 /bin/bash

4.3.迁移,其实就是通过解压方式,将dbstore数据卷容器的数据解压至一个新的容器.

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"

这里写图片描述

5.Docker Hub常见操作

Docker Hub是Docker官方提供的容器管理工程,类似与github,不同在于在Docker Hub中搜索存放的不是源码而是容器.
Docker Hub可以存放我们创建的容器,如果是公开的则大家都以拿来用,也支持不公开.

5.1.首先注册Docker Hub账号,然后登陆

wxl@wxl-pc:~$ docker login

这里写图片描述

登陆信息存放在了$HOME/.docker/config.json下.

5.2.查找并下载需要的容器

#查找
wxl@wxl-pc:~$ docker search centos
#下载
wxl@wxl-pc:~$ docker pull centos

这里写图片描述

5.3.推送到Docker Hub上

使用docker push yourname/newimage来push自己的容器到hub上.

wxl@wxl-pc:~$ docker push mycentos:mydev

这里写图片描述

目录
相关文章
|
16天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
155 77
|
25天前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
3天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
27 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
9天前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
29 3
实战~如何组织一个多容器项目docker-compose
|
18天前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
60 3
|
25天前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
64 7
|
25天前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
32 5
|
25天前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
53 4
|
25天前
|
负载均衡 网络协议 算法
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
58 3
|
25天前
|
存储 安全 数据中心
Docker 容器凭借轻量级和高效的特性,成为应用部署的重要工具
Docker 容器凭借轻量级和高效的特性,成为应用部署的重要工具。本文探讨了 Docker 如何通过 Namespace 和 Cgroups 实现 CPU、内存、网络和存储资源的隔离,提高系统安全性和资源利用率,以及面临的挑战和应对策略。
43 1