0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一文带你读懂Docker容器 2

jf_78858299 来源:碳峰博客 作者:Tanyongfeng 2023-02-03 15:33 次阅读

四、Docker网络

当 Docker 启动时,会自动在主机上创建一个 docker0 虚拟网桥,实际上是 Linux 的一个 bridge,可以理解为一个软件交换机。它会在挂载到它的网口之间进行转发。

同时,Docker 随机分配一个本地未占用的私有网段中的一个地址给 docker0 接口。它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。比如典型的 172.17.42.1,掩码为 255.255.0.0。此后启动的容器内的网口也会自动分配一个同一网段(172.17.0.0/16)的地址。这里,我们可以在主机上执行ip addr查看主机ip配置:

图片

image-20220617211231789

进入某一容器,容器内部查看发现容器IP:发现其也属于172.17网段,因此验证上述的文档解释。

图片

image-20220617212110416

图片

dockerhost

除bridge方式,Docker还支持host、container、none三种网络通信方式,使用其它通信方式,只要在Docker启动时,指定–net参数即可。

  • host方式可以让容器无需创建自己的网络协议栈,而直接访问宿主机的网络接口,在容器中执行ip addr会发现与宿主机的网络配置是一样的,host方式让容器直接使用宿主机的网络接口,传输数据的效率会更加高效,避免bridge方式带来的额外开销,但是这种方式也可以让容器访问宿主机的隐私服务,可能会带来意想不到的安全问题,因此应谨慎使用host方式;
  • container方式可以让容器共享一个已经存在容易的网络配置;
  • none方式不会对容器的网络做任务配置,需要用户自己去定制。

外部访问容器

容器允许外部访问,可以在 docker run 时候通过 -p-P 参数来启用。不管用那种办法,其实也是在本地的 iptable 的 nat 表中添加相应的规则。

docker run IMAGE_ID -p 8080:8081 #将container的8081端口开放给宿主机的8080端口,通过访问主机的8080端口就可访问到container的8081端口

容器访问外部

容器所有到外部网络的连接,源地址都会被 NAT 成本地系统的 IP 地址。这是使用 iptables 的源地址伪装操作实现的。

从下图可以看到,对172.18.0.0/16局域网下所有设备需要访问外部网络的时候,会经过NAT地址转换

图片

image-20220617213113673

五、Docker镜像构建

1. Commit命令

docker commit支持扩展现有镜像,创建新的镜像,通常来说,commit命令就是提交容器副本使之成为一个新的镜像

docker commit -m="提交的描述信息"  -a="作者" 容器ID 要创建的目标镜像名:[标签名]

2. Dockerfile构建

Dockerfile也是生成Docker镜像的一种重要手段,也是常用的手段。它是一个文本文件,其中包含我们需要运行以构建 Docker 映像的所有命令。

Docker commit是通过增强原有镜像基础上,重新安装新功能。

Dockerfile, 本镜像需要一次性添加所有所需的依赖镜像

  1. 编写Dockerfile文件
  2. 执行Docker build构建镜像
  3. docker run启动镜像

构建流程

  1. docker从基础镜像运行一个容器
  2. 执行一条指令并对容器做出修改
  3. 执行类似docker commit的操作提交一个新的镜像层
  4. docker再基于刚提交的镜像运行一个新容器
  5. 执行dockerfile中的下一条指令直到所有指令都执行完成

生动概括:dockerfile(中药单子)–> images(中药) —> docker container(药汤)

六、Docker数据管理

Docker分层,联合文件系统。Docker由于是基于Linux上运行的,因此 底层直接使用Host的kernel ,自己需要提供rootfs就可以了。不同的发行版本由于bootfs基本上是一致的,但是rootfs会有差别,因此不同的发行版可以公用bootfs

1. 文件卷的作用

将Docker容器中的数据保存进宿主机中磁盘系统。也就是对数据的要求是持久化的。如果容器实例删除之后,容器内的数据自然就没有了。

因此Docker容器内部的数据可以备份+持久化到本地主机目录

docker run -it --privileged=true  -v 宿主机目录:Docker目录 镜像名
  1. 数据卷可以在容器之间或者宿主机与容器之间共享数据
  2. 可以对容器里面的数据进行持久化或者备份
  3. 更好的管理文件
docker inspect 容器名 #查看容器详情

可以看到Docker Mounts下会计到自己挂载的路径规则

图片

image-20220615200042582

2. 容器卷的继承

docker run -it --privileged=true  --volumes-from 容器父类名 --name  容器名

子容器集成父容器的挂载规则,如果父容器被kill或者stop,不会影响子容器的规则。

心中无女人,编码自然神,忘掉心上人,抬手灭红尘

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开源软件
    +关注

    关注

    0

    文章

    204

    浏览量

    15661
  • 编程
    +关注

    关注

    88

    文章

    3441

    浏览量

    92404
  • Docker
    +关注

    关注

    0

    文章

    437

    浏览量

    11603
收藏 人收藏

    评论

    相关推荐

    如何使用 Docker容器化技术

    对于开发人员来说,Docker肯定都不陌生,今天小编带大家重新学习一下Docker。 什么是 Docker 官话: Docker 是一种开源的容器
    的头像 发表于 09-30 11:24 1w次阅读

    不可思议 片Raspberry Pi 2竟然能跑这么多个Docker 容器

    容器,不过他认为这并不是极限,最起码还可以再执行多倍的容器数量。于是,Docker官方就举办RaspberryPi DockerCon挑战赛,看谁能以
    发表于 10-22 11:30

    读懂电阻和电容的不同

    要了解它们的主要参数。般情况下,对电阻器应考虑其标称阻值、允许偏差和标称功率;对电容器则需了解其标称容量、允许偏差和耐压。读懂电阻和电
    发表于 11-14 10:25

    如何在Docker中创建容器

    Docker个开源的引擎,可以轻松的为任何应用创建个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在
    发表于 01-03 15:58

    理解Docker容器并畅玩docker

    ,不要这么快就搞死它。-----------然后我们在另个命令行中执行另个命令docker run -it --name a2 alpine另
    发表于 11-05 09:54

    读懂接口模块的组合应用有哪些?

    读懂接口模块的组合应用有哪些?
    发表于 05-17 07:15

    读懂什么是NEC协议

    读懂什么是NEC协议?
    发表于 10-15 09:22

    WSL2Docker容器之间相互迁移的教程

    :上面提到的“容器”,实际上是安全的(即:虚机),WSL2内部架构如下:虽然 WSL Docker 很像,但它对 WSL 镜像有应用,就是得从 MS 的商店下载:这个就有点显不那么显眼了,其实你这里
    发表于 03-17 15:13

    Docker容器管理命令()

    1、Docker容器管理命令的使用方法查看当前主机本地docker镜像:启动容器必须依赖镜像,所以要获取到镜像的唯标识
    发表于 04-20 17:55

    Docker容器管理命令(二)

    1、Docker容器管理命令的使用方法批量删除docker 容器docker cp命令docker
    发表于 04-21 11:31

    一文带你读懂Docker容器 1

    Docker** 是一个开源软件,用于开发应用、交付应用、运行应用。 Docker允许用户将基础设施中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。
    的头像 发表于 02-03 15:33 490次阅读
    一文<b class='flag-5'>带你</b><b class='flag-5'>读懂</b><b class='flag-5'>Docker</b><b class='flag-5'>容器</b> 1

    一文带你读懂Docker容器 3

    Docker** 是一个开源软件,用于开发应用、交付应用、运行应用。 Docker允许用户将基础设施中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。
    的头像 发表于 02-03 15:34 403次阅读
    一文<b class='flag-5'>带你</b><b class='flag-5'>读懂</b><b class='flag-5'>Docker</b><b class='flag-5'>容器</b> 3

    docker容器容器之间通信

    Docker是一种轻量级容器化技术,能够将应用程序及其依赖项封装在一个独立、可移植的容器中。而容器化的应用程序通常是以分布式方式设计的,因此实现容器
    的头像 发表于 11-23 09:36 548次阅读

    docker进入容器的方法有哪些

    Docker是一种流行的容器化平台,它能够快速构建、交付和运行应用程序。在使用Docker时,我们经常需要进入容器进行调试、管理和运行命令等操作。本文将详细介绍
    的头像 发表于 11-23 09:45 3432次阅读

    docker容器有几种状态

    Docker 是一种流行的容器化平台,它能够帮助开发人员将应用程序和其依赖打包成一个独立的容器,并且能够在不同的环境中进行部署和运行。在 Docker 中,
    的头像 发表于 11-23 09:50 830次阅读