首页 > 其他分享 >Docker 的数据管理

Docker 的数据管理

时间:2023-08-20 22:46:07浏览次数:32  
标签:容器 创建 文件系统 数据管理 镜像 Docker docker

目录

一、管理 Docker 容器中的数据

管理Docker 容器中数据主要有两种方式:数据卷(Data Volumes)和数据卷容器(DataVolumes Containers)。

1. 数据卷

数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移。数据卷的使用类似于Linux下对目录进行的mount操作。

宿主机目录/var/www挂载到容器中的 /data1目录下

docker pull centos: 7
 
# 注意:宿主机本地目录的路径必须是使用绝对路径。如果路径不存在,Docker会自动创建相应的路径。
docker run -it --name test1 -v /var/www:/data1 centos:7 /bin/bash
# -v选项可以在容器内创建数据卷
 
ls
echo "this is test1" > /data1/test1.txt
exit
 
# 返回宿主机进行查看
cd /var/www/
cat test.txt

2. 数据卷容器

如果需要在容器之间共享一些数据,最简单的方法就是使用数据卷容器。数据卷容器是一个普通的容器,专门提供数据卷给其他容器挂载使用。

#创建一个容器作为数据卷容器
docker run -it --name test2 -v /data1 -v /data2 centos:7 /bin/bash                 

# 创建并进入容器
echo "this is data1" > /data1/test1.txt                          
# 容器内创建测试文件1
echo "THIS IS data2" > /data2/test2.txt                          
# 容器内创建测试文件2
 
# 使用--volumes-from来挂载test2容器中的数据卷到新的容器
docker run -it --name test3 --volumes-from test2 centos:7 /bin/bash
# 创建并进入容器
# 查看测试数据是否同步
cat /data1/test.txt                                       
cat /data2/test.txt

image-20230817155005852

二、容器互联

容器互联是通过容器的名称在容器间建立一条专门的网络通信隧道。简单点说,就是会在源容器和接收容器之间建立一条隧道,接收容器可以看到源容器指定的信息。

# 创建并运行源容器取名w1
docker run -itd --name w1 centos:7 /bin/bash
# 创建并运行接收容器取名w2,使用--link选项指定连接容器以实现容器互联
docker run -itd --name w2 --link w1:w1 centos:7 /bin/bash          
# --link容器名:连接的别名
 
#进w2容器,ping w1
docker exec -it w2 bash
ping w1

image-20230817160336206

三、Docker 镜像创建

创建镜像有三种方法,分别为基于已有镜像创建、基于本地模板创建以及基于Dockerfile创建

1. 基于已有镜像创建

(1)首先启动一个镜像,在容器里做修改

docker run -itd --name test4 centos:7 /bin/bash
docker exec -it test4 /bin/bash
yum -y install net-tools         
# 可以在容器里面安装 net-tools工具,net-tools是一个常用的网络管理工具集合,包含了一些常用的网络诊断和配置命令,如ifconfig、netstat等

ifconfig

exit

(2)将修改后的容器提交为新的镜像,需要使用该容器的ID号创建新镜像

docker commit -m "new" -a "centos" 000550eb36da centos:test
# 常用选项:
-m 说明信息:
-a 作者信息;
-p 生成过程中停止容器的运行
 
docker images

image-20230817163233720

2. 基于本地模板创建

通过导入操作系统模板文件可以生成镜像,模板可以从OPENVZ开源项目下载,下载地址为:

https://wiki.openvz.org/Download/template/precrated

wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz

# 导入为镜像
cat debian-7.0-x86-minimal.tar.gz | docker import - debian:test

docker images

3. 基于Dockerfile 创建

(1)联合文件系统(UnionFS)

UnionFS(联合文件系统) : Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。AUFS、OberlayFS及Devicemapper都是一种UnionFS。

Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

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

我们下载的时候看到的一层层的就是联合文件系统。

(2)镜像加载原理

Docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统就是UnionFS.

bootfs主要包含bootloader和kernel,bootloader 主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统。

在Docker镜像的最底层是bootfs,这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。

当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。

rootfs,在bootfs之上,包含的就是典型Linux系统中的/dev, /proc, /bin, /etc等标准目录和文件。rootfs 就是各种不同的操作系统发行版,比如Ubuntu, Centos等等。

我们可以理解成一开始内核里什么都没有,操作一个命令下载debian,这时就会在内核上面加了一层基础镜像;再安装一个emacs,会在基础镜像上叠加一层image;接着再安装一个apache,又会在images.上面再叠加一层image。

最后它们看起来就像一个文件系统即容器的rootfs。在Docker的体系里把这些rootfs叫做Docker的镜像。但是,此时的每一层rootfs都是read-only的,我们此时还不能对其进行操作。

当我们创建一个容器,也就是将Docker镜像进行实例化,系统会在一层或是多层read-only的rootfs之上分配一层空的read-write的rootfs。

标签:容器,创建,文件系统,数据管理,镜像,Docker,docker
From: https://www.cnblogs.com/m-zhuang/p/17644774.html

相关文章

  • Dockerfile 构建镜像
    目录一、构建Apache镜像1.创建工作目录2.编辑Dockerfile脚本3.编辑run执行脚本4.准备网站页面5.生成镜像6.新镜像运行容器7.测试二、构建SSH镜像1.创建工作目录2.创建Dockerfile脚本3.生成镜像4.启动容器并使用密码登录5.更改密码三、构建Systemctl镜像1.创建......
  • Docker 搭建 LNMP 架构的 Wordpress网站
    目录一、项目环境二、服务器环境三、任务需求四、获取Linux系统基础镜像五、Nginx1.建立工作目录2.编写Dockerfile脚本3.编辑nginx的主配置文件4.生成镜像5.创建自定义网络6.启动镜像容器7.验证nginx六、MySQL1.建立工作目录2.编写Dockerfile3.编辑mysql主配......
  • Dockerfile创建镜像
    Dockerfile是用于定义和构建Docker镜像的重要工具,它使得镜像的构建过程更加可控、可重复和可自动化,为应用程序的打包、分发和部署提供了便利性和灵活性。目录一、创建镜像方法二、Dockerfile概述三、Dockerfile操作指令 四、Dockerfile案例五、总结  一、创建镜像方......
  • docker——创建一个harbor仓库
    1.什么是harbor就像docker官方一样,它有一个hub.docker.com的官方仓库,给我们提供很多实用的镜像文件,使得我们直接使用dockerpull将需要的镜像拉取下来就可以运行使用了。同样的,我们用户自己也可以创建一个镜像仓库,把我们自己创建的镜像文件推送的私有的harbor仓库里面去,也可以拉取......
  • 如何解决docker 一直转圈圈而不start
    今天在进行启动docker的时候出现了一直转圈圈而不能启动的问题我的电脑是windows10,解决步骤是:首先右击右下角任务栏中的小图标docker,有个Switchtowindowscontainers选择后,打开WindowsPowerShell以管理员的身份运行然后输入Enable-WindowsOptionalFeature-Online-Feat......
  • docker网络
    一、docker网络1、docker网络默认启动的时候,会创建三个网络dockernetworkls2、dockernetworkinspectbridge查看网络 网络的详细信息,包括网络的名称、驱动程序、子网、网关、连接的容器等3、dockernetworkcreatedemo创建网络报错解决4、dockernetworkrmdemo删除网络二......
  • 【Docker实战】使用Docker部署Tomcat
    (【Docker实战】使用Docker部署Tomcat)一、Tomcat介绍1.Tomcat简介Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。2.Tomcat特点Tomcat是一种开源的、轻量......
  • 桌面版vscode用免费的微软4核8G服务器做远程开发(编译运行都在云上,还能自由创建docker
    欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos本篇概览在前文《浏览器上写代码,4核8G微软服务器免费用,Codespaces真香》中,咱们以一个Java程序员视角体验了GitHub的Codespaces产品的beta版,简单来说有以下两大收获:网......
  • Docker容器操作
    1dockerexec这个命令dockerexec是对运行状态的容器进行执行一个命令,exec就是execute的简写,单词就是执行的意思。例如我们基本上容器都是说linux环境下的容器,在linux下我们经常做的事情就是要执行各种shell命令,所以这个命令用到最多的场景是执行一个容器下的bash程序,然后输入一个......
  • openGauss学习笔记-45 openGauss 高级数据管理-物化视图
    openGauss学习笔记-45openGauss高级数据管理-物化视图物化视图是相对普通视图而言的。普通视图是虚拟表,而物化视图实际上就是存储SQL执行语句的结果,可以直接使用数据而不用重复执行查询语句,从而提升性能。按照刷新方式物化视图分为两种:全量物化视图:仅支持对已创建的物化视图......