Docker网络和存储

Docker网络模型

Docker 使用了不同的网络模式来管理容器之间的网络连接。默认情况下,Docker 为每个容器分配一个虚拟网络接口,并通过不同的网络驱动来控制它们的行为。Docker支持以下几种网络模式:

  1. 桥接网络(Bridge)

    桥接网络是 Docker 默认的网络模式。每当你启动一个容器时,Docker 会自动将容器连接到桥接网络,并为容器分配一个 IP 地址。容器可以通过该 IP 地址和外部世界进行通信,但容器之间的通信默认是被隔离的。

    • 应用场景:适用于容器需要与宿主机进行通信,同时容器之间也需要隔离的情况。比如一个 Web 服务容器与一个数据库容器相互通信的场景。

    • 如何使用

      1
      2
      docker network create --driver bridge my-bridge-network
      docker run --network my-bridge-network my-container
  2. 主机网络(Host)

    主机网络模式意味着容器与宿主机共享网络栈,容器不会有独立的网络命名空间。容器会直接使用宿主机的 IP 地址,因此它们与宿主机在网络上是完全相同的。

    • 应用场景:适用于需要高性能网络连接的容器,比如高流量的应用程序,或者在容器中运行需要与宿主机网络紧密集成的服务。

    • 如何使用

      1
      docker run --network host my-container
  3. 容器网络(Container)

    容器网络模式允许一个容器共享另一个容器的网络命名空间。这意味着两个容器共享同一个 IP 地址,彼此间可以通过 localhost 来通信,而不需要额外的网络配置。

    • 应用场景:适用于那些需要共享网络堆栈的容器,或者需要直接访问对方服务的容器之间。

    • 如何使用

      1
      docker run --network container:my-existing-container my-new-container
  4. 无网络(None)

    无网络模式意味着容器完全没有网络连接。它不会连接到任何网络,并且容器之间无法进行通信。此模式常用于对网络没有要求的应用,或者用于网络安全隔离。

    • 应用场景:用于高安全性需求的容器,避免容器直接接入网络。

    • 如何使用

      1
      docker run --network none my-container
  5. Overlay 网络

    Overlay 网络允许跨多个 Docker 主机通信的容器可以连接到同一个网络。这是 Docker Swarm 集群模式中的默认网络驱动,它能够使分布式应用的容器之间像本地网络一样进行通信。

    • 应用场景:适用于需要跨多个主机进行通信的应用,比如在 Docker Swarm 或 Kubernetes 集群中运行的服务。

    • 如何使用

      1
      docker network create --driver overlay my-overlay-network

Docker 数据卷(Volumes)

Docker 容器通常是临时的,容器内的数据在容器停止后会丢失。因此,持久化存储是容器化应用的一个重要问题。Docker 提供了 数据卷(Volumes) 来解决这个问题。

数据卷 是一种由 Docker 管理的、与容器生命周期无关的存储机制。它可以存储在宿主机上,且数据卷可以在不同容器之间共享或持久化。相比容器内的文件系统,数据卷更加可靠和持久。

  1. 创建数据卷

    Docker 提供了一个简单的命令来创建数据卷:

    1
    docker volume create my-volume
  2. 挂载数据卷

    创建数据卷后,可以将它挂载到容器中。数据卷会将容器中的某个目录映射到宿主机上的指定路径,从而使数据在容器之间共享,或在容器停止后依然存在。

    • 示例: 挂载数据卷到容器的 /data 目录
      1
      docker run -v my-volume:/data my-container
  3. 查看数据卷

    你可以使用以下命令查看系统中的所有数据卷:

    1
    docker volume ls
  4. 删除数据卷

    如果数据卷不再需要,可以删除它:

    1
    docker volume rm my-volume

数据卷的使用场景

  • 持久化数据:如果你需要保存容器中的数据,可以将其存储在数据卷中。例如,数据库容器中的数据通常会存储在数据卷中,这样容器删除或重启时,数据不会丢失。

  • 容器间共享数据:多个容器可以挂载同一个数据卷,从而共享数据。例如,一个容器生成文件,另一个容器可以读取这些文件。

  • 备份和恢复:数据卷中的数据可以独立于容器进行备份和恢复。这对于确保数据的安全性和可靠性非常重要。

使用绑定挂载(Bind Mounts)

除了数据卷,Docker 还提供了 绑定挂载(Bind Mounts) 作为另一种存储解决方案。与数据卷不同,绑定挂载将宿主机的某个文件或目录直接挂载到容器内部。

  • 应用场景:适用于容器需要访问宿主机上的特定文件或目录的情况,例如开发过程中需要编辑宿主机上的文件并让容器立刻访问这些文件。

  • 如何使用

    1
    docker run -v /host/path:/container/path my-container

    在这个命令中,/host/path 是宿主机上的目录,/container/path 是容器内的目录。

总结

  • Docker 网络:Docker 提供了多种网络模式(如桥接网络、主机网络、容器网络、无网络和 Overlay 网络)来适应不同的容器间通信需求。
  • Docker 数据卷(Volumes):数据卷是一种由 Docker 管理的持久化存储方式,可以用来存储和共享容器的数据。它们比容器本地存储更加可靠,且支持数据持久化和容器间共享。
  • 绑定挂载(Bind Mounts):将宿主机上的文件或目录挂载到容器内的机制,适合需要实时访问宿主机文件的场景。