Docker数据卷和Dockerfile

news2024/11/15 11:43:07

1、什么是Docker数据卷

前言:

        在下载的镜像中,我们不能够去改变它内部的一些配置,因为docker的镜像文件是已经配置好的,无法改变,我们只能改变镜像启动后的容器里面的内容,但是又因为,容器本来就是一个临时的,当容器停止了,那么我们内部的一些存储的数据也将会丢失,那么docker官方为了能够解决这个临时性的问题而产生了数据卷(volume)这个组件。

        Docker 数据卷(Volumes)是 Docker 中用于持久化和共享数据的机制。数据卷使得 Docker 容器可以在容器生命周期之外持久化数据,并且方便在不同容器之间共享数据。具体来说,Docker 数据卷的特点和功能包括:

  1. 持久化数据

    • 数据卷可以将数据从容器内部持久化到宿主机上的文件系统中,这样即使容器被删除,数据仍然存在。
  2. 容器之间共享数据

    • 数据卷可以被多个容器挂载和使用,允许容器之间共享数据。比如,可以用来共享配置文件、数据库数据等。
  3. 独立于容器生命周期

    • 数据卷的生命周期独立于容器。即便容器被删除或重建,数据卷中的数据仍然保留,用户可以在新创建的容器中继续使用这些数据。
  4. 易于备份和恢复

    • 数据卷可以被备份和恢复,通常通过宿主机的文件系统进行。这使得数据的备份和恢复变得相对简单。
  5. 数据管理

    • 可以通过 Docker 命令进行数据卷的管理,包括创建、删除、列出等操作。例如,docker volume create 用于创建数据卷,docker volume rm 用于删除数据卷。
  6. 性能和安全性

    • 数据卷存储在宿主机的文件系统上,通常性能较好。与容器内的临时文件相比,数据卷也提供了更好的数据持久性和安全性。

2、数据卷的指令

        1)创建数据卷:

docker volume create 名称

        使用这种方式创建的数据卷可也被docker volume管理,如查看,删除等。新建的数据卷被保存在/var/lib/docker/volumes目录下。 

        2)查看数据卷:

docker volume ls

       

        3)查看数据卷的详细信息:

docker volume inspect 数据卷的名称

     

          4)删除数据卷:

docker volume rm 数据卷名称

3、数据卷的使用

        3.1、数据卷挂载

        1)创建数据卷

docker volume create 数据卷名称

        2)将数据卷挂载到容器

docker run -it --name 定义容器名称 --mount source=数据卷名称,target=容器挂载点(也就是在容器中所存在的文件夹) ubuntu:18.04(需要启动的镜像)

当然也存在简写方式

docker run -it --name 容器名称 -v 数据卷名称:容器对应的文件夹 镜像名称

验证是否挂载成功

切换到宿主机中,查看数据卷中文件是否存在

        3.2、直接挂载宿主机文件

        1)在宿主机随别创建一个文件

        2)运行一个容器将它和宿主机创建的文件相互绑定

如果是创建只读的数据卷的话,在指令的test_vol后面加上:ro

如果是创建只读的数据卷的话,在指令的test_vol后面加上:ro

如果是创建只读的数据卷的话,在指令的test_vol后面加上:ro

        3.3、数据卷容器

        1)创建一个数据卷容器

        2)创建一个容器挂载数据卷容器

        3.4、数据卷容器的备份与恢复

        3.4.1)数据卷容器备份

        然后在宿主机中查看是否存在/bak文件夹

        这样说明备份成功!

        3.4.2)数据卷容器恢复

进入haunyuan1容器查看数据是否恢复

4、什么是Dockerfile

        Dockerfile 是一种用于定义 Docker 镜像的文本文件。它包含了一系列的指令,用于自动化构建 Docker 镜像的过程。这些指令可以包括:

  • 基础镜像的指定(如 FROM ubuntu:20.04
  • 安装软件包(如 RUN apt-get update && apt-get install -y nginx
  • 复制文件(如 COPY . /app
  • 设置环境变量(如 ENV PATH /app/bin:$PATH
  • 运行命令(如 CMD ["nginx", "-g", "daemon off;"]

通过 Dockerfile,可以将应用程序及其所有依赖项打包成一个可移植的镜像,这样就可以在不同的环境中一致地运行这些应用程序。

5、Dockerfile基本指令

在 Dockerfile 中,常用的基本指令包括:

  1. FROM
    指定基础镜像。例如:

    FROM ubuntu:20.04
    
  2. RUN
    在镜像构建过程中执行命令,通常用于安装软件包。

    RUN apt-get update && apt-get install -y nginx
    
  3. COPY
    将文件或目录从宿主机复制到镜像中。

    COPY ./src /app/src
    
  4. ADD
    类似于 COPY,但它还支持从 URL 下载文件以及解压 tar 文件。

    ADD https://example.com/file.tar.gz /app/
    
  5. WORKDIR
    设置工作目录,后续的命令将在该目录下执行。

    WORKDIR /app
    
  6. CMD
    指定容器启动时执行的默认命令和参数。

    CMD ["nginx", "-g", "daemon off;"]
    
  7. ENTRYPOINT
    设置容器启动时执行的命令,并且 CMD 中的参数会传递给 ENTRYPOINT。

    ENTRYPOINT ["python3", "app.py"]
    
  8. ENV
    设置环境变量。

    ENV APP_ENV=production
    
  9. EXPOSE
    指定容器在运行时监听的端口,但这不会实际发布端口。

    EXPOSE 80
    
  10. VOLUME
    创建一个挂载点,以便容器可以将数据持久化到宿主机。

    VOLUME ["/data"]
    
  11. USER
    指定运行容器时使用的用户。

    USER appuser
    
  12. ARG
    定义在构建时可以传递的变量。

    ARG VERSION=1.0
    

这些指令可以组合使用来创建一个自定义的 Docker 镜像。

6、Dockerfile示例

        前提:

                想要构建基本镜像,必须要有Dockerfile文件,而且文件没有拓展名!!!

                想要构建基本镜像,必须要有Dockerfile文件,而且文件没有拓展名!!!

                想要构建基本镜像,必须要有Dockerfile文件,而且文件没有拓展名!!!

        1)准备好所有的文件创建jdk镜像

        2)Dockerfile文件内容如下

#1、指定基本镜像
FROM ubuntu:18.04
#2、指明该镜像的作者和其他电子邮件
MAINTAINER ZY "ZY@QQ.COM"
#3、指定镜像的工作目录
WORKDIR /test/zy
#4、将jdk复制到镜像中
ADD jdk-8u151-linux-x64.tar.gz /test/zy
#5、配置环境变量
ENV JAVA_HOME=/test/zy/jdk1.8.0_151
ENV PATH=${JAVA_HOME}/bin:$PATH
#6、容器启动时运行的命令
#CMD ["java","-version"]

        3)执行Dockerfile文件进行构建镜像

        4)查看镜像

完结了!!!!!!!!!!!!!!!!!!!!!!!!!!

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

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

相关文章

Java框架第四课(对Spring的补充Spring web)

目录 一.Spring web的认识 (1)Spring Web概念 (2)Spring web的特点 (3)Springweb运行的流程 (4)Springweb运行的流程图 二.搭建Spring web 三.自定义处理器类搭建 (1)处理器类配置 (2)处理器类接受请求 (3)获得请求数据 四.拦截器 (1)关于拦截器: (2)拦截器的…

【VMware】麒麟系统网络连接配置

在VMware配置页面点击编辑,进入虚拟网络编辑器将默认的 VMnet0删除,新建网络,设置桥接模式为Intel 打开主机cmd,查看主机IP地址,获取子网掩码,默认网关及DNS服务器 4.在主机寻找可用IP地址,ping不通的为未…

探秘发酵过程:酵母菌如何为白酒赋予不同风味?

在白酒酿造的神秘世界里,发酵过程如同一位隐形的艺术家,用其不同的笔触为白酒勾勒出千变万化的风味。而在这背后,酵母菌作为发酵的主角,发挥着至关重要的作用。今天,就让我们一起探秘发酵过程,了解酵母菌如…

shell 学习笔记:变量、字符串、注释

目录 1. 变量 1.1 定义使用变量 1.2 变量命名规则 1.3 只读变量 1.4 删除变量 1.5 变量类型 1.5.1 字符串变量 1.5.2 整数变量 1.5.3 数组变量 1.5.3.1 整数索引数组 1.5.3.2 关联数组 1.4 环境变量 1.5 特殊变量 2. 字符串 2.1 单引号字符串 2.2 双引…

erlang学习:用OTP构建系统23.12练习题

练习要求 制作一个名为prime_tester_server的gen_server,让它测试给定的数字是否是质数。 你可以使用lib_primes.erl里的is_prime/2函数来处理(或者自己实现一个更好的质数测试函 数)。把它添加到sellaprime_supervisor.erl的监控树里。 质…

图论(2)

一、度 度统计的是一个节点上又多少条边 度出度入度 出度:统计以该节点为起始点箭头指向外面的边的条数 入度:统计箭头指向该节点的边数 度为1的节点为悬挂节点,边为悬挂边 用矩阵计算节点的度 二、握手定理 比如这里第一个集合里面有三…

ARP协议(原理,特点,报文格式,具体过程),ARP缓存(有效时间,为什么),ARP欺骗(定向断网,成为中间人),RARP简单介绍

目录 ARP协议 引入 介绍 原理 arp请求/响应 特点 报文格式 硬件类型 协议类型 硬件/协议地址长度 op(操作码) 过程 发送请求并处理 返回响应并处理 总结 arp缓存 介绍 arp表项的有效时间 解释 arp欺骗 介绍 定向断网 基于arp的成为中间人的方式 多向…

跟李沐学AI:序列模型

目录 序列数据 自回归模型 马尔可夫假设 潜变量模型 序列模型总结 序列数据 实际中很多数据是时序结构的,如:电影的评价随时间的变化而变化:拿奖后评分上升、电影整体质量提升,人们要求变高。。。等等 除此之外,音…

比特币网络和支付

1. 比特币网络 比特币网络是一个去中心化的点对点网络,节点之间可以直接进行交易。网络上有不同类型的节点。 1.1 比特币网络的节点 比特币网络的节点有两种主要类型:全节点也称为完整节点和简单支付验证(Simple Payment Verification,SPV)节…

档案|基于SprinBoot+vue的档案管理系统(源码+数据库+文档)

档案管理系统 基于SprinBootvue的档案管理系统 一、前言 二、系统设计 三、系统功能设计 管理员功能模块实现 学生功能模块实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农…

【数据库|第11期】深入掌握 SQL Server、Access 与 SQLite 中的 `UNION` 与 `UNION ALL`:从理论到实践

日期:2024年9月3日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方&#xff…

EMC整改问题

定位问题: 1.控制变量比较法:连和不连,接和不接来判断 2.频率判断法:低频一般是电源,高频一般是信号或者无线通信问题,还有倍频问题 3.解决方法: a.加器件,滤波,EMI共模电感,磁环 b.电源,高速信…

App推广新篇章:Xinstall带你走出数据迷雾,实现高效推广!

在如今的移动互联网时代,App推广已成为每个应用开发者必须面对的重要课题。然而,推广过程中往往伴随着诸多痛点,如数据混乱、投放盲目、决策滞后以及作弊困扰等。这些问题不仅影响了推广效果,还可能导致资源的浪费和投入产出不均衡…

Java版本的扫雷游戏程序

一、开发环境 开发工具:eclipse2021-12 JDK版本:JDK15.0.1 二、运行效果展示 这张图是游戏刚开始的画面,重置以后也是这个画面 此图是写代码的过程调试用的画面,方便查找问题。 此图是运行过程中的图片

实习的一点回顾Webhook的执行

1.Webhook流程 1.Bass外的部分 比如我通过控制台或者js脚本去调用curl命令call指定的webhook的地址的功能脚本 命令发送到网关,网关通过注册中心之类的发送到服务实体上。 这些是微服务的东西 2.OpenAPI到Controller阶段 先看之前openAPI的那篇前置 请求进来之…

Anaconda的环境管理操作命令详解-学习篇

一、通过命令方式管理环境 1. 查看环境 使用以下命令查看当前所有环境的命令conda env list可以看到目前电脑的base环境情况,我的本机只有一个base环境。是anaconda3在安装的时候所选的根目录信息。命令前的(base) 代表目前执行处于base环境,* 代表目前…

高德地图-小米14 Pro 定制版 v12.10.61.3021 简洁版

高德地图小米14 Pro 定制版是一款专门为小米14 Pro 设计的简洁版高德地图。相较于普通版本,该版本体积更小,运行速度更快,并且没有广告。支持驾车、骑行、公交地铁、步行等多种导航模式,使用北斗卫星导航系统,精准度非…

从零开始使用 LangGraph、LLaMA3 和 Elasticsearch 向量存储构建本地代理的教程

作者:来自 Elastic Pratik Rana 在本教程中,我们将了解如何使用 LangGraph、LLaMA3 和 Elasticsearch Vector Store 从头开始​​创建可靠的代理。我们将结合 3 篇高级 RAG 论文中的想法: 用于路由的自适应 RAG:根据内容将问题引…

Redis List 应用指南:命令、编码与阻塞操作全解析

list 类型 一 . 常见命令1.1 lpush、lrange1.2 lpushx1.3 rpush1.4 rpushx1.5 lpop、rpop1.6 lindex1.7 linsert1.8 llen1.9 lrem1.10 ltrim1.11 lset1.12 blpop 和 brpop原理使用 小结 二 . 内部编码5.3 应用场景5.3.1 作为 "数组" 这样的结构来存储多个元素5.3.2 消…

Spring高手之路22——AOP切面类的封装与解析

文章目录 1. AOP是如何收集切面类并封装的?2. Advisor 是什么,它是怎么构建的?2.1 什么是 Advisor2.2 Advisor 的构建(源码分析时序图说明) 3. TargetSource 的构建和作用3.1 TargetSource 的作用3.2 TargetSource 的构…