03-Docker存储和网络

0.Docker镜像透析

镜像加载原理

UnionFS联合文件系统

  • UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级

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

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

  • 人话:想象一下我有一本预言之书,每一页都是一张可以独立存在的篇章,但是当我把所有页按顺序叠在一起时,它们就形成了一个完整的预言日志。现在,如果我想在故事中间添加一个新的章节,我不用重写整个故事,我只需要在中间插入几张新的纸就可以了。而且,这些新页可以随时添加或移除,不会影响到原来的故事。

  • 工作原理:

    • 写时复制(Copy-on-Write) :当你想修改预言(也就是在Docker镜像中做修改)时,你不会直接在原来的页上写,而是复制那一页到一个新的页上,然后在新的页上进行修改。这样,原来的页保持不变,新的页包含了你的修改。
    • 层叠效果:所有的层都叠加在一起,形成一个完整的视图。在Docker中,当你查看镜像时,你看到的是一个包含了所有层的统一文件系统,但实际上每个层都是独立的。
    • 可复用性:因为每个层都是独立的,所以不同的镜像可以共享相同的底层。比如,很多不同的Docker镜像都可能使用同一个基础Ubuntu镜像作为它们的底层。
  • Docker高效性:
    • 可复用性:基础镜像层可以被多个容器共享,不需要每次都重新建造。
    • 轻量级:每个镜像层只包含了必要的改动,而不是完整结构。
    • 快速构建:创建新容器时,只需要添加或修改必要的镜像,而不是从头开始

1.Docker存储

1.1数据卷挂载(目录挂载)

书接上文,容器内可能不必备vi编辑器,这使得容器内对文件的编辑工作会很麻烦,需要一点魔法

  • 目录挂载是指将本地主机上的文件或目录映射到容器内的过程。这样做的目的是为了让容器能够访问主机本地上的文件系统,实现数据持久化或者共享配置文件等功能。
  • 人话: 好不容易辛苦的进入容器对各种配置信息进行修改,忽然有一天容器炸了或者手欠把容器删了,那么配置的各种容器信息和数据都将丢失,使用目录挂载可以将本地文件和容器中的文件进行神秘联动(量子纠缠),你对**本地文件的任何修改都会映射到容器的文件中,**哪怕把容器删除重装,映射关系也不会改变从而数据得到保存

数据卷(volume):是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁

匿名挂载

  • 语法: docker -v 数据卷名:容器目录
  • 不指定本地目录,默认放在/var/lib/docker/volums/xxxx/_data
  • 容器内路径: ro rw 改变读写权限,看到ro说明只能通过本地主机修改文件而非容器内修改
复制代码
#查看帮助信息
docker volum --help
#创建数据卷
docker volume create
#查看所有数据卷
docker volume ls
#删除指定数据卷
docker volume rm
#查看某个数据卷的详情
docker volume inspect
#清除数据卷
docker volume prune
小试羊刀-匿名挂载:
  1. 直接运行并且匿名挂载

    docker run -d -p 80:80 --name nginx -v html:/usr/share/nginx/html nginx

  1. 查看当前数据卷
  1. 查看数据卷信息

createdAt:创建时间

mountpoint:数据卷路径

  1. 切换到该工作目录下就可以看到对应文件信息

具名挂载(用得多)

  • 语法: docker -v 本地目录:容器目录
  • 目录必须以 / 开头,否则会被识别为数据卷
  • (目录和: 之间不能有任何空格)
小试羊刀-具名挂载:
  1. 预备工作,确保容器正常运行
  1. 2.将Linux的IP地址粘到网页即可看到nginx的运行情况
  1. 3查看官方文档可以得知控制网页的html文件路径,进入容器,切换工作目录准备对其修改
  1. 4对页面进行修改刷新可得,容器内甚和至没有vi编辑器,编辑文件难受的一批
  1. 5删除容器重造,页面数据丢失
  1. 6那么现在挂载启动

    docker run -d -p 80:80 --name nginx -v /refle/nghtml:/usr/share/nginx/html nginx

注意,本地不存在的目录会自动创建的,切换到该目录可以看到该文件

  1. 7进入该映射文件会发现没有任何内容,并且访问网页无如何内容

这是因为现在容器内文件的访问会以外面的映射文件为基准

  1. 8所以我们需要在外面的文件建立一个index.html去设置相应的配置信息,此时就可以正常显示
  1. 9现在我们删除容器,用相同的命令挂载启动会发现配置信息得到了保留

1.2制作镜像Dockerfile

  • 镜像就是包含了应用程序,程序运行的系统函数库,运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。
  • 编写dockerfile常见指令

官方文档点我

2.Docker网络

  • 实现进入到某个容器内部去访问另一个容器

2.1利用机器ip+外部端口互相通讯

  • 使用curl http://机器ip+外部端口可以互相访问
  • curl 用于在命令行界面(CLI)中发出网络请求。curl 命令启动并解析提供的 URL,建立一个到 IP 地址 119.45.45.4 的网络连接,它使用 HTTP 协议在端口 99 上发送一个 GET 请求(从服务器检索 数据)到服务器,服务器接收到请求后,它会处理这个请求并返回一个响应,并将其输出到命令行界面
  • 首先存储创建两个容器app1,app2,外部主机端口分别为88,99
  • 进入app1容器并访问容器app2

问题未解决?

2.2利用容器ip+内部端口

  • docker0是 Docker 在宿主机上创建的一个虚拟网络接口。它是 Docker 默认创建的桥接网络(bridge network)的一个组成部分,用于实现 Docker 容器之间 的网络通信以及容器与主机之间的网络通信。
  • docker0为每个容器分配唯一的ip地址,容器之间就可以通过IP地址进行通信
  • 使用curl http://容器ip+内部端口可以互相访问
  • docker inspect container 可以查看容器ip地址
相关推荐
牛奔14 小时前
Docker Compose 两种安装与使用方式详解(适用于 Docker 19.03 版本)
运维·docker·云原生·容器·eureka
Arciab14 小时前
51单片机_LCD1602液晶显示
网络·嵌入式硬件·51单片机
木童66215 小时前
Kubernetes 操作管理完全指南:从陈述式到声明式,覆盖全生命周期
云原生·容器·kubernetes
DX_水位流量监测15 小时前
大坝安全监测之渗流渗压位移监测设备技术解析
大数据·运维·服务器·网络·人工智能·安全
电商API&Tina15 小时前
京东 API 数据采集接口接入与行业分析
运维·服务器·网络·数据库·django·php
童话的守望者16 小时前
dc8靶场通关
网络
不想画图16 小时前
Kubernetes(三)——组网概念和基础操作指令
云原生·容器·kubernetes
寂寞恋上夜16 小时前
异步任务怎么设计:轮询/WebSocket/回调(附PRD写法)
网络·人工智能·websocket·网络协议·markdown转xmind·deepseek思维导图
Tao____16 小时前
基于Ruoyi开发的IOT物联网平台
java·网络·物联网·mqtt·网络协议