Docker之数据卷和Dockerfile

news2024/11/25 0:39:21

目录

 一、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.coloradmin.cn/o/1579103.html

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

相关文章

OneFlow深度学习框架:技术优势与功能特点

文章目录 一、概要二、核心技术优势2.1、分布式训练2.2、极致性能2.3、端到端的智能数据平台2.4、开放灵活的算法支持2.5、跨平台支持 三、功能特点四、OneFlow与TensorFlow对比四、安装OneFlow五、总结 一、概要 OneFlow是一款基于Python的开源深度学习框架&#xff0c;旨在实…

无人机概述

1、中英文对照表 中文中文简称英文全称英文简称无人驾驶飞机无人机Unmanned Aerial VehicleUAV无人机自组织网络无人机网络flying Ad-Hoc networkFANET 2、相关概念 2.1鲁棒性 网络鲁棒性是指网络系统在面对随机故障、蓄意攻击或其他异常情况时&#xff0c;能够保持其基本功…

麒麟系统下安装qt5.9.1后不能输入中文

引言 在虚拟机上安装麒麟系统后,安装了qt5.9.1,只能输入英文和数字不能输入中文注释,编译的程序也不能输入中文。 原因 安装后的麒麟系统自带搜狗输入法,原本可以输入中文,但是qt5.9.1缺少支持搜狗输入法的fcitx插件。所以qt5.9.1中不能输入中文。 解决方法 安装fcit…

Docker速成:新手变专家!

Docker介绍 容器历史 1、Chroot Jail 就是常见的chroot命令的用法。它在1979年的时候就出现了&#xff0c;被认为是最早的容器化技术之一。它可以把一个进程的文件系统隔离起来。 2、The FreeBSD Jail &#xff08;监狱&#xff09;实现了操作系统级别的虚拟化&#xff0c;他…

ShowDoc<2.8.3 前台文件上传

直接对着接口index.php?s/home/page/uploadimg构造上传请求就行了&#xff0c;上传表单的name属性为editormd-image-file&#xff0c;文件名要在php前面加一对<>符号。 数据包&#xff1a; POST /index.php?s/home/page/uploadImg HTTP/1.1

01-Git 快速入门

单枪匹马的工作流 团队协作的工作流 其中, pull request 与 pull 区别很大 pull request : 请求远程仓库拉取本人的 commt pull : 将远程仓库同步更新到本地 安装好Git以后, 先检查是否已经绑定了用户名和邮箱 git config --list再检查C:\Users\xxx.ssh 下是否存在 id_rsa.…

什么是人工智能?人工智能、机器学习、深度学习三者之间有什么关系吗?

深度学习是机器学习的一个分支。深度学习是机器学习的一部分&#xff0c;与机器学习的其他分支学科&#xff0c;以及统计学、人工智能等学科都有着紧密的联系。深度学习、机器学习、人工智能、统计学之间的关系如图1-4所示。 图1-4 深度学习、机器学习、人工智能、统计学之间的…

云安全在金融领域的作用是什么?

云安全在金融领域发挥着至关重要的作用&#xff0c;使金融机构能够保护敏感数据、遵守监管要求并推动创新。通过实施强有力的安全措施、利用先进技术并对新出现的威胁保持警惕&#xff0c;金融机构可以保护其数字资产并维持客户的信任。 金融机构面临的挑战 1.缺乏全网数据支撑…

再探Java为面试赋能(二)Java基础知识(二)反射机制、Lambda表达式、多态

文章目录 前言1.4 反射机制1.4.1 Class对象的获取1.4.2 Class类的方法1.4.3 通过反射机制修改只读类的属性 1.5 Lambda表达式1.5.1 函数式接口1.5.2 Lambda表达式的使用 1.6 多态1.6.1 多态的概念1.6.2 多态的实现条件1.6.3 重载&#xff08;Overload&#xff09;和重写&#x…

Java入门-数组

数组 什么是数组 数组( array )是一种最简单的复合数据类型&#xff0c;它是有序数据的集合&#xff0c;数组中的每个元素具有相同的数据类型&#xff0c;可以用一个统一的数组名和不同的下标来确定数组中唯一的元素。 数组的内存结构是分配一系列内存大小相等的连续空间。 …

ESP32cam 摄像头 AIcam 全球远程视频监控的实现方法

AIcam远程视频监控 ​ 在学习应用各种物联网创客场景时我们时常会用到远程视频监控&#xff0c;当然我们可以通过发送图片的方式的来远程查看&#xff0c;但如果能视频查看将会更加的生动&#xff0c;比如在公司查看家里宠物的动态&#xff0c;鱼儿的活动情况。。。。。。 这个…

illustrator编组后透明图形也能挡住后面的不透明图形的问题

今日学习使用illustrator&#xff0c;使用3D中的突出和斜角生成了一个圆柱体之后&#xff0c;扩展图形&#xff0c;修改之后发现一个奇怪的问题&#xff0c;编组中的透明物体挡住了后面的图形&#xff08;后面的图形是有颜色的&#xff09; 后面发现&#xff0c;原来是扩展生成…

在 Amazon Bedrock 上使用 Mistral Large 处理复杂的推理任务

上个月&#xff0c;我们宣布两款高性能的 Mistral AI 模型&#xff08;即 Mistral 7B 和 Mixtral 8x7B&#xff09;已在 Amazon Bedrock 上线。作为 Mistral 的首个基础模型&#xff0c;Mistral 7B 支持英语文本生成任务&#xff0c;并具备自然编码能力&#xff1b;Mixtral 8x7…

oj赛(双周赛第二十四次)

目录 1. 八大藤校2025fall标化要求已全部出炉 2. 上海“2024人才储备”计划启动&#xff01; 伐木工小码哥 杰瑞吃奶酪 小码哥处理订单 黑手党 第k小的距离 养竹鼠 甜品配置 礼物 合数分解 均分糖果 持盾 咖啡品鉴师小码哥 1. 八大藤校2025fall标化要求已全部…

安全威胁情报的漏洞挖掘

前段时间edu上出现了两个网安总队收取安全情报&#xff0c;不收漏洞&#xff0c;下面简单分析一下如何挖掘安全情报。 在发现在edu中新增了两个网安总队收安全情报等漏洞&#xff0c;那威胁情报又会包含哪些内容呢&#xff1f;以前或许会看到各种ss网站、bc网站、yx网站满天飞&…

小程序开发SSL证书下载和安装

在开发小程序时&#xff0c;确保数据的安全传输至关重要&#xff0c;而实现这一目标的关键在于正确获取与安装SSL证书。以下详细介绍了从获取到安装SSL证书的完整流程&#xff0c;以助您为小程序构建可靠的加密通信环境。 一、小程序SSL证书类型选择&#xff1a; 域名验证型D…

简单的跳马问题,遍历dp[j][i]到某个值那个数据不对了,如何解决??

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

K8s技术全景:架构、应用与优化

一、介绍 Kubernetes的历史和演进 Kubernetes&#xff08;简称K8s&#xff09;是一个开源的容器编排系统&#xff0c;用于自动化应用程序的部署、扩展和管理。它最初是由Google内部的Borg系统启发并设计的&#xff0c;于2014年作为开源项目首次亮相。 初始阶段 Kubernetes的诞生…

测开面经分享:计算机网络part2

什么是 HTTP 和 HTTPS&#xff1f;它们之间有什么区别&#xff1f; a. HTTP&#xff08;超文本传输协议&#xff09;和HTTPS&#xff08;安全超文本传输协议&#xff09;是用于在Web上传输数据的协议。它们之间的区别在于安全性和数据传输方式。 b. HTTP是一种不安全的协议&…

聚道云连接器打通红圈CRM和金蝶云星辰,赋能环境科技公司数字化转型

一、客户介绍 某环境科技有限公司是一家专注于环保科技领域的领先企业&#xff0c;致力于为客户提供全方位的环境解决方案。公司拥有一支经验丰富、技术精湛的团队&#xff0c;不断推动环保技术的创新与应用。作为业内的佼佼者&#xff0c;该公司在环境治理、资源回收和节能减…