每天5分钟玩转容器技术-读书笔记-第六章
前言
因为开发过程中各种环境的部署是一件让人非常头疼的事情,所以容器技术一直是笔者比较感兴趣的技术领域,工作之余找到了一本国人写的容器好书 每天5分钟玩转Docker容器技术,书名看起来比较不靠谱,实际在豆瓣评分中高居前列,评论也纷纷表扬该书是本入门的好书。这系列文章是该书的读书笔记。笔者主要以 问题和解答 作为读书笔记的写作形式,这样可以方便大家准备面试。
系列文章:
每天5分钟玩转容器技术-读书笔记-第一章到第三章
每天5分钟玩转容器技术-读书笔记-第四章到第五章
容器
-
简单说说docker提供的几种存储数据的方式?
docker提供两种存储数据的方式。
- storage driver:docker启动时默认会选择宿主机的storage driver,driver中适合保存无状态容器的临时数据,随着容器的销毁而销毁。
- data volume: data volume适合存储有状态容器的数据,比如数据库系统的数据库文件。
-
对于data volume,docker提供了两种类型的volume,简单说说
-
bind mount:将host上已经存在的目录或者文件mount到容器的文件系统中。
ging@ubuntu:~$ sudo docker run -d -p 81:80 -v ~/htdocs:/usr/local/apache2/htdocs:ro httpd //ro表示容器中不能修改文件,只能读。
- 应用场景:
- 把host中的源代码直接mount到容器中,host修改源代码后,容器可以实时显示最新效果。
- 把mysql中的数据放在bind mount中,可以方便host备份迁移数据。
- 缺点:因为需要指定host的具体目录,可移植性较差。
- 应用场景:
-
docker managed volume:使用时不需要指定mount的源(由docker指定一个本地的路径),只需要指定mount point即可。
ging@ubuntu:~$ sudo docker run -d -p 82:80 -v /usr/local/apache2/htdocs httpd
- 优点:因为由docker选择的源目录,不需要自己指定,所以可移植性强
- 缺点:
- 不支持单个文件的mount,只能支持文件夹
- 默认读写权限都有,不可以控制单独的读写权限
-
-
容器和host如何共享数据?
可以通过两种方式实现共享。
-
bind mount:指定一个本地目录,然后容器启动的时候mount过去即可
-
docker managed volume:这个需要注意下,因为host的目录是在容器启动后才生成的,所以需要再手动复制需要共享的内容到mount源目录即可。
ging@ubuntu:~/htdocs$ sudo docker cp index.html 24b3:/usr/local/apache2/htdocs
-
-
容器和容器之间如何共享数据?
-
bind mount:可以通过多个容器指定同一个mount源路径,实现容器之间共享数据
-
volume container:一个专门用于mount的容器(不需要运行),其他容器mount到这个volume容器即可实现共享
创建volume container ging@ubuntu:~/htdocs$ sudo docker create --name vc_data -v ~/htdocs:/usr/local/apache2/htdocs -v /other/useful/tools busybox 查看volume container mount配置 ging@ubuntu:~/htdocs$ sudo docker inspect vc_data 把其他容器mount到这个容器中 ging@ubuntu:~/htdocs$ sudo docker run -d -p 80 --volumes-from vc_data httpd
-
data-packed volume container:需要利用Dockerfile构建一个新的镜像,构建镜像的时候就把host的文件存入镜像文件中(初始化一个统一的内容),并且指定了一个docker managed volme的目标路径,这样volume容器就和本地的一个路径自动关联起来了,其他容器需要--volumes-from 关联这个容器,即可实现数据共享。
- Dockerfile:
FROM busybox:latest ADD htdocs /usr/local/apache2/htdocs VOLUME /usr/local/apache2/htdocs
- 构建指令:
ging@ubuntu:~/datapack$ sudo docker build -t datapack .
- 优点:创建volume容器的时候不需要像第二种方式需要再手动指定 -v /other/useful/tools了,可移植性最强(因为镜像中已经包含了需要共享的文件)。
-
-
如何进行data volume的备份 恢复 迁移和删除?
- 备份:因为data volume对应的就是我们host中的文件,所以定期备份文件系统中的文件即可
- 恢复:如果数据损坏了,可以利用之前备份的问题复制到对应的容器mount文件夹即可
- 迁移:如果想使用更新版本的镜像,可以利用-v直接把本地的文件夹mount到新容器中即可
- 删除:
- bind mount的本地路径,docker不会进行维护,需要手动删除
- docker managed volume,可以通过指定 sudo docker rm -v 删除容器的时候一起删除volume