四、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, 本镜像需要一次性添加所有所需的依赖镜像
- 编写Dockerfile文件
- 执行Docker build构建镜像
- docker run启动镜像
构建流程
- docker从基础镜像运行一个容器
- 执行一条指令并对容器做出修改
- 执行类似docker commit的操作提交一个新的镜像层
- docker再基于刚提交的镜像运行一个新容器
- 执行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目录 镜像名
- 数据卷可以在容器之间或者宿主机与容器之间共享数据
- 可以对容器里面的数据进行持久化或者备份
- 更好的管理文件
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
发布评论请先 登录
相关推荐
评论