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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java-Tomcat

一、web补充技术 ①&#xff1a;B/S架构 主流的方式&#xff0c;只要有浏览器即可。编程方式直接基于socket即可 ②&#xff1a;javascript 简称js&#xff0c;早期只是实现在客户端的浏览器的动态效果&#xff0c;但服务端不会解释运行&#xff0c;所以本质上是静态资源。 …

使用新版FLIR (FLIR_ADAS_v2) 数据集创建yolo格式数据集(目标检测)

FLIR在2022.1.19发布了新版的FLIR_ADAS_v2&#xff0c;有着更多的类别和数量更丰富的图像。数据集同步注释热图像和无注释RGB图像供参考。本文章主要介绍如何使用FLIR_ADAS_v2中的rgb图像和thermal图像来制作yolo格式数据集。 1.官方数据集下载&#xff1a;FLIR_ADAS_v2数据集…

Leetcode 6. Z 字形变换

将一个给定字符串 s 根据给定的行数 numRows &#xff0c;以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “PAYPALISHIRING” 行数为 3 时&#xff0c;排列如下&#xff1a; P A H N A P L S I I G Y I R 之后&#xff0c;你的输出需要从左往右逐行读取&#xff0…

【鸿蒙开发】ArkTS和组件

1. 初识ArkTS语言 ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript生态基础上做了进一步扩展&#xff0c;继承了TS的所有特性。 当前&#xff0c;ArkTS在TS的基础上主要扩展了如下能力&#xff1a; 基本语法&#xff1a;ArkTS定义了声明式UI描述、自…

AI日报:北大Open Sora视频生成更强了;文心一言可以定制你自己的声音;天工 SkyMusic即将免费开放;

&#x1f916;&#x1f4f1;&#x1f4bc;AI应用 北大Open Sora视频生成更强了!时长可达10秒&#xff0c;分辨率更高 【AiBase提要:】 ⭐️ Open-Sora-Plan v1.0.0模型发布 显著提升视频生成质量和文本控制能力 ⭐️ 支持华为昇腾910b芯片&#xff0c;提升运行效率和质量。 ⭐…

智慧安防系统EasyCVR视频汇聚平台接入大华设备无法语音对讲的原因排查与解决

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台支持7*24小时实时高清视频监控&#xff0c;能同时播放多路监控视频流&#xff0c;视频画面1、4、9、16个可选&#xff0c;支持自定义视频轮播。EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标…

CasaOS玩客云部署AList+Aria2结合内网穿透实现公网离线下载文件至网盘

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-cdH8fnSF05FmvunX {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

React - 请你说一说setState是同步的还是异步的

难度级别:中高级及以上 提问概率:70% 在React项目中,使用setState可以更新状态数据,而不能直接使用为this.state赋值的方式。而为了避免重复更新state数据,React首先将state添加到状态队列中,此时我们可以通过shouldComponentUpdate这个钩…

AutoDev 1.8 融合 DevOps 规范和实践,构建演进式 AI 辅助编码

在新版本的 AutoDev 中&#xff0c;我们又融入了一系列软件开发的实践&#xff0c;以更好地辅助开发人员的日常工作。这些新的特性&#xff0c;融合了我们对于 AI 辅助编码的新理解。诸如于&#xff1a; 重构&#xff1a;AI 重命名、坏味道重构、重构建议。提交信息优化&#x…

【Python】OPC UA 服务器扫描工具

引言 OPC UA&#xff08;开放平台通信统一架构&#xff09;是一种跨平台的、开放的数据交换标准&#xff0c;广泛用于工业自动化领域。在工业4.0的大背景下&#xff0c;OPC UA服务器在网络中的部署日益增多&#xff0c;如何快速有效地发现这些服务器成为了一个实际需求。本文将…

【opencv】示例-create_mask.cpp 通过鼠标交互产生掩膜图像(黑白图像)

/* * create_mask.cpp * * Author: * Siddharth Kherada <siddharthkherada27[at]gmail[dot]com> * * 这个教程演示了如何制作掩膜图像&#xff08;黑白图像&#xff09;。 * 该程序将输入图像作为源图像&#xff0c;并输出对应的掩膜图像。 */#include "opencv2/im…

【opencv】示例-demhist.cpp 调整图像的亮度和对比度,并在GUI窗口中实时显示调整后的图像以及其直方图。...

#include "opencv2/core/utility.hpp" // 包含OpenCV核心工具库的头文件 #include "opencv2/imgproc.hpp" // 包含OpenCV图像处理的头文件 #include "opencv2/imgcodecs.hpp" // 包含OpenCV图像编码解码的头文件 #include "opencv2/highgui…

3.1_2 内存管理的概念

3.1_2 内存管理的概念 重要考点

不使用 Docker 构建 Triton 服务器并在 Google Colab 平台上部署 HuggingFace 模型

Build Triton server without docker and deploy HuggingFace models on Google Colab platform EnvironmentBuilding Triton serverDeploying HuggingFace models客户端推荐阅读参考 Environment 根据Triton 环境对应表 &#xff0c;Colab 环境缺少 tensorrt-8.6.1&#xff0…

matlab读/写文本数据(矩阵格式)

1、背景介绍 文本格式的点云数据是一种常见的形式,其形式一般如下:x y z。后面可能带有标签、颜色等信息。在使用matlab进行数据处理时,常用的2个操作:读取与写入。有时,点云之间用逗号‘,’进行间隔。 2、数据读取 对于上述两种形式,均可使用load函数进行读取,如下:…

Kali系统的常用安装后开机配置(都是实用的配置)

目录 一.查看当前操作系统的所有版本信息 二.开启root并修改密码 二.启动 Apache 服务&#xff08;用不到可忽略&#xff09; 三.开启Secure Shell&#xff08;ssh&#xff09;服务&#xff0c;才可以使用远程工具&#xff08;xshell&#xff0c;finalshell&#xff09;连接…

(虚拟DOM)前端八股文修炼Day10

一 虚拟 DOM 是什么 虚拟 DOM (Virtual DOM) 本质上是真实 DOM 的一个轻量级的 JavaScript 表示形式。它是一个在内存中的抽象&#xff0c;用于描述真实 DOM 的结构和内容。虚拟 DOM 提供了一种机制&#xff0c;允许开发者通过操作 JavaScript 对象来间接更新页面&#xff0c;…

Clip论文学习

学习过程如上 学习时&#xff0c;图片与文本对应&#xff08;句子&#xff09;&#xff0c;共有n个句子与n个文本&#xff0c;进行对比学习 测试时&#xff0c;将标签句子化&#xff0c;再将其放入encoder中操作。最后找出特征最相似的。 特点&#xff1a;泛化能力强&#x…

点击上传文件

一、页面样式&#xff1a; &#xff08;1&#xff09;点击前&#xff1a; &#xff08;2&#xff09;点击后&#xff1a; 设计&#xff1a;①自定义elementPlus图标&#xff1b;②使用Tooltip实现鼠标悬浮按钮上出现文字提示&#xff1b;③上传与更换的切换样式&#xff1b;…

蓝桥备赛——素数

素数定义 试除法判断 from math import * def if_prime(n):if n==1:return Falsem=int(sqrt(n)+1)for i in range(2,m): #范围是2到根下n+1if n%i==0:return Falsereturn True print(if_prime(5)) 试除法判断素数。就是判断是否除了1和本身还有其他可以整除自己的数,…