5. Docker学习之路 —— Docker容器数据卷

Docker学习之路 —— Docker容器

      • 1. 容器数据卷概念
      • 2. 容器数据卷特点
          • ① 数据卷可在容器之间共享或重用数据。
          • ② 数据卷中的更改可以直接生效。
          • ③ 数据卷中的更改,不会包含在镜像中的更新。
          • ④ 数据卷的生命周期一直持续到没有容器使用它为止。
      • 3. 开始使用数据卷(以tomcat的webapps目录为例)
      • 4. 容器数据卷三种挂载方式
          • ① 具名挂载(docker run -v 挂载名称:容器内绝对路径)
          • ② 匿名挂载(docker run -v 容器内绝对路径)
          • ③ 指定宿主机路径挂载(docker run -v 宿主机绝对路径:容器内绝对路径)
      • 5. 容器卷权限(以匿名挂载为例)
          • ① 只读(docker run -v 容器内绝对路径:ro)
          • ① 可读写(docker run -v 容器内绝对路径:rw)
      • 6. 实战-单个容器数据卷挂载(以Mysql为例)
          • ① 创建mysql容器
          • ② 此时我们来连接mysql,连接成功,说明我们容器创建成功。此时宿主机下的/home/docker/mysql目录下就会同步生成conf和data两个目录。
      • 7. 多个容器数据卷同步
      • 8. 实战-多个容器数据卷挂载(以Mysql为例)
          • ① 创建mysql01容器
          • ① 创建mysql02容器

1. 容器数据卷概念

Docker 容器数据卷是容器在运行过程中持久化数据的一种方式,卷是目录或文件,存在于一个或多个容器中,由Docker 挂载到容器,但不属于联合文件系统,因此能够绕过Union File System 提供一些用于持续存储或共享数据的特性;卷的设计目的就是数据持久化,完全独立于容器的生命周期,因此Docker不会在容器删除时,删除其挂载的数据卷。

2. 容器数据卷特点

① 数据卷可在容器之间共享或重用数据。
② 数据卷中的更改可以直接生效。
③ 数据卷中的更改,不会包含在镜像中的更新。
④ 数据卷的生命周期一直持续到没有容器使用它为止。

3. 开始使用数据卷(以tomcat的webapps目录为例)

## 交互式启动tomat02:2.0容器,映射宿主机端口为3443,挂载webapps目录
docker run -it -p 3443:8080 -v /home/docker/tomcat02-2.0/webapps:/usr/local/tomcat/webapps tomcat02:2.0

在宿主机/home/tomat/webapps目录下创建一个test.txt文件,并填写内容:“hello, 容器数据卷.”,这时我们进入tomcat02:2.0容器内/usr/local/tomcat/webapps目录下,就会产生同样内容的test.txt文件;反之容器内/usr/local/tomcat/webapps目录下创建文件或目录,宿主机/home/tomat/webapps目录下同样也会产生同样的文件或目录。

当容器停止后,在宿主机/home/tomat/webapps目录下增删改内容后,容器再次启动后,仍然会进行数据同步。

4. 容器数据卷三种挂载方式

① 具名挂载(docker run -v 挂载名称:容器内绝对路径)

具名挂载后,会在docker工作目录下的volumes目录下生成挂载名称的目录

② 匿名挂载(docker run -v 容器内绝对路径)

匿名挂在,会在docker工作目录下的volumes目录下生成ID目录

③ 指定宿主机路径挂载(docker run -v 宿主机绝对路径:容器内绝对路径)

指定宿主机路径挂载,顾名思义,就是指定的宿主机的路径

5. 容器卷权限(以匿名挂载为例)

① 只读(docker run -v 容器内绝对路径:ro)

容器只有只读权限,无法写。(一般是一些外部配置文件是只读权限。)

① 可读写(docker run -v 容器内绝对路径:rw)

容器可读可写,不设置权限,也就是说,可以反向同步;默认为rw。(像数据库等容器,需要可读写数据权限)

6. 实战-单个容器数据卷挂载(以Mysql为例)

① 创建mysql容器
## 搜索mysql
docker search mysql

## 下载mysql:5.7镜像
docker pull mysql:5.7

## 后台启动mysql,映射宿主机端口为3443,指定宿主机路径挂载mysql的my.cnf文件以及data目录,并配置mysql密码(-e MYSQL_ROOT_PASSWORD=密码)
docker run -d -p 3443:3306 -v -e MYSQL_ROOT_PASSWORD=密码 /home/docker/mysql/data:/var/lib/mysql -v /home/docker/mysql/conf:/etc/mysql/my.cnf mysql:5.7
② 此时我们来连接mysql,连接成功,说明我们容器创建成功。此时宿主机下的/home/docker/mysql目录下就会同步生成conf和data两个目录。

当我们在mysql中创建一个test数据库后,宿主机的/home/docker/mysql/data目录下也同步生成了test目录。
5. Docker学习之路 —— Docker容器数据卷_第1张图片

7. 多个容器数据卷同步

docker run -it --volumes-from 需要同步的容器ID或容器名称 镜像ID/镜像名称

多个容器中,删除任何一个容器(包括父容器),数据同步仍然生效,由此可证明,多个容器数据卷同步是相互同步的。

8. 实战-多个容器数据卷挂载(以Mysql为例)

① 创建mysql01容器
## 后台启动mysql01,映射宿主机端口为3443,指定宿主机路径挂载mysql01的my.cnf文件以及data目录,并配置mysql01的密码(-e MYSQL_ROOT_PASSWORD=密码)
docker run -d -p 3443:3306 -v -e MYSQL_ROOT_PASSWORD=密码 /home/docker/mysql/data:/var/lib/mysql -v /home/docker/mysql/conf:/etc/mysql/my.cnf mysql:5.7
① 创建mysql02容器
## 后台启动mysql02,映射宿主机端口为4554,继承mysql01的数据卷,并配置mysql02的密码(-e MYSQL_ROOT_PASSWORD=密码)
docker run -d -p 4554:3306 --volumes-from mysql01 mysql:5.7

你可能感兴趣的:(Linux软件安装,操作系统,后端,docker,tomcat,运维)