docker之镜像与数据卷

news/2024/6/18 7:07:28 标签: docker, 容器, 运维

镜像

简介

1.镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于环境开发的软件,他包含运行某个软件所需的所有内容,包括代码、运行时库、环境变量、配置文件

2.将所有的应用和环境11,直接打包成docker镜像,就可以直接运行

获取镜像

        1.从远程仓库下载

        2.从他出拷贝

        3.自己制作一个镜像DockerFile

镜像加载原理

        Docker镜像的加载原理基于UnionFS(联合文件系统)。

        Union文件系统(UnionFs)是一种分层、轻量级并且高性能的文件系统,他支 持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。Union文件系统是 Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像

特性

        一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系 统叠加起来,这样最终的文件系统会包含所有底层的文件和目录

加载步骤

        1.Docker客户端从Docker镜像仓库下载镜像的每一层。

        2.Docker客户端将每一层按照层叠关系挂载到UnionFS上。

        3.UnionFS将所有的层合并成一个完整的文件系统。

        4.Docker容器内部使用这个根文件系统作为自己的根文件系统。

分层理解

分层结构最大的好处就是资源共享。

如:多个镜像都从相同的 Base 镜像构建而来,那么宿主机只需在磁盘上保留一份base镜像,同时内存中也只需要加载一份base镜像,这样就可以为所有的容器服务了,而且镜像的每一层都可以被共享。

查看分层:

        docker image inspect 镜像名

 理解

        所有的 Docker镜像都起始于一个基础镜像层,当进行修改或培加新的内容时,就会在当前镜像层之上,创建新的镜像层

        假如基于 Ubuntu Linux16.04 创建一个新的镜像,这就是新镜像的第一层;如果在该镜像中添加 Python 包,就会在基础镜像层之上创建第二个镜像层;如果继续添加一个安全补丁,就会创建第三个镜像层该像当前已经包含3个镜像层

 特点

        Docker 镜像都是只读的,当容器启动时,一个新的可写层加载到镜像的顶部

        这一层就是我们通常说的容器层,容器之下的都叫镜像层!

 pull 下来的只是 只读文件,run 之后镜像才开始运行,我们平时在 docker 里面操作镜像,此时操作的层次就是容器

commit镜像

docker commit 提交容器成为一个新的副本

# 命令和git原理类似
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]    # tag 表示版本

如果你想要保存当前容器的状态,就可以通过commit来提交,获得一个镜像,就好比使用虚拟机时的快照。

数据卷

数据容器卷:是一种将容器内部目录和本地目录进行挂载的技术,它允许将容器内的数据持久化,并且可以在容器之间共享数据和重用数据

功能

        1.数据持久化:能够将数据保存到本地文件系统,容器删除数据页不会丢失

        2.数据共享:多个容器可以共享一个数据卷,并在其中进行读写操作

        3.数据迁移:通过复制或者移动将数据卷从一个地方迁移到另一个地方

解决问题

        1.数据丢失问题:由于数据卷的持久化特性,即使容器被删除,数据也不会丢失

        2.数据管理问题:多个容器可以共享同一个数据卷,避免了数据管理的复杂性

        3.数据保护问题:数据卷不会被容器生命周期所限制,只要本地文件系统存在,数据就能持久保存

使用

方式一:命令挂载

docker run -it -v 主机目录:容器内目录

# 测试
docker run -it -v /home/ceshi:/home centos /bin/bash

 修改只需要在本地修改即可,容器内会自动同步!只有一个物理地址,二者共享一个资源

具名挂载和匿名挂载

具名挂载

# 具名挂载
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
docker volume ls  

# 通过 -v 卷名:容器内路径
# 查看一下这个卷

匿名挂载

-P 不指定路径
-v 容器内路径!
docker run -d -P --name nginx01 -v /etc/nginx nginx

# 查看所有的volume的情况
docker volume ls

# 这种就是匿名挂载,我们在 -v 只写了容器内的路径,没有写容器外的路径!

        所有的docker容器内的卷,没有指定目录的情况下都是在 /var/lib/docker/volumes/xxxx/_data

        如果指定了目录,docker volume ls 是查看不到的。

        我们通过具名挂载可以方便的找到我们的一个卷,大多数情况使用具名挂载

方式二:Dockerfile

Dockerfile 就是用来构建 docker 镜像的构建文件!相当于命令脚本;通过这个脚本可以生成镜像。镜像是一层一层的,脚本的一个个的命令,每个命令都是一层。

FROM centos

VOLUME ["/data"]

CMD echo "------end------"

VOLUME ["/data"] 指令声明了一个名为 /data 的数据卷。当使用该 Dockerfile 构建镜像并运行容器时,该数据卷将会被自动挂载到容器/data 目录下。

通过使用 VOLUME 指令,您可以在 Dockerfile 中声明多个数据卷,并在构建镜像时自动创建它们。


http://www.niftyadmin.cn/n/4958585.html

相关文章

MySQL多表关联查询

目录 一、关联查询方式 1、 inner join--内连接 2、left join--左连接 3、 right join--右连接 4、自连接 5、交叉连接 6、子查询 二、关联查询应用 1、inner join--内连接 2、left join--左连接 3、right join--右连接 4、自连接 5、交叉连接 6、子查询 7、gro…

GitRedisNginx合集

目录 文件传下载 Git常用命令 Git工作区中文件的状态 远程仓库操作 分支操作 标签操作 idea中使用git 设置git.exe路径 操作步骤 linux配置jdk 安装tomcat 查看是否启动成功 查看tomcat进程 防火墙操作 开放指定端口并立即生效 安装mysql 修改mysql密码 安装lrzsz软…

python AI绘图教程

前提 1.安装python 2.安装git 步骤 下载stable-diffusion-webui项目(链接:GitHub - AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UI) git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git 安装st…

燃尽图、甘特图、鱼骨图

燃尽图、甘特图、鱼骨图 1. 燃尽图 燃尽图(burn down chart)是在项目完成之前,对需要完成的工作的一种可视化表示。燃尽图有一个Y轴(工作)和X轴(时间)。理想情况下,该图表是一个向下…

【Python】解决 pip 开了网络代理之后无法安装包的问题

问题描述 开了网络代理之后,python 的 pip 就无法安装包了,报如下错误: $ pip install netsm Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple WARNING: Retrying (Retry(total4, connectNone, readNone, redirectNone, sta…

你知道fastjson的反序列化漏洞吗?

面试回答 当我们使用 fastjson 进行序列化的时候,当一个类中包含了一个接口(或抽象类)的时候,会将子类型抹去,只保留(抽象类)的类型,使得反序列化时无法拿到原始类型。 那么为了解决…

项目实战笔记2:硬技能(上)

序: 本节串讲了项目管理硬技能,有些术语可以结合书或者网上资料来理解。没有想书上讲的那样一一列举。 做计划 首先强调为什么做计划? 计划就是各个角色协同工作的基准(后面做风险监控、进度的监控),贯穿于…

【HCIP】企业网三层架构实验

题目: 拓扑图 配置 LSW1 //链路聚合 [lsw3]interface Eth-Trunk 1 [lsw3-Eth-Trunk1]trunkport GigabitEthernet 0/0/3 0/0/4 [lsw3-Eth-Trunk1]q [lsw3]vlan batch 1 2 [lsw3]interface Eth-Trunk 1 [lsw3-Eth-Trunk1]port link-type trunk [lsw3-Eth-Trunk1]port…