文章

Docker 网络与存储

本文是对《容器,边缘计算与云原生》一文的补充,建议先看下前文了解基础知识

Docker 网络

Docker 主要网络模式如下:

  • None Network(无网络模式)
  • Host Network(主机网络模式)
  • Bridge Network(桥接网络模式,默认)

Bridge Network

隔离性:各个容器连接到一个宿主机上的虚拟网桥(默认是 docker0)。同一个桥接网络中的容器可以通过容器的 IP 地址直接通信。容器与宿主机之间也可以通过桥接网络通信。通过 -p 选项,可以将宿主机的端口映射到容器的端口。

1
2
# 将宿主机的 8080 端口映射到容器内的 80 端口
docker run -d -p 8080:80 nginx

网络地址转换 (NAT):桥接网络使用 NAT 来将容器的内部 IP 映射到宿主机的 IP,使外部可以访问到容器的服务。Docker 会为桥接网络分配一个子网(例如,默认是 172.17.0.0/16),容器的 IP 地址从该子网中分配。

bridgenetwork

Host Network

共享网络堆栈:在主机网络模式下,容器与宿主机共享相同的网络堆栈

无隔离:容器与宿主机的网络配置相同,没有额外的网络隔离层

性能高:无额外的网络转发层,主机网络模式下的网络性能优于桥接网络

hostnetwork

None Network

无网络配置:容器启动时不配置任何网络,完全隔离。

适用场景:适用于对网络隔离有特殊需求的场景。

nonenetwork

Docker 存储

OverlayFS

OverlayFS(Overlay Filesystem)是一个现代的联合文件系统(Union Filesystem),它允许在多个文件系统层上创建一个单一的文件系统视图:

  • Lowerdir(低层目录):只读层,包含基础文件系统内容
  • Upperdir(高层目录):可写层,包含所有对文件系统的修改
  • Lowerdir 和 Upperdir 合并为一个虚拟的合成目录(Merged)呈现给用户

overlayfs

OverlayFS 是 Docker 的默认存储驱动(Overlay2)

Docker 镜像由多个只读层叠加而成(Dockerfile 中每条语句都会叠加一层)

启动容器时,Docker 会加载只读镜像层并在镜像栈顶部加一个可写层

但要注意的是删除容器时,可写层将会被删除,在上面进行的所有修改也将丢失

overlay2

其他存储方式

除了和容器生命周期绑定的 Overlay 存储方式外,Docker 还提供了其他挂载存储的方式:

  • Volumes
  • Bind Mount
  • Tmpfs Mount

Volumes

Volumes(卷)是 Docker 管理的一种数据存储机制,独立于容器的生命周期。即使容器被删除,卷中的数据仍然保留,可以在其他容器中重新使用

但也正因如此,Docker 在正常情况下不会自动回收未使用的卷,需要用户手动清理不再使用的卷来释放空间

volumes

Bind Mount

Bind Mount(绑定挂载)允许将主机上的一个特定目录或文件挂载到容器内的一个目录或文件

这使得容器可以直接访问和使用主机上的文件系统。绑定挂载的性能几乎与直接访问底层文件系统的性能相当

bindmounts

比如,将宿主机上的网页文件目录挂载到容器内的 nginx 配置目录下,在宿主机上通过开发工具对网页文件的修改可以实时通过容器内的 nginx 测试。

tmpfs Mount

Tmpfs Mount 将数据存储在内存中,而不是持久化到磁盘,特点如下:

  • 高速访问:由于数据存储在内存中,访问速度非常快。
  • 非持久性:数据不会持久化到磁盘,容器停止后数据丢失。
  • 适用场景:适用于需要快速读写且不需要持久化的数据,比如缓存、会话数据等。

tmpfsmount

本文由作者按照 CC BY 4.0 进行授权

© Kai. 保留部分权利。

浙ICP备20006745号-2,本站由 Jekyll 生成,采用 Chirpy 主题。