芙蓉区网站建设公司,免费网站推广平台,网店托管协议,网站开发工程师面试试题docker在容器中管理数据主要有两种方式#xff1a;
数据卷#xff08;Volumes#xff09;挂载主机目录#xff08;Bind mounts#xff09; 而每个容器的数据都是独立的#xff0c;数据跟随着容器的生命周期。如mysql容器#xff0c;如果容器被删除了所有的数据都会丢失…docker在容器中管理数据主要有两种方式
数据卷Volumes挂载主机目录Bind mounts 而每个容器的数据都是独立的数据跟随着容器的生命周期。如mysql容器如果容器被删除了所有的数据都会丢失。所以容器的数据不能放在容器里面数据卷就用来管理容器中的数据的。 数据卷 为了很好的实现数据保存和数据共享Docker提出了Volume这个概念简单的说就是绕过默认的联合 文件系统而以正常的文件或者目录的形式存在于宿主机上。又被称作数据卷。 数据卷是一个可供一个或多个容器使用的特殊目录它将主机操作系统目录直接映射进容器它可以提供很多有用的特性
数据卷 可以在容器之间共享和重用对数据卷的修改会立马生效对数据卷的更新不会影响镜像数据卷 默认会一直存在即使容器被删除 数据卷作用 将宿主机虚拟机的目录或者文件放到容器中去容器删除了但是数据卷虚拟机的目录里面的内容不受影响)将需要修改的配置文件在外面写好,通过数据卷的形式放到容器中来做替换。 1. 数据卷容器挂载
1.1.创建数据卷
docker volume create my-vol 命令如下 参数可以为数字“1”字母L大小写均可但效果不一样 ls -1 /var/lib/docker/volumes 此时数据卷默认会放到/var/lib/docker/volumes路径下会发现所新建的数据卷位置查看 1.2.查看所有的数据卷
docker volume ls
1.3.查看指定数据卷的详细信息(显示一个JSON格式的数据)
docker volume inspect my-vol 1.4.删除一个volume
docker volume rm my-vol 注数据卷 是被设计用来持久化数据的它的生命周期独立于容器Docker不会在容器被删除后自动删除数据卷并且也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷无主的数据卷可能会占据很多空间所以要及时删除。 1.5.启动一个挂载数据卷的容器
挂载数据卷最好是通过run而非create/start创建启动容器create/start命令创建启动容器后再挂载数据卷相当麻烦要修改很多配置文件但并非不可以
# 示例
docker run -itd \ #-it挂载后会直接进入容器-itd则是在挂载不进入后台运行
--name 容器名字 \
--mount source数据卷名称,target容器中的对应目录 \
镜像名称## demo1docker run -itd \--name tomcat01 \--mount sourcemy-vol,target/webapp \centos:latest## demo2docker run -itd \--name tomcat02 \--mount typebind,source/root/webapp02,target/root/webapp02 \centos:latest 注1linux命令结尾加斜杠有什么用 ? 加了 “ \ ” 意为将最后的回车换行给注释了系统理解为命令还没有结束因而是继续等待用户进行输入直到读到结束符如回车 注2sourcemy-vol,target/webapp my-vol为要挂载的数据卷如果数据卷不存在docker会自动创建 /webapp为容器上目录如果目录不存在 docker会自动创建 注3mount选项高级用法 --mount选项的type参数支持三种类型的数据卷 --mount标志由多个名值对组成逗号分隔每个键值由 key value 元组组成 注4--mount typevolume,sourcemy-vol,target/webapp type的默认值提前先创建数据卷 typevolume普通数据卷(默认即这种类型)映射到主机/var/lib/docker/volumes路径下bind绑定数据卷映射到主机指定路径下 --mount typebind,source/webapp,destination/webapp2 tmpfs 临时数据卷只存在于内存中 docker run -itd \--name tmptest \--mount typetmpfs,destination/app \nginx:latest 注意sourcemy-vol,target/webapp 这个指令会将my-vol内容替换掉webapp的内容所以这中方式一般不用如果需要将指定文件进行挂载就要使用目录挂载 2. 目录挂载 如果用户需要在多个容器之间共享一些持续更新的数据最简单的方式是使用数据卷容器。 数据卷容器也是一个容器但是它的目的是专门提供数据卷给其他容器挂载。 2.1.首先我们在宿主机上创建一个目录用于存放资源 进入创建的tomcat数据卷路径放入一个war包 2.2.Tomcat 挂载目录简化
docker run -itd \
--name t1 \
-v /soft/oapro.war:/usr/local/tomcat/webapps/oapro.war \
-p 8080:8080 \
tomcat:8.5.20
挂载成功访问tomcat 访问资源 3. Tomcat在线部署案例 实现 Tomcat 在线部署是指在 Tomcat 运行的过程中通过上传 WAR 文件或目录来动态地添加、删除或更新 Web 应用程序。这种方式可以避免每次更改应用程序时都要重新启动 Tomcat 的麻烦并大大提高了开发和调试的效率。 点进去报错最初是没有配置登录信息的 1、修改tomcat配置有两个文件需要修改可以直接在本地tomcat找到并修改上传到虚拟机
apache-tomcat-8.5.40\webapps\manager\META-INF\context.xml apache-tomcat-8.5.40\conf\tomcat-users.xml 2、然后重启docker进行目录挂载
docker run -itd \
--name t1 \
-v /soft/tomcat-users.xml:/user/local/tomcat/conf/tomcat-users.xml \
-v /soft/context.xml:/user/local/tomcat/webapps/manager/META-INF/context.xml \
-p 8080:8080 \
tomcat:8.5.40
3、再次访问 Manager App输入配置密码 4、上传资源