目录
[1. 讲述](#1. 讲述)
[2. 应用场景](#2. 应用场景)
[1. 命令](#1. 命令)
[2. tomcat镜像](#2. tomcat镜像)
[3. 挂载数据卷](#3. 挂载数据卷)
[4. 项目部署在数据卷](#4. 项目部署在数据卷)
一、数据管理
1. 讲述
Docker 的数据管理主要涉及到两个方面:数据卷(Volumes)和绑定挂载(Bind Mounts)。
-
数据卷(Volumes):数据卷是 Docker 提供的一种数据管理方式,它在 Docker 主机上创建一个特殊的目录,可以直接由容器访问。数据卷的主要优点是数据的持久性和数据共享。即使容器被删除,数据卷中的数据也不会丢失,可以被其他容器使用。
创建数据卷的命令是
docker volume create
,使用数据卷的命令是docker run -v volume-name:/path/in/container
。 -
绑定挂载(Bind Mounts):绑定挂载允许您将 Docker 主机上的任何目录挂载到容器中。这种方式的优点是数据的实时性,任何在主机上对这个目录的修改都会立即反映到容器中。
使用绑定挂载的命令是
docker run -v /path/on/host:/path/in/container
。
请注意,数据卷和绑定挂载都可以在
docker run
命令中使用-v
或--volume
选项来指定。但是,数据卷和绑定挂载的语法有所不同,数据卷使用的是volume-name:/path/in/container
,而绑定挂载使用的是/path/on/host:/path/in/container
。
2. 应用场景
数据卷(Volumes)
-
数据持久化:数据卷可以在容器之间或者在容器重启后保持数据的持久化。即使容器被删除,数据卷中的数据也不会丢失。
-
数据共享:数据卷可以被多个容器同时挂载,实现容器间的数据共享。这对于需要多个容器共享数据的场景非常有用。
-
备份、恢复和迁移:数据卷可以方便地进行备份和恢复,也可以用于容器的数据迁移。
-
性能优化:数据卷的性能通常优于绑定挂载,因为数据卷跳过了主机文件系统的一些用户空间和权限检查。
-
与 Docker 插件集成:数据卷可以与 Docker 插件集成,实现更多的功能,比如数据加密、数据复制等。
绑定挂载(Bind Mounts)
- 分布式文件系统:在分布式系统中,多个计算机节点可以通过绑定挂载将共享的文件系统挂载到本地目录上,实现文件的共享和访问。这样可以方便地在不同节点之间共享数据和资源。
- 数据存储和备份:绑定挂载可以将外部存储设备(如硬盘、网络存储等)挂载到计算机的文件系统中,实现数据的存储和备份。这样可以方便地扩展存储容量,同时也可以提高数据的可靠性和可用性。
- 虚拟化环境:在虚拟化环境中,绑定挂载可以将虚拟机的磁盘镜像挂载到宿主机的文件系统中,实现虚拟机的启动和管理。这样可以方便地管理和迁移虚拟机,同时也可以提高虚拟机的性能和可靠性。
- 容器化应用:在容器化应用中,绑定挂载可以将宿主机的目录挂载到容器中,实现容器和宿主机之间的数据共享。这样可以方便地在容器中访问宿主机的文件和目录,同时也可以提高容器的性能和可靠性。
总的来说,绑定挂载和数据卷都可以实现数据的持久化和共享,但它们适用的场景略有不同。绑定挂载更适合需要在主机和容器之间共享特定文件或目录的场景,而数据卷更适合需要在容器之间共享数据,或者需要数据持久化的场景。
二、数据卷的应用
为了很好的实现数据保存和数据共享,Docker提出了Volume这个概念,简单的说就是绕过默认的联合 文件系统,而以正常的文件或者目录的形式存在于宿主机上。又被称作数据卷。
数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:
- 数据卷 可以在容器之间共享和重用
- 对 数据卷 的修改会立马生效
- 对 数据卷 的更新,不会影响镜像
- 数据卷 默认会一直存在,即使容器被删除
1. 命令
创建数据卷
docker volume create v1 (v1是名称,可以自己修改)
查看所有数据卷
docker volume ls

查看数据卷信息
docker volume inspect v1 (v1是名称,根据名称查看)
删除一个volume
docker volume rm v1 (v1是名称,根据名称删除)
数据卷 是被设计用来持久化数据的,它的生命周期独立于容器,Docker不会在容器被删除后自动 删除数据卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷,无主的数据卷 可能会占据很多空间,所以要及时删除.
2. tomcat镜像
开放端口
虚拟机的端口没有开发端口需要先开发端口,如何虚拟机的端口已经开放,就可以直接安装并创建tomcat镜像及容器
开放端口命令 :firewall-cmd --zone=public --add-port=8080/tcp --permanent (开放8080)
之后更新端口:firewall-cmd --reload
查看已开放的端口:firewall-cmd --zone=public --list-ports
安装并创建
命令: docker run -itd --name t1 -p 8080:8080 tomcat:8.5.20

其中 t1 是tomcat容器的名称(可以自己修改),前面的8080为主机端口(主机端口可以自己修改),后面的8080为虚拟机端口(尽量不用修改),tomcat:8.5.20中的8.5.20Tomcat的版本。如果命令中没有 :8.5.20,后面只带 tomcat,就会默认为最新的版本
之后就可以在自己的主机(自己的电脑)上的浏览器,通过访问虚拟机ip访问到tomcat。

3. 挂载数据卷
实现共享
数据卷中的数据是共享的,先挂载一个数据卷并且创建一个容器,容器名称为 c1。
命令: docker run -it --name c1 --mount source=v1,target=/testdir centos

在创建一个容器并且挂载相同的数据卷,容器名称为 c2
命令: docker run -it --name c2 --mount source=v1,target=/testdir centos

命令中 --name 后面的c1和c2,是容器名称可以自己修改,source=v1中的v1是挂载的数据卷名称,/testdir 是创建容器后创建这个路径来共享数据资源。
在c1容器中,创建一个文件,命令:touch a.txt

之后,进入文件,在c2容器中的共享文件中可以看到,c1容器中创建的文件

删除容器,数据依然在
查看容器的信息:docker inspect v1 (v1容器名称)
找到容器存放数据的路径,并且查看在数据卷中的数据。

输入命令:exit (退出容器)
输入命令删除所有容器:docker rm -f $(docker ps -aq)

删除之后,再查看其中的数据依然还在,不会随着容器的删除而删除。

4. 项目部署在数据卷
复制数据卷的路径,在左边路径窗口中窗口到跟目录,将本机的war包拖进去。
/var/lib/docker/volumes/v1/_data

获取到tomcat的webapps文件的全路径,如:/usr/local/tomcat/webapps,进入tomcat中可以用命令:pwd 获取当前的跟路径。

将数据卷中的项目挂载到tomcat的webapps文件中,并且启动tomcat。
命令 :
cobol* docker run -itd \ * --name t 1 \ * -p 8080: 8080 \ * --mount source =v 1,target = /usr /local /tomcat /webapps \ * tomcat: 8.5.20
t1 是容器名称,target后面的路径是将项目挂载到tomcat中。
之后,在本机访问,虚拟机的IP加项目路径即可访问项目:

三、目录挂载
使用目录挂载,将目录中的文件挂载
在虚拟机跟目录下创建一个文件夹:mkdir soft (名称soft,可以自己修改)

将项目的war包拖入到该文件夹中:
方法一:
输入命令 :
docker run -itd \
--name t1 \
-p 8080:8080 \
-v /soft:/usr/local/tomcat/webapps \
tomcat:8.5.20

其中的 t1 为容器名称,/soft为虚拟机的路径中的文件,而将这些文件挂载到tomcat的/usr/local/tomcat/webapps路径中,并且启动运行
在主机访问:
方法二:
在文件夹中指定文件挂载,并且指定挂载后的文件名称,输入命令 :
cobol* docker run -itd \ * --name t 1 \ * -p 8080: 8080 \ * -v /soft /oapro.war: /usr /local /tomcat /webapps /oapro.war \ * tomcat: 8.5.20

其中的 t1 为容器名称,/soft/oapro.war为虚拟机的路径中的文件中指定的挂载文件,而将这个文件挂载到tomcat的/usr/local/tomcat/webapps路径中指定名称为oapro.war,并且启动运行
在主机访问:
四、完善Tomcat配置
将本地的tomcat,找到/conf/tomcat-users.xml,的tomcat-users.xml文件,复制到桌面进行修改该文件,如图:
修改如下:

<role rolename="manager-gui"/>
<user username="tomcat" password="123456" roles="manager-gui"/>
将本地的tomcat,找到/webapps/manager/META-INF/context.xml,的context.xml文件,复制到桌面进行修改该文件,如图:
修改如下:

之后将这两个文件拖到虚拟机中
之后输入命令:docker run -itd \
--name t1 \
-v /soft/tomcat-users.xml:/usr/local/tomcat/conf/tomcat-users.xml \
-v /soft/context.xml:/usr/local/tomcat/webapps/manager/META-INF/context.xml \
-p 8080:8080 \
tomcat:8.5.20

之后主机访问如图:
每篇一获
学习在Linux中使用Docker的数据管理技术可以带来以下收获:
-
数据隔离和持久化:Docker提供了多种数据管理技术,如数据卷(Volumes)、绑定挂载(Bind Mounts)和临时文件系统(Tmpfs),可以实现数据的隔离和持久化。通过使用这些技术,您可以将数据与容器分离,使得容器的生命周期与数据的生命周期独立,方便数据的管理和迁移。
-
数据共享和共享卷:Docker的数据管理技术可以实现容器之间的数据共享。通过创建共享卷(Shared Volumes),多个容器可以访问和共享同一份数据,方便实现容器之间的通信和协作。
-
数据备份和恢复:使用Docker的数据管理技术,您可以方便地对容器中的数据进行备份和恢复。通过创建数据卷或使用绑定挂载,您可以将容器中的数据保存到外部存储设备中,以便在需要时进行恢复。
-
数据迁移和部署:Docker的数据管理技术可以帮助您实现容器的数据迁移和部署。通过将数据卷或绑定挂载与容器分离,您可以方便地将容器和数据分别部署到不同的环境中,实现快速的应用部署和迁移。
总的来说,学习在Linux中使用Docker的数据管理技术可以提高数据的管理效率和灵活性,同时也方便了容器的部署和迁移。这些技术可以帮助您更好地利用Docker来构建和管理应用程序。