前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一文解读Docker 网络Network

一文解读Docker 网络Network

原创
作者头像
一个风轻云淡
修改2023-11-29 08:05:30
7340
修改2023-11-29 08:05:30
举报
文章被收录于专栏:java学习java

基本介绍

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腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本介绍
  • 四种网络模式
  • 常用命令
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档