【docker】网络使用和配置
Docker 网络模式和功能
- 默认网络模式(bridge):Docker 默认使用 bridge 网络模式,创建一个名为 docker0 的虚拟网桥,并为每个容器分配一个 IP 地址。容器间可以通过 IP 地址相互通信
- 主机模式(host): 使用主机模式时,容器直接使用宿主机的网络,与宿主机共享网络接口。容器的网络配置与宿主机相同,可以通过宿主机的 IP 地址直接访问容器。
- 容器间通信: Docker 提供了容器间通信的功能,可以通过容器名称或 IP 地址进行通信。例如,可以使用容器名称作为主机名,在容器间建立连接。
- 端口映射(Port Mapping): Docker 允许将容器内的端口映射到宿主机的端口上,以便容器服务可以通过宿主机 IP 和端口访问。可以使用 -p 或 --publish 参数来指定映射规则。
- 自定义网络(Custom Networks): Docker 允许创建自定义网络,以便在一个自定义的网络中连接多个容器。自定义网络可以提供更好的隔离和网络管理。可以使用 docker network create 命令创建自定义网络。
- DNS 解析: Docker 提供了内置的 DNS 服务,容器可以使用容器名称作为主机名进行 DNS 解析。容器可以通过主机名访问其他容器或外部服务
docker启动容器时用--net选项指定容器的网络模式
Docker有以下4种网络模式:
- bridge模式:使--net =bridge指定,默认设置;
- host模式:使--net =host指定;
- none模式:使--net =none指定;
- container模式:使用--net =container:NAME orID指定。
?
bridge模式(Docker 默认网桥)
默认选择bridge的情况下,容器启动后会通过DHCP获取一个地址.
安装Docker 服务默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。
docker network ls
Docker 安装时会自动在 host 上创建三个网络:none,host,和bridge。
brctl show
查看bridge网络
docker network inspect bridge
启动一个容器
docker run --name nginx-demo -p 8086:80 -d chengxuyuanshitang/nginx:v3
查看创建的创建桥接网络
ip addr
?多个容器通信
创建一个自定义网络,用于容器间的通信
docker network create testnetwork
启动 Nginx 服务器容器,并连接到自定义网络
docker run --name nginx-demo --network=testnetwork -p 8086:80 -d chengxuyuanshitang/nginx:v3
启动mysql 服务器容器,并连接到自定义网络
docker run -itd --name mysql-demo --network=testnetwork -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
Nginx 服务器容器和mysql 数据库容器都连接到同一个自定义网络?testnetwork,它们可以使用容器名称进行通信。
host网络模式
Host 网络模式是 Docker 中的一种网络模式,它与默认的 bridge 模式不同。在 Host 网络模式下,容器与宿主机共享网络命名空间,直接使用宿主机的网络接口进行通信,而不是创建一个单独的网络栈。
- 网络共享: 容器直接使用宿主机的网络接口,与宿主机共享相同的 IP 地址和网络配置。这使得容器可以直接访问宿主机所连接的网络,并且无需进行端口映射。
- 网络性能: 由于容器与宿主机共享网络栈,容器中的网络性能通常更高。容器与宿主机之间的通信不需要经过网络桥接层,减少了网络转发的开销
- 要使用 Host 网络模式启动容器,可以在 docker run 命令中使用 --net=host 参数
- 在 Host 网络模式下,容器将无法使用宿主机上已占用的端口。因此,在启动容器之前,请确保宿主机上的相应端口未被其他服务占用。
- Host 网络模式会使容器与宿主机紧密耦合,容器将直接使用宿主机的网络资源。因此,需要谨慎使用 Host 网络模式,以确保安全性和隔离性。
- 使用 Host 网络模式时,容器的网络配置(例如 IP 地址、子网掩码、网关等)将与宿主机完全相同,无需进行额外的网络配置。
- Host 网络模式适用于一些特定的场景,如需要容器直接与宿主机网络进行交互、需要最大限度提高网络性能的情况等。
启动 Nginx 服务器容器,并连接到自定义网络
docker run --name nginx-demo --net=host --privileged=true -p 8086:80 -d chengxuyuanshitang/nginx:v3
?查看网卡
ip addr
container模式
container模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是和宿主机共享。
新创建的容器不会创建自己的网卡、配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。所以这两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。
两个容器的进程可以通过 lo 网卡设备通信。
创建新容器的时候,通过--net container参数。
--network container:[容器名或容器ID]
# docker inspect 容器别名 | grep IPAddress
docker inspect nginx-demo | grep IPAddress
启动服务
docker run -it --name nginx-demo3 --net container:nginx-demo -d nginx:test
如果加了参数 -p?8087:80。提示: docker: Error response from daemon: conflicting options: port publishing and the container type network mode.
docker run的时候,不能使用-p,因为-p是手动指定端口,而container模式的ip和端口是不受container模式的容器自身控制,它的IP和端口,相当于完全委托给第一个以桥接方式启动的容器了。
??查看网卡
ip addr
对比两个容器发现:
第一个以桥接方式启动的容器的网络信息是全套的,ip 端口 网关,都有。
第二个以container模式启动容器的网络信息,发现毛都没有,都是空的。
none模式(很少被使用)
Docker网络none模式是指创建的容器没有网络地址,只有lo网卡,在无网络模式下,容器没有网络接口,无法与外部网络通信。该模式主要用于一些特殊场景,如只需要运行一个进程的容器或与网络无关的容器。
启动服务
docker run --name nginx-demo4 --net=none -d nginx:test
???查看网卡
ip addr
宿主机的网卡列表没有任何变化。
查看容器的端口启用情况
查看none网络模式下,容器的网络信息
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!