生产环境中使用Docker的过程中,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,
这必然涉及容器的数据管理操作。容器中管理数据主要有两种方式:
1 | 数据卷(Data Volumes): |
数据卷的使用
- 数据卷是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似Linux 的mount挂载
1 | 数据卷的特性: |
创建数据卷
- 在用docker run 命令的时候,使用 -v 标记可以在容器内创建一个数据卷。多次重复使用 -v 标记可以创建多个数据卷。
- 用户可以将一些程序或数据放到本地目录中,然后在容器内运行和使用。
- 另外,本地目录的路径必须是绝对路径,如果目录不存在,Docker会自动创建。
1 | -v /data |
1 | 1. 准备好host挂载目录和里面的文件 |
- 很方便的在你进行数据修改的时候,直接修改本地文件就行了,容器直接就会同步了
- 提前都建好目录,再挂载上去,容器down没关系,数据都在指定的目录下
1 | 1. docker 挂载数据卷的默认权限是读写(rw) ,我们也可以改权限 |
Docker 安装 Nginx 并使用数据卷管理
拉取官方镜像1.16.1
1 | [root@linux-node1 data]# docker pull nginx:1.16.1 |
查看镜像
1 | [root@linux-node1 data]# docker images nginx:1.16.1 |
使用 NGINX 默认的配置来启动一个 Nginx 容器实例
1 | [root@linux-node1 data]# docker run -d -p 8000:80 --name web1 nginx:1.16.1 |
1 | [root@linux-node1 data]# docker ps |
- 在浏览器中打开 http://10.0.0.100:8000/
使用容器卷管理 nginx
1 | 1. 创建目录 |
1 | 2. 拷贝容器内 Nginx 默认配置文件到本地当前目录下的 conf 目录 |
1 | 3. 启动挂载目录 |
1 | 4. 进入host的首页目录 上传测试文件 |
1 | 5. 测试访问页面 |
1 | 6. 相关命令 |
1 | 7. 查看日志 |
测试修改代码
- 修改host上首页的title标题
1 | [root@linux-node1 www]# vim index.html |
多端口映射
- 基于多端口多站点
- 80是主页,81端口是游戏,在host上写一个81的配置文件挂载上去
1 | [root@linux-node1 conf]# pwd |
1 | # 启动容器并挂载配置 |
1 | # 日志查看 |
数据卷容器
- 如果数据在需要在多个容器之间共享,最简单的方式是使用数据卷容器。
- 数据卷容器也是一个容器,但是它的目的是专门用来提供数据卷供其他容器挂载。
- 不管数据卷容器是否运行 都可以访问到
- –volumes-from
volumes-from
- 启动一个容器挂载一个目录,其他的容器都不用挂载了,直接–volumes-from 这个容器
1 | [root@linux-node1 ~]# docker run -it --name volume_test -v /data/tools/:/data/tools centos:7 |
总结
现在我们有数据层(镜像层和容器层)和 volume 都可以用来存放数据,具体使用的时候要怎样选择呢?
考虑下面几个场景:
1 | - Database 软件 vs Database 数据 |
- 相信大家会做出这样的选择:
1 | 前者放在数据层中。因为这部分内容是无状态的,应该作为镜像的一部分。 |
- 如何使用
1 | -v /data/nginx/www:/usr/share/nginx/html |
1 | 即使容器销毁,数据也还在,mount的是 host 文件系统中的数据,只是借给容器用用,哪能随便就删了啊 |
1 | 使用场景: |