一文解读Docker 网络Network

2023-11-29 08:05:30 浏览数 (1)

基本介绍

Docker网络是Docker容器之间和容器与外部网络之间的通信和连接的一种机制。在Docker中,每个容器都可以有自己的网络栈,包括网络接口、IP地址和网络配置。Docker网络提供了一种灵活且可定制的方式,使得容器之间可以相互通信,并与主机或其他网络资源进行交互。

在docker中,重启后ip是会变的;docker默认采用bridge连接,启动容器的时候会按照顺序来获取对应ip地址,这就导致容器每次重启后ip都会发生变化。

也就是说容器间使用ip地址来进行通信的话,一旦有容器重启,重启的容器将不再能被访问到。 Docker 网络就能够解决这个问题。

Docker网络作用:容器之间的互联以及端口映射容器IP变动的时候可以通过服务名直接网络通信而不受影响

四种网络模式

网络模式

简介

Bridge(默认)

此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信。

Host

容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。

Container

创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。

None

该模式关闭了容器的网络功能,与宿主机、与其他容器都不连通的.

在使用docker run创建Docker容器时,可以用 --net 选项指定容器的网络模式,Docker可以有以下4种网络模式:

  • bridge模式:使用 --net=bridge 指定,默认设置
  • host模式:使用 --net=host 指定。
  • none模式:使用 --net=none 指定。
  • container模式:使用 --net=container:NAME_or_ID 指定。

Bridge模式

Docker 服务默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),该桥接网络的名称为docker0,它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。Docker 默认指定了 docker0 接口 的 IP 地址和子网掩码,让主机和容器之间可以通过网桥相互通信。

Container 模式

新建的容器和已经存在的一个容器共享一个网络ip配置而不是和宿主机共享。在创建容器时通过参数 --net container:已运行的容器名称|ID 或者 --network container:已运行的容器名称|ID 指定。

Host 模式

直接使用宿主机的 IP 地址与外界进行通信,不再需要额外进行NAT 转换。使用host 网络模式需要在创建容器时通过参数 --net host 或者 --network host 指定,使用了host网络模式就不需要使用-p指定端口号,通过-p设置的参数将不会起到任何作用,端口号会以主机端口号为主,重复时则递增。

Docker 安装完成时,一般会自动创建三个网络,查看命令:

代码语言:javascript复制
docker network ls
代码语言:javascript复制
NETWORK ID          NAME                DRIVER              SCOPE
50527f813731        bridge              bridge              local
d40bdb2f0342        host                host                local
7a7b8938f822        none                null                local

常用命令

命令

作用

docker network connect

将容器连接到网络

docker network create

创建网络

docker network disconnect

断开容器与网络的连接

docker network inspect

显示一个或多个网络上的详细信息

docker network ls

列举所有网络

docker network prune

删除所有未使用的网络

docker network rm

删除一个或多个网络

1、创建网络 test-network docker network create test-network

2、将php容器或其他容器加入到test-network网络 docker network connect test-network php

3、 查看网络 docker network ls

4、 断开和移除网络 移除网络之前需要断开所有连接到网络的容器:docker network disconnet test-network php 移除网络:docker network rm test-network

5、 查看网络内部信息 docker network inspect test-network

​我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞