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

    文章

    210

    浏览量

    15900
  • 编程
    +关注

    关注

    88

    文章

    3614

    浏览量

    93686
  • Docker
    +关注

    关注

    0

    文章

    457

    浏览量

    11846
收藏 人收藏

    评论

    相关推荐

    带你搞懂Docker容器的核心基石Cgroups

    可以限制、记录任务组所使用的物理组员(比如 CPU、Memory、IO等),为容器实现虚拟化提供了基本保证,是构建 Docker些列虚拟化管理工具的基石。今天我们就来详细介绍
    发表于 11-24 09:54 598次阅读

    带你入门Docker容器

    docker不是个值得投入的领域,它解决的问题是Unix系统最初设计的个疏忽。从个不会用docker的小白,自己
    发表于 06-05 14:44 533次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>带你</b>入门<b class='flag-5'>Docker</b><b class='flag-5'>容器</b>

    如何使用 Docker容器化技术

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

    ARM平台实现Docker容器技术

    T113-i工业核心板在支持Docker后,其性价比还将进步提升!图2基于T113-i平台实现Docker容器技术 如下为基于全志T113
    发表于 07-17 11:05

    如何在Docker中创建容器

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

    理解Docker容器并畅玩docker

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

    读懂什么是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 773次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b><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 605次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>带你</b><b class='flag-5'>读懂</b><b class='flag-5'>Docker</b><b class='flag-5'>容器</b> 3

    读懂,什么是BLE?

    读懂,什么是BLE?
    的头像 发表于 11-27 17:11 2279次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>读懂</b>,什么是BLE?

    docker容器容器之间通信

    Docker种轻量级容器化技术,能够将应用程序及其依赖项封装在个独立、可移植的容器中。而容器
    的头像 发表于 11-23 09:36 1544次阅读

    docker进入容器的方法有哪些

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