02、数据卷(Data Volumes)以及dockefile详解

news2024/11/14 4:17:52

目录

1、Docker 数据管理

2、数据卷(Data Volumes)

3、数据卷容器

4、dockerfile

5、dockerfile基本结构

6、docker使用Dockerfile创建jdk容器

启动虚拟机,进入CentOS

7、dockerfile实践经验


1、Docker 数据管理

在生产环境中使用 Docker ,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及容器的数据管理操作

容器中的管理数据主要有两种方式:
数据卷 Data Volumes 容器内数据直接映射到本地主机环境;
数据卷容器(Data Volume Containers 使用特定容器维护数据卷

注1:上章节还介绍过cp命令在宿主机和docker容器之间复制文件
        docker cp 宿主机绝对路径  容器id:路径

2、数据卷(Data Volumes)

数据卷是一个可供一个或多个容器使用的特殊目录,它将主机操作系统目录直接映射进容器,它可以提供很多有用的特性:
   1.数据卷 可以在容器之间共享和重用
   2.对数据卷的修改会立马生效
   3.对数据卷的更新,不会影响镜像
   4.数据卷 默认会一直存在,即使容器被删除

  

数据卷相关操作:

2.1.创建数据卷

docker volume create my-vol

 此时,数据卷默认会放到/var/lib/docker/volumes路径下,会发现所新建的数据卷位置,查看命令如下:

 ## 参数可以为数字“1”,字母L:大小写均可,但效果不一样 
     ls -1 /var/lib/docker/volumes

2.2.查看所有的数据卷

docker volume ls

2.3.查看指定数据卷的详细信息(显示一个JSON格式的数据)

docker volume inspect my-vol 

2.4.删除一个volume

docker volume rm my-vol

注1:数据卷 是被设计用来持久化数据的,它的生命周期独立于容器,Docker不会在容器被删除后自动删除数据卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷,无主的数据卷可能会占据很多空间,所以要及时删除

## 挂载数据卷,最好是通过run而非create/start创建启动容器
## create/start命令创建启动容器后,再挂载数据卷相当麻烦,要修改很多配置文件,但并非不可以

2.5.启动一个挂载数据卷的容器

## demo1
     docker run -d \
       -it \
       --name tomcat01 \
       --mount source=my-vol,target=/webapp \
       centos:latest


 ## demo2
     docker run -d \
       -it \
       --name tomcat02 \
       --mount type=bind,source=/root/webapp02,target=/root/webapp02 \
       centos:latest        

注1:linux命令结尾加斜杠有什么用
          加了“\”意为将最后的回车换行给注释了,系统理解为命令还没有结束,因而是继续等待用户进行输入,直到读到结束符,如回车

 注2:source=my-vol,target=/webapp
          my-vol为要挂载的数据卷,如果数据卷不存在,docker会自动创建
          /webapp为容器上目录,如果目录不存在, Docker会自动创建   

 注3:mount选项高级用法
          --mount选项的type参数支持三种类型的数据卷
          --mount标志:由多个名值对组成,逗号分隔,每个键值由 <key> = <value> 元组组成 
          1.type=volume普通数据卷(默认即这种类型),映射到主机/var/lib/docker/volumes路径下;   
            --mount type=volume,source=my-vol,target=/webapp
            注:type的默认值,提前先创建数据卷
          2.bind:绑定数据卷,映射到主机指定路径下;
            --mount type=bind,source=/webapp,destination=/webapp2
          3.tmpfs :临时数据卷,只存在于内存中
            docker run -d \
              -it \
              --name tmptest \
              --mount type=tmpfs,destination=/app \
              nginx:latest

3、数据卷容器

如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载

  

数据卷容器相关操作:

3.1.新建数据卷容器

docker run -it -d --name db_data -v /db_data centos:latest

3.2.用容器db1测试数据卷容器是否可用

docker run -it -d --name db1 --volumes-from db_data centos:latest
     docker exec -it db1 bash
     cd db_data
     ## 使用echo命令向db1_test.txt中写入内容
     echo "db1 beifen test" > db1_test.txt

3.3.备份数据卷容器

docker run --rm --name beifen --volumes-from db_data -v /zking:/container_backup centos:latest tar cvf /container_backup/backup.tar /db_data

新建1个名为beifen的(暂时性,之后会删除)容器,由于volumes-from了db_data,所以在根目录下也会生成1个db_data文件夹,经过执行命令后,将db_data文件下的数据压缩在container_backup文件夹下,并存在宿主机上的host_backup_path下

   注:
   1)run:create+start
   2)--rm:创建之后删除容器
   3)--name:容器名称
   4)--volumes-from:来自于哪个数据卷容器的容器NAME
   5)-v:给容器挂载存储卷,挂载到容器的某个目录

3.4.还原数据卷容器

1.新建一个数据卷容器db_data2
       docker run -it -d --name db_data2 -v /db_data centos:latest

2.docker run --rm --name huanyuan --volumes-from db_data2 -v ~/host_backup:/container_backup centos:latest tar xvf /container_backup/backup.tar -C /db_data
       新建1个名为huanyuan的(暂时性,之后会删除)容器,由于volumes-from了db_data2,所以在根目录下也会生成1个db_data文件夹,宿主机上的host_backup_path下的压缩数据映射到了container_backup文件夹下,并解压至db_data文件夹下     

4、dockerfile

dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像,另外,使用Dockerfile去构建镜像好比使用pom去构建maven项目一样,有异曲同工之妙

  

5、dockerfile基本结构

dockerfile基本结构
   Dockerfile 由一行行命令语句组成, 并且支持以#开头的注释行,一般而言, Dockerfile 主体内容分为四部分:
   基础镜像信息、 维护者信息、 镜像操作指令和容器启动时执行指令。

   部分                                   命令
   基础镜像信息                     FROM
   维护者信息                        MAINTAINER
   镜像操作指令                    RUN、(COPY/ADD)、EXPOSE、WORKDIR、ONBUILD、USER、VOLUME等
   容器启动时执行指令          CMD、ENTRYPOINT

6、docker使用Dockerfile创建jdk容器

启动虚拟机,进入CentOS

6.1 创建文件夹上传jdk的安装包,和在同级目录下编写Dockerfile文件
      $ mkdir –p /zking/java
      # 注意d是大写
      $ touch Dockerfile 

      将jdk-8u221-linux-x64.tar.gz上传到Linux或者使用cp命令复制一个本地已经有的jdk-8u221-linux-x64.tar.gz文件到指定目录中
      $ cp /lky/tools/jdk-8u221-linux-x64.tar.gz /zking/java

6.2 编写 Dockerfile 文件
      6.2.1 vi Dockerfile进入编辑模式
      :wq  #退出并保存文件
      :q!  #退出不保存文件
      按i键进入insert编辑模式

      6.2.2 指定基础镜像,并且必须是第一条指令
      FROM centos:latest

      6.2.3 指明该镜像的作者和其电子邮件

      MAINTAINER zs "zs@qq.com"

      6.2.4 在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录

      WORKDIR /zking/java

      6.2.5 一个复制命令,把jdk安装文件复制到镜像中,语法:ADD <src>... <dest>,注意:jdk*.tar.gz使用的是相对路径

      ADD jdk-8u151-linux-x64.tar.gz /zking/java/
      注:如果在宿主机的当前路径下,文件直接使用相对路径即可;

      6.2.6 配置环境变量

      ENV JAVA_HOME=/zking/java/jdk1.8.0_151
      ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
      ENV PATH=$JAVA_HOME/bin:$PATH
      #容器启动时需要执行的命令
      #CMD ["java","-version"]

6.3 执行Dockerfile文件,初次依赖镜像的时候会下载相应镜像
      docker build -t jdk8:v1.0 .
      注1:-t  jdk8:v1.0  给新构建的镜像取名为 jdk8, 并设定版本为v1.0
      注2:注意最后有个点,代表使用当前路径的 Dockerfile 进行构建 

6.4 查看镜像

      docker images

6.5 创建并启动容器

      docker run -it jdk8:v1.0 /bin/bash

6.6 检查是否有问题

      javac

7、dockerfile实践经验

1. 精简镜像用途:尽量让每个镜像的用途都比较集中单一,避免构造大而复杂、多功能的镜像
2. 选用合适的基础镜像:容器的核心是应用,选择过大的父镜像(如CentOS系统镜像)会造成最终生成应用镜像的臃肿,推荐选用瘦身过的应用镜像或者较为小巧的系统镜像(alpine)

附录一:SecureCRT上传文件到Linux服务器上
1. 输入rz命令,看是否已经安装了lrzsz,如果没有安装则执行 apt install lrzsz -y 命令进行安装。
2. 安装成功后,输入rpm命令确认是否正确安装
3. 使用 rz -y命令进行文件上传,此时会弹出上传的窗口
还可以通过sz下载文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/57137.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

混合动力电动车优化调度与建模(发动机,电机,电池组等组件建模)(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f4dd;目前更新&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;电力系统相关知识&#xff0c;期刊论文&…

6-4布线问题(分支限界)

6-4布线问题&#xff08;分支限界&#xff09; 一、问题描述 印刷电路板将布线区域划分成m*n个方格阵列,如图(1)所示。 精确的电路布线问题要求确定连接方格a的中点到方格b的中点的最短布线方案。 在布线时,电路只能沿直线或直角布线,如图(2)所示。 为了避免线路相交&#xf…

C语言第十二课(下):操作符详解【逗号表达式、下标引用、函数调用、结构成员操作符与操作符属性】

目录 前言&#xff1a; 一、逗号表达式&#xff08;exp1&#xff0c;exp2&#xff0c;exp3&#xff0c;...&#xff0c;expN&#xff09;&#xff1a; 二、下标引用、函数调用和结构成员[ ]、( )、. 、->&#xff1a; 1.下标引用操作符[ ]&#xff1a; 2.函数调用操作符( …

Tomcat过时了?别多想,很多公司还是在用的。这份Tomcat架构详解,真的颠覆你的认知

Tomcat 不但没有过时&#xff0c;Spring Boot 还给 Tomcat 第二春了。 微服务的兴起&#xff0c;Tomcat 针对很多应用已经做成 embedded 模式了&#xff0c;Tomcat 本身是容器&#xff0c;Tomcat 的出现就是为了解决但是 EJB 和 Weblogic&#xff0c;JBoss 这种大而全的大象导致…

C++ OpenCV【视频合并:多个图像拼接在一张图像】

提示&#xff1a;本文中视频拼接指的是将多张图像按空间合并在一张图像上&#xff0c;而不是将多张图像按时间顺序拼接成一个多帧片段。 文章目录 前言 一、OpenCV知识点 1.OpenCV裁剪矩形区域赋值 2.OpenCV将Mat粘贴到指定位置 二、程序样例 1.程序源码 2.运行结果 前言 C版…

[附源码]Python计算机毕业设计Django姜太公渔具销售系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

看完这篇,还不懂JAVA内存模型(JMM)算我输

前言 开篇一个例子&#xff0c;我看看都有谁会&#xff1f;如果不会的&#xff0c;或者不知道原理的&#xff0c;还是老老实实看完这篇文章吧。 Slf4j(topic "c.VolatileTest") public class VolatileTest {static boolean run true;public static void main(Str…

一个简单的HTML网页 个人网站设计与实现 HTML+CSS+JavaScript自适应个人相册展示留言博客模板

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

Ubtunu排查磁盘空间是否已满—并清理的方式

项目场景&#xff1a; 最近使用nodejs开发的后端项目部署到Ubtunu服务器后接口无法访问了&#xff0c;接口也调用不通&#xff0c;NGINX报502错误。 问题描述 使用远程连接工具传文件也是无法上传&#xff0c;提示找不到文件&#xff0c;SCP命令也无法上传。 scp传文件报错&…

一文教会你如何在内网搭建一套属于自己小组的在线 API 文档?

Hello&#xff0c;大家好&#xff0c;我是阿粉&#xff0c;对接文档是每个开发人员不可避免都要写的&#xff0c;友好的文档可以大大的提升工作效率。 阿粉最近将项目的文档基于 Gitbook 和 Gitlab 的 Webhook 功能的在内网部署了一套实时的&#xff0c;使用起来特方便了。跟着…

第二证券|11月十大牛股出炉 特一药业163%涨幅问鼎榜首

到11月30日收盘&#xff0c;11月份十大牛股中7只个股涨幅超过100%&#xff0c;涨幅最小的也有87%&#xff0c;均匀涨幅较上个月有所扩大。 11月&#xff0c;A股出现震荡爬高态势&#xff0c;到11月30日收盘&#xff0c;上证指数月内涨8.91%&#xff0c;深证成指涨6.84%&#xf…

大学生HTML作业节日网页 HTML作业节日文化网页期末作业 html+css+js节日网页 HTML学生节日介绍 HTML学生作业网页视频

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

基于STM32单片机的温湿度检测报警器(数码管)(Proteus仿真+程序)

编号&#xff1a;27 基于STM32单片机的温湿度检测报警器&#xff08;数码管&#xff09; 功能描述&#xff1a; 本设计由STM32F103单片机最小系统DHT11温湿度传感器数码管显示模块声光报警模块独立按键组成。 1、主控制器是STM32F103单片机 2、DHT11传感器测量温度和湿度数据…

Android注解快速入门和实用解析

首先什么是注解&#xff1f;Override就是注解&#xff0c;它的作用是&#xff1a; 1、检查是否正确的重写了父类中的方法。2、标明代码&#xff0c;这是一个重写的方法。1、体现在于&#xff1a;检查子类重写的方法名与参数类型是否正确&#xff1b;检查方法private&#xff0f…

带你走进知识图谱的世界

知识图谱知识图谱的介绍01 什么是知识图谱02 知识图谱构建的关键技术03 知识图谱的存储04 知识图谱在金融领域的应用图数据库 Neo4j知识图谱的介绍 知识图谱最开始是Google为了优化搜索引擎提出来的&#xff0c;推出之后引起了业界轰动&#xff0c;随后其他搜索公司也纷纷推出…

[附源码]计算机毕业设计医疗器械公司公告管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

MXNet中im2rec将图片转换成二进制RecordIO格式

我们在前面的 计算机视觉之目标检测训练数据集&#xff08;皮卡丘&#xff09;《2》其中有提到这个二进制的RecordIO格式&#xff0c;使用的是MXNet自带的im2rec工具&#xff0c;源码在tools里面 import mxnet as mx #D:\Anaconda3\envs\myd2l\lib\site-packages\mxnet\tools\…

农大毕业7年后,转行软件测试,我拿到了一块结实的敲门砖

“经过这段时间的学习&#xff0c;让我摸清了这个行业的游戏规则&#xff0c;可以说是让我拿到了一块结实的敲门砖。” 今天跟大家分享的是近期就业的学员刘同学的转行故事&#xff0c;希望他的经历能给同样在向梦想奔跑的你一些帮助。 毕业7年后&#xff0c;从网信办主任转行…

基于STM32单片机的直流电机PWM调速(数码管显示)(Proteus仿真+程序)

编号&#xff1a;24 基于STM32单片机的直流电机PWM调速 功能描述&#xff1a; 由 STM32单片机数码管显示模块键盘模块L298N电机驱动模块直流电机 1、采用STM32F103单片机为主控制器 2、四个按键&#xff0c;分别为启动/暂停、方向切换、加速、减速功能 3、数码管显示PWM占空比…

[附源码]计算机毕业设计演唱会门票售卖系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…