Docker之数据卷和Dockerfile

目录

 一、Docker数据管理

二、数据卷

创建数据卷 

查看数据卷

删除数据卷

挂载数据卷

三、数据卷容器

创建数据卷容器

测试数据卷容器

备份数据卷容器

还原数据卷容器

四、Dockerfile

什么是Dockerfile

基本结构

常用指令

快速入门

编写Dockerfile文件

构建镜像并测试


 一、Docker数据管理

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

容器中的管理数据主要有两种方式:

  • 数据卷(Data Volumes):容器内数据直接映射到本地主机环境;

  • 数据卷容器(Data Volume Containers): 使用特定容器维护数据卷;

如何使用docker cp命令在宿主机和docker容器之间复制文件:

docker cp 宿主机绝对路径 容器id:路径

二、数据卷

数据卷是 Docker容器中用于持久化数据的一种机制,它可以将容器内的数据存储到宿主机中,以便在容器被删除或重新创建时保留数据。

它可以提供很多有用的特性:

  • 数据卷可以在容器之间共享和重用;

  • 对数据卷的修改会立马生效;

  • 对数据卷的更新,不会影响镜像;

  • 数据卷默认会一直存在,即使容器被删除;

注意:数据卷的生命周期独立于容器的生命周期,因此即使容器被删除,数据卷中的数据仍然可以被保留。

创建数据卷 

docker volume create 数据卷名称

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

ls -1 /var/lib/docker/volumes

查看数据卷

 查看所有的数据卷:

docker volume ls

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

docker volume inspect 数据卷名称

删除数据卷

docker volume rm 数据卷名称

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

挂载数据卷

创建数据卷并挂载中指定容器:

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

上述命令是将 my-vol 数据卷挂载中容器 tomcat01 中的 webapp 目录。

注意: 1)my-vol 为要挂载的数据卷,如果数据卷不存在,docker 会自动创建;/webapp 为容器上目录,如果目录不存在, docker会自动创建。 2)加了“\”意为将最后的回车换行给注释了,系统理解为命令还没有结束,因而是继续等待用户进行输入,直到读到结束符,如回车。

使用自定义目录充当数据卷并挂载到指定容器:  

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

--mount 选项的 type 参数支持三种类型的数据卷:

属性说明
type=volume

普通数据卷(默认即这种类型),映射到主机/var/lib/docker/volumes路径下

例如:--mount type=volume,source=my-vol,target=/webapp

type=bind

绑定数据卷,映射到主机指定路径下

例如:--mount type=bind,source=/webapp,target=/webapp2

type=tmpfs

临时数据卷,只存在于内存中

例如:--mount type=tmpfs,target=/app

三、数据卷容器

数据卷容器是一个特殊的容器,它的主要目的是提供一个持久化的存储空间,其他容器可以通过挂载这个容器中的数据卷来共享数据。数据卷容器本身不运行任何应用程序,它只是提供一个数据卷的存储空间。

当我们需要在多个容器之间共享数据时,可以使用数据卷容器。我们可以在一个容器中创建一个数据卷容器,并将需要共享的数据卷挂载到该容器中,其他容器可以通过挂载该数据卷容器中的数据卷来访问这些数据。

数据卷容器的好处是,它可以提供一个中心化的存储空间,容器之间可以通过挂载数据卷容器中的数据卷来共享数据,而不需要每个容器都去管理数据卷。此外,数据卷容器可以独立于其他容器进行管理和维护,可以方便地备份和恢复数据。

创建数据卷容器

创建一个名为 db_data 的容器,并设定该容器中的数据卷为 db_data 目录。

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

测试数据卷容器

 创建一个名为 db1 的容器,并设定数据卷容器为 db_data

docker run -it -d --name db1 --volumes-from db_data centos:latest

进入 db1 容器,并在容器的数据卷中创建文件测试是否挂载成功:

# 进入db1容器
docker exec -it db1 bash
# 切换进数据卷
cd db_data
# 创建文件
echo "db1 beifen test" > db1_test.txt

这时,可以发现在容器 db1 中创建的文件,同时出现在了 db_data 容器中的 db_data 数据卷目录中,则证明数据卷容器挂载测试成功。  

备份数据卷容器

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

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

属性介绍:

属性说明
runcreate+start
--rm创建之后删除容器
--name容器名称
--volumes-from来自于哪个数据卷容器的容器NAME
-v给容器挂载存储卷,挂载到容器的某个目录

还原数据卷容器

新建一个数据卷容器 db_data2 :

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

新建1个名为 huanyuan 的(暂时性,之后会删除)容器,由于 volumes-from 了 db_data2,所以在根目录下也会生成1个 db_data 文件夹,宿主机上的 host_backup 目录映射到了容器中的 container_backup 文件夹下,并解压至 db_data 文件夹下

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

四、Dockerfile

什么是Dockerfile

Dockerfile 是用来构建 Docker 镜像的文本格式的配置文件,是由一系列命令参数构成的脚本。

总之,用户可以使用 Dockerfile 来快速创建自定义的镜像。

基本结构

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

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

常用指令

指令名称说明格式示例
FROM定义基础镜像FROM <image_name>:<tag>
MAINTAINER`定义镜像作者MAINTAINER <author_name>
RUN在镜像中执行命令RUN <command>
CMD定义容器启动后默认执行的命令CMD <command>
EXPOS指定容器对外暴露的端口EXPOSE <port>
ENV设置环境变量ENV <key> <value>
ADD将本地文件添加到镜像中ADD <source> <destination>
COPY将本地文件复制到镜像中COPY <source> <destination>
WORKDIR指定容器内的工作目录WORKDIR <path>

注意:ADD和COPY的区别!ADD命令用于复制操作,但是会对压缩文件(tar, gzip, bzip2, etc)做提取和解压操作;而COPY仅限于复制。

快速入门

启动虚拟机,进入 CentOS7 系统。创建文件夹上传 jdk 的安装包:

# 创建文件夹
mkdir -p /ceshi/java
# 使用rz命令上传jdk安装包
rz jdk-8u221-linux-x64.tar.gz

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

在同级目录下创建 Dockerfile 文件。

touch Dockerfile

注意:Dockerfile 文件没有后缀,文件名D必须是大写。

 

编写Dockerfile文件

 

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

FROM centos:latest

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

MAINTAINER kongkong "kongkong@qq.com"

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

WORKDIR /ceshi/java

jdk安装文件复制到镜像中,并完成解压操作:

ADD jdk-8u151-linux-x64.tar.gz /ceshi/java/

注:如果在宿主机的当前路径下,文件直接使用相对路径即可;

配置环境变量:

ENV JAVA_HOME=/ceshi/java/jdk1.8.0_151
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH

构建镜像并测试

docker build -t jdk8:v1.0 .

-t jdk8:v1.0 用于给新构建的镜像取名为jdk8 , 并设定版本为 v1.0 ;注意最后有个点,代表使用当前路径的 Dockerfile 进行构建 。

查看镜像:

docker images

创建并启动容器:

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

测试:

java -version

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

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

相关文章

安全升级,智能领航:RFID技术推动铁路锁控系统进入新时代

随着我国铁路运输行业的快速发展&#xff0c;铁路安全运营的重要性日益凸显&#xff0c;为了提高铁路运输安全性&#xff0c;降低人为操作失误&#xff0c;航连科技提出了一种基于RFID技术的铁路智能锁控系统解决方案&#xff0c;旨在为我国铁路安全运营提供有力支持。 一、系统…

C++:VS dump调试(2)

之前写的&#xff1a; C&#xff1a;VS2019调试dump文件-CSDN博客 1、需要dump文件【这个一般是客户现场收集的】 2、对应的pdb文件【这个是软件编译时候生成的】 3、代码【有可能只有自己负责模块的代码&#xff0c;没有全部代码&#xff0c;但是基本调试也是只会用到自己部…

IP协议中的四大支柱:DHCP、NAT、ICMP和IGMP的功能剖析

DHCP动态获取 IP 地址 我们的电脑通常都是通过 DHCP 动态获取 IP 地址&#xff0c;大大省去了配 IP 信息繁琐的过程。 客户端首先发起 DHCP 发现报文&#xff08;DHCP DISCOVER&#xff09; 的 IP 数据报&#xff0c;由于客户端没有 IP 地址&#xff0c;也不知道 DHCP 服务器的…

FPGA:图像数字细节增强算法(工程+仿真+实物,可用毕设)

目录 日常唠嗑一、视频效果二、硬件及功能1、硬件选择2、功能3、特点 未完、待续……四、工程设计五、板级验证六、工程获取 日常唠嗑 有2个多月没写文章了&#xff0c;又是老借口&#xff1a;“最近实在是很忙”&#x1f923;&#xff0c;不过说真&#xff0c;确实是比较忙&am…

DIY可视化UniApp表格组件

表格组件在移动端的用处非常广泛&#xff0c;特别是在那些需要展示结构化数据、进行比较分析或提供详细信息的场景中。数据展示与整理&#xff1a;表格是展示结构化数据的理想方式&#xff0c;特别是在需要展示多列和多行数据时。通过表格&#xff0c;用户可以轻松浏览和理解数…

java数据结构与算法刷题-----LeetCode238. 除自身以外数组的乘积

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 动态规划&#xff1a;左右乘积列表2. 滚动数组对动态规划过程…

老子云、AMRT3D、眸瑞科技

老子云概述 老子云3D可视化快速开发平台&#xff0c;集云压缩、云烘焙、云存储云展示于一体&#xff0c;使3D模型资源自动输出至移动端PC端、Web端&#xff0c;能在多设备、全平台进行展示和交互&#xff0c;是全球领先、自主可控的自动化3D云引擎。 平台架构 平台特性 1、基…

Open CASCADE学习|统计形状拓扑数量

边界表示法&#xff08;Boundary Representation&#xff0c;简称B-Rep&#xff09;是几何造型中最成熟、无二义的表示法。它主要用于描述物体的几何信息和拓扑信息。在边界表示法中&#xff0c;一个实体&#xff08;Solid&#xff09;由一组封闭的面&#xff08;Face&#xff…

easyExcel - 按模板导出

目录 前言一、情景介绍二、文档介绍2.1 读取模板2.2 填充模板 三、代码示例3.1 案例一&#xff1a;工资表3.2 案例二&#xff1a;报价单 四、我所遇到的问题 前言 Java-easyExcel入门教程&#xff1a;https://blog.csdn.net/xhmico/article/details/134714025 之前有介绍过如…

VSCode配置AI自动补全插件Tabnine

面向软件开发人员的 AI 助手 使用 AI 代码完成更快地编写代码 什么是Tabnine Tabnine 是一款 AI 代码助手&#xff0c;可让您成为更好的开发人员。Tabnine 将通过所有最流行的编码语言和 IDE 的实时代码完成、聊天和代码生成来提高您的开发速度。 无论您将其称为 IntelliSens…

一文读懂CSS中的阴影:box-shadow,text-shadow,drop-shadow的区别与使用方式

一、区别 box-shadow 应用于元素&#xff0c;为元素本身添加阴影效果。 text-shadow 应用于文本&#xff0c;为文本内容添加阴影效果。 drop-shadow 是filter属性的一部分&#xff0c;通常用于图像&#xff0c;为其添加阴影效果。 二、box-shadow box-shadow属性用于为元素&…

无线局域网安全协议-WEP,WPA,WAPI,

目录 一、WEP&#xff08;有线等效保密&#xff09; 二、WPA&#xff08;Wi-Fi网络安全接入&#xff09; ​编辑 三、WAPI&#xff08;无线局域网鉴别和保密基础结构&#xff09; WLAN&#xff08;Wireless Local Area Network&#xff09;指应用无线通信技术将计算机设备互…

C语言程序的编译与链接

目录 1.翻译环境和运行环境2.翻译环境2.1 预处理&#xff08;预编译&#xff09;2.2 编译2.3 汇编2.4 链接 3.运行环境 1.翻译环境和运行环境 在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境。 翻译环境&#xff1a;在这个环境中源代码被转换为可执⾏的机器指令&am…

每日OJ题_两个数组dp⑤_力扣10. 正则表达式匹配

目录 力扣10. 正则表达式匹配 解析代码 力扣10. 正则表达式匹配 10. 正则表达式匹配 难度 困难 给你一个字符串 s 和一个字符规律 p&#xff0c;请你来实现一个支持 . 和 * 的正则表达式匹配。 . 匹配任意单个字符* 匹配零个或多个前面的那一个元素 所谓匹配&#xff0c…

springboot 整合 mybatis(配置版)

代码及配置整合 创建实体类,与数据库对应 创建 mapper、service 和 controller @AutowiredUserService userService;@ResponseBody@GetMapping("/user")public com.vazquez.bootstudy.model.User getById(@RequestParam("id") Long id) {return userServ…

XC7A35T-2FGG484 嵌入式FPGA现场可编程门阵列 Xilinx

XC7A35T-2FGG484 是一款由Xilinx&#xff08;赛灵思&#xff09;制造的FPGA&#xff08;现场可编程门阵列&#xff09;芯片 以下是XC7A35T-2FGG484 的主要参数&#xff1a; 1. 系列&#xff1a;Artix-7 2. 逻辑单元数量&#xff1a;33280个 3. 工艺技术&#xff1a;28nm 4. …

设计模式之中介者模式讲解

概念&#xff1a;也称为调停者模式。用一个中介者对象封装一系列对象的交互&#xff0c;中介者使各对象不需要显示地相互作用&#xff0c;从而使其耦合松散&#xff0c;而且可以独立地改变它们之间的交互。 抽象中介者&#xff1a;定义中介者的操作。具体中介者&#xff1a;实现…

【HTML】简单制作一个动态变色光束花

目录 前言 开始 HTML部分 效果图 ​编辑​编辑​编辑​编辑总结 前言 无需多言&#xff0c;本文将详细介绍一段代码&#xff0c;具体内容如下&#xff1a; 开始 首先新建文件夹&#xff0c;创建一个文本文档&#xff0c;其中HTML的文件名改为[index.html]&a…

【CTF】rip--堆栈的简单认识

前言 最近在学二进制&#xff0c;准备拿BUUCTF的pwn试试手&#xff0c;还在摸索的阶段&#xff0c;有什么思路出错的地方还请指出。 解题思路 下载文件到kali&#xff0c;查看文件为 64-bit的ELF&#xff08;ELF为Linux下的可执行文件&#xff0c;相当于Windows的exe&#xff0…

python-flask后端知识点

anki 简单介绍&#xff1a; 在当今信息爆炸的时代&#xff0c;学习已经不再仅仅是获取知识&#xff0c;更是一项关于有效性和持续性的挑战。幸运的是&#xff0c;我们有幸生活在一个科技日新月异的时代&#xff0c;而ANKI&#xff08;Anki&#xff09;正是一款旗舰级的学习工具…