电子说
四、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参数即可。
容器允许外部访问,可以在 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 commit
支持扩展现有镜像,创建新的镜像,通常来说,commit
命令就是提交容器副本使之成为一个新的镜像
docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
Dockerfile也是生成Docker镜像的一种重要手段,也是常用的手段。它是一个文本文件,其中包含我们需要运行以构建 Docker 映像的所有命令。
Docker commit是通过增强原有镜像基础上,重新安装新功能。
Dockerfile, 本镜像需要一次性添加所有所需的依赖镜像
构建流程
生动概括:dockerfile(中药单子)–> images(中药) —> docker container(药汤)
Docker分层,联合文件系统。Docker由于是基于Linux上运行的,因此 底层直接使用Host的kernel ,自己需要提供rootfs就可以了。不同的发行版本由于bootfs
基本上是一致的,但是rootfs
会有差别,因此不同的发行版可以公用bootfs
。
将Docker容器中的数据保存进宿主机中磁盘系统。也就是对数据的要求是持久化的。如果容器实例删除之后,容器内的数据自然就没有了。
因此Docker容器内部的数据可以备份+持久化到本地主机目录
docker run -it --privileged=true -v 宿主机目录:Docker目录 镜像名
docker inspect 容器名 #查看容器详情
可以看到Docker Mounts下会计到自己挂载的路径规则
image-20220615200042582
docker run -it --privileged=true --volumes-from 容器父类名 --name 容器名
子容器集成父容器的挂载规则,如果父容器被kill或者stop,不会影响子容器的规则。
心中无女人,编码自然神,忘掉心上人,抬手灭红尘
全部0条评论
快来发表一下你的评论吧 !