25 04 2021

前言

本节主要学习使用Volume实现容器间数据共享。

Volume

1、什么是Volume?

Volume 翻译是容量的意思,但在计算机中我们称它为数据卷,是一个保存数据的单位。

docker中我们使用Volume来进行数据共享。

2、为什么要进行数据共享呢?

上图中我们自定义了镜像,而在实际运行中,每个一个容器中都会有相同文件的多个副本。

在这里就会衍生出来一个问题,如果我的页面文件发生了变化,那就意味着每一个容器中对应的页面都要进行更新,如果我们只有1~2个容器还好办,如果有100个容器,那个更新操作那是很恐怖的。

为了解决这个问题就有了Volume这个方案。

3、Volume进行数据共享

3.1、通过设置-v挂载宿主机目录

格式:

  1. docker run --name 容器名 -v 宿主机路径:容器内挂载路径 镜像名

示例:

  1. #创建宿主机目录 /usr/local/projects/webapps/
  2. #并在目录下放置一个web目录,里面包含一个index.html文件
  3. #内容:<h1>test page</h1>
  4. #运行命令并挂载
  5. docker run -d -p 9901:8080 --name t1 -v /usr/local/projects/webapps:/usr/local/tomcat/webapps tomcat
  6. docker run -d -p 9902:8080 --name t2 -v /usr/local/projects/webapps:/usr/local/tomcat/webapps tomcat

但上面这种写法会有一个问题,如果路径中有一个字母或者大小写不一样,就会挂载失败。为了解决这个问题,下面介绍第二种方法。

3.2、通过—volumes-from 共享容器内挂载点

格式:

  1. #首先要创建共享容器,无需运行
  2. docker create --name 容器名 -v 宿主机路径:容器内挂载路径 镜像名 /bin/true
  3. #然后共享容器挂载点
  4. docker run --volumes-from 共享容器名 --name 容器名 -d 镜像名

示例:

  1. #创建共享容器
  2. docker create --name webpage -v /usr/local/projects/webapps:/usr/local/tomcat/webapps tomcat /bin/true
  3. #共享容器挂载
  4. docker run --volumes-from webpage --name t3 -d -p 9903:8080 tomcat
  5. docker run --volumes-from webpage --name t4 -d -p 9904:8080 tomcat

这种方式好处就是让我们在创建容器时更加简单,挂载点被统一管理。如果需要修改挂载点,只需要修改共享容器的挂载路径即可。

进入容器内部,查看webapps目录:

  1. docker exec -it 5ac8c3438176 /bin/bash
  2. cd webapps
  3. ls
  4. ———————————————————————————————————————
  5. web
  6. #我们看原先的webapps默认目录不见了,已经替换为挂载点的目录。

通过修改挂载目录内容,可以实时更新容器对应的内容。

总结

本节我们学习了使用Volume的两种容器间数据共享方式,在实际开发中使用-v或者—volumes-from,根据对应容器数据决定,推荐使用第二种方式,便于维护。

延伸阅读
  1. Windows下IIS搭建Ftp服务器
  2. Nginx开启Gzip压缩提升页面加载速度
  3. Nginx安装及配置(linux)
  4. Docker(10):Docker-Compose简介及安装
  5. Docker(5):docker镜像分层(layer)
发表评论