Docker网络与存储

网络:

bridge模式: 当Docker进程启动后,会在主机上创建一个名为docker0的虚拟网桥, 主机上启动的docker容器会连接到这个虚拟网桥上.

docker0子网中分配一个ip给容器使用,并设置docker0的IP地址为容器的默认网关.在主机上创建一堆虚拟网卡设备veth pair设备, Docker将veth pair设备的一端放在新创建的容器中,并命名为eth0(容器的网卡), 另一端放在主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入到docker0网桥中. 可以通过brctl show命令查看.

bridge模式是docker默认的网络模式,不写--net参数,就是bridge模式.使用docker run -p 时,docker实际是在iptables做了DNAT规则.实现端口转发功能.可以使用iptables -t nat -vnl查看

host:如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的NetWork Namespace, 而是和宿主机公用一个NetWork Namespace. 容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP与端口.但是,容器的其它方面,入文件系统,进程列表等还是和宿主机隔离的.

container:新创建的容器与已经存在的一个容器共享一个Network Namespace,而不适合宿主机共享. 

none: 使用None模式, Docker容器拥有自己的Network Namespace, 需要我们自己为Docker容器添加网卡, 配置IP等.

 

存储:

1、镜像如何存储:

查看镜像的分层:
docker history image_id
查看镜像怎么存储的:
docker image inspect image_id

LowerDir :底层目录; diw(只是存储不同);包含小型linux和装好的软件

MergedDir :合并目录;容器最终的完整工作目录全内容都在合并层;数据卷在容器层产生;所有的增删改都在容器层;

UpperDir :上层目录;

WorkDir :工作目录(临时层),pid;

docker底层的 storage driver完成了以下的目录组织结果;

image.png

2、Images and layers

Docker映像由一系列层组成。 每层代表图像的Dockerfile中的一条指令。 除最后一层外的每一层都是只读的。

3、Container and layers

容器和镜像之间的主要区别是可写顶层。

在容器中添加新数据或修改现有数据的所有写操作都存储在此可写层中。删除容器后,可写层也会被删除。 基础图像保持不变。 因为每个容器都有其自己的可写容

器层,并且所有更改都存储在该容器层中,所以多个容器可以共享对同一基础映像的访问,但具有自己的数据状态。

4、Copy On Write

写时复制是一种共享和复制文件的策略,可最大程度地提高效率。如果文件或目录位于镜像的较低层中,而另一层(包括可写层)需要对其进行读取访问,则它仅使

用现有文件。另一层第一次需要修改文件时(在构建镜像或运行容器时),将文件复制到该层并进行修改。 这样可以将I / O和每个后续层的大小最小化。

5 容器的挂载

每一个容器里面的内容,支持三种挂载方式:

1)docker自动在外部创建文件夹自动挂载容器内部指定的文件夹内容【Dockerfile VOLUME指令的作用】

2)自己在外部创建文件夹,手动挂载

3)可以把数据挂载到内存中

Volumes(卷) :存储在主机文件系统的一部分中,该文件系统由Docker管理(在Linux上是“ / var /lib / docker / volumes /”)。 非Docker进程不应修改文件系统的这一部分。 卷是在Docker中持久存储数据的最佳方法。

Bind mounts(绑定挂载) 可以在任何地方存储在主机系统上。 它们甚至可能是重要的系统文件或目录。 Docker主机或Docker容器上的非Docker进程可以随时对其进行修改。

tmpfs mounts(临时挂载) 仅存储在主机系统的内存中,并且永远不会写入主机系统的文件系统。

 

posted @ 2024-02-05 17:02  小兵要进步  阅读(4)  评论(0编辑  收藏  举报