Docker「实战篇」从docker走向k8s进阶Docker容器

「走进k8s」Docke数据共享和持久化(五)

2019-07-31  本文已影响20人  IT人故事会

原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!
原文链接地址:「走进k8s」Docke数据共享和持久化(五)

上次说了如何使用dockerhub和如何搭建私有仓库,上次给大家留了个悬念,就是关于-v,如果容器删除了如何保存数据,就是通过挂载主机目录和数据卷的概念。

(一)数据卷

看下redis对应的Dockerfile,里面有个VOLUME,VOLUME就是数据存储的标识。
数据卷是一个可供一个或多个容器使用的特殊目录,它绕过UFS(UNIX文件系统的)

docker run --name some-redis -d -p 6379:6379 redis 
docker volume ls

docker volume ls 发现有很多个,不知道那个是具体刚创建的关联的数据卷

docker inspect some-redis

这个是数据卷,跟刚才的docker volume中的第二个是一样的ID

查看volume单独的描述

docker volume inspect ID
docker run --name some-redis -d -p 6380:6379 redis 

发现增加了一个volume。每次创建都有增加一个volume

结论不会发生任何的变化,原来4条还是4条。

docker volume rm <volumeID>

创建了一个volume的名称

docker volume create redis_volume
docker run --name some-redis3 -d -p 6380:6379 -v redis_volume:/usr/local/etc/redis/redis.conf redis 
docker volume inspect redis_volume

1.数据卷 可以在容器之间共享和重用。
2.对 数据卷 的修改会立马生效。
3.对 数据卷 的更新,不会影响镜像。
4.数据卷 默认会一直存在,即使容器被删除。保护数据不被删除。

(二)主机目录

主机上的目录可以是一个本地目录,也可以在一个 NFS share 内,或者在一个已经格式化好了的块设备上。其实这种形式和第一种没有本质的区别,容器内对 /usr/local/etc/redis/redis.conf 的操作都会反映到主机上的 /root 目录内。只是,重新启动容器时,可以再次使用同样的方式来将 /root 目录挂载到新的容器内,这样就可以实现数据持久化的目标。

docker run --name some-redis4 -d -p 6381:6379 -v $(pwd):/usr/local/etc/redis/redis.conf redis 
docker inspect some-redis4

$(pwd) 指的是当前目录(也还就是/root),也可以指定特定目录。一般来说常用的软件例如redis,mysql,nginx 里面的配置文件都在外边挂载的,但是redis,mysql可能特殊一点,经常把数据文件也挂载在指定的主机目录,我的mac电脑内存太低了。容器启动后影响电脑的速度,不用就删除,用的时候启动,反正数据都在主机的目录下。

(三)Flocker:容器的分布式存储平台

原生的 Docker volume 不具备可移植性。于是,出现了Docker 的分布式卷解决方案 Flocker。这次不做详解,以后k8s的时候会重点说的。

Flocker 的结构:

PS:数据卷在容器管理平台使用非常频繁,如果是本机安装一个软件的话,建议使用主机目录,因为自己来管理,目录还是比较方便的。

上一篇下一篇

猜你喜欢

热点阅读