docker 网络

docker 网络

我们是用容器,不是运行单机程序,当然是需要运行网络服务在容器中,那么如何配置docker的容器网络,基础的网络配置,网桥配置,端口映射,还是很重要的。

复制代码
[root@docker-200 ~]#docker inspect linux0224_registry

本地的机器的所有容器的ip

复制代码
[root@docker-200 ~]#docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)  | column -t
/sleepy_poincare     -
/linux0224_registry  -  172.17.0.2
/distracted_mendel   -
/nginx               -
/harbor-jobservice   -  172.22.0.3
/harbor-core         -  172.22.0.8
/redis               -  172.22.0.7
/registry            -  172.22.0.5
/harbor-db           -  172.22.0.2
/harbor-portal       -  172.22.0.6
/registryctl         -  172.22.0.9
/harbor-log          -  172.22.0.4

docker 网络功能

docker 的网络功能就是利用linux的network , namespace ,network bridge 虚拟的网络设备实现,默认情况下docker安装完毕后会生成网桥,docker0 ,可以理解为一个交换机,对两端的数据转发,docker的网络接口默认都是虚拟网络接口。

复制代码
2个桥, =======DRIVE=====bridge==========

网络驱动类型====bridge

查看容器有几座桥(容器网络,创建网桥)?

docker network ls

[root@docker-200 ~]#docker network ls
NETWORK ID     NAME                   DRIVER    SCOPE
d759d6afc28e   bridge                 bridge    local
a22b66f2f0c0   dockergitlab_default   bridge    local
e94e1740135d   harbor_harbor          bridge    local
7f0ac5ca9cd1   host                   host      local
15fee521bd3c   none                   null      local
5f10a2922758   root_default           bridge    local
859d85bb6186   tmp_default            bridge    local


几个容器网桥? 5个

如何知道这5个网桥用的网段是?

docker查看资源信息的命令

docker inspect image xx

docker inspect container xx

docker inspect network  xx


# 补充一点
第一个网桥是docker生成的docker0

在定制一个网桥去运行容器

网桥的作用就是容器和docker0进行连接,就是为了数据包的收发

关于docker网桥的学习

指定现有网桥运行新的容器

查看运行后的容器,虚拟网络接口和宿主机网桥的关系。

查看现有的网桥的信息

docker inspect 网络驱动的id

基于宿主机的brctl ,网络管理命令去查看网桥信息

复制代码
yum install bridge-utils -y 

[root@docker-200 ~]#docker network rm  859d85bb6186 5f10a2922758
859d85bb6186
5f10a2922758
[root@docker-200 ~]#
[root@docker-200 ~]#docker network rm  859d85bb6186 5f10a2922758
Error: No such network: 859d85bb6186
Error: No such network: 5f10a2922758
[root@docker-200 ~]#
[root@docker-200 ~]#docker network prune 
WARNING! This will remove all custom networks not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Networks:
harbor_harbor
dockergitlab_default




# 查看剩下的默认的docker网络环境信息

[root@docker-200 ~]#ip addr 



4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:ad:e8:ba:38 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:adff:fee8:ba38/64 scope link 
       valid_lft forever preferred_lft forever
[root@docker-200 ~]#

#查看宿主机的网桥信息


[root@docker-200 ~]#brctl show
bridge name	bridge id		STP enabled	interfaces
docker0		8000.0242ade8ba38	no	

删除无用的网桥、

复制代码
docker network prune  清理没有容器在用的的网桥

容器之间访问

复制代码
走同一个网桥下,链接同一个网桥,就可以实现容器的网络通信

这个虚拟网桥

172.16.0.0 

172.16.2.2
172.16.2.3

container 模式

container 模式是容器使用另一个存在的容器,共享他的网络空间

container模式下的网络空间,和宿主机是完全隔离的

(面试题)docker网络模式4种

--net=bridge 这个是默认的模式,连接到默认的网桥docker0,这个模式给容器自动的分配ip,且通过iptables的net表和宿主机实现数据通信。
--net=host 告诉Docker不要将容器网络放到隔离的命名空间,即不要容器化容器内的网络,此时容器内使用本地主机的网络,它完全拥有本地主机接口访问权限
--net=container:NAME_or_ID 让DOCKER 将新建的进程放到一个已经存在的网络栈种,新容器进程拥有自己的文件系统,进程列表,和已经存在的容器共享ip地址,网络端口等资源,
--net=none 让Docker 将新的容器放到隔离的网络栈中,但是不进行网络配置,用户可以自行配置

2.1 创建容器,用自带的网桥,brdige,基于docker network 查看

复制代码
[root@docker-110 ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
fca76ebba6d5   bridge    bridge    local
0db7cc002f15   host      host      local
2038547e0c41   none      null      local

[root@docker-200 ~]#docker run --name docker    --network=fca76ebba6d5   -it busybox sh


-----
[root@docker-200 ~]#docker run --name bride-net    --network=bridge   -it busybox sh
/ # 
/ # 
/ # 

# br-linux0225   192.168.56.0/24   

同理如上



# 创建自建网桥

docker network create --driver bridge --subnet 192.168.55.0/24  --gateway 192.168.55.1 linux0224-net1

[root@docker-200 ~]#docker network ls
NETWORK ID     NAME             DRIVER    SCOPE
00dafdbf4726   bridge           bridge    local
7f0ac5ca9cd1   host             host      local
5ab8b0856f15   linux0224-net1   bridge    local
15fee521bd3c   none             null      local

[root@docker-200 ~]#brctl show
bridge name	bridge id		STP enabled	interfaces
br-5ab8b0856f15		8000.024247e06d14	no		
docker0		8000.0242ade8ba38	no		
[root@docker-200 ~]#
[root@docker-200 ~]#ifconfig 
br-5ab8b0856f15: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.55.1  netmask 255.255.255.0  broadcast 192.168.55.255
        ether 02:42:47:e0:6d:14  txqueuelen 0  (Ethernet)
        RX packets 18  bytes 1080 (1.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 14  bytes 1008 (1008.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


# 使用该网桥,运行容器了

docker run -it --network=linux0224-net1  busybox sh
复制代码
1.网桥 名字  linux0224-net2  子网是  172.14.0.0/16  网关是 172.14.0.1

docker network create --driver bridge --subnet 172.14.0.0/16  --gateway 172.14.0.1 linux0224-net2


如何查看有那些网桥
docker network ls
ifconfig 
brctl show 
ip addr 

2. 使用该网桥,运行容器
运行一个nginx容器,且对外11155访问,使用自建网桥,日志挂到宿主机的/tmp/nginx_log/

docker run --network=linux0224-net2  -d -p 11155:80 -v /tmp/nginx_log/:/var/log/nginx/  nginx

3. 查看容器的详细信息
docker inspect 容器id

Destination 挂载点

source 挂载的设备

复制代码
3. 查看容器的详细信息

数据卷信息  -v 的信息,显示到 docker inspect 的 mounts里面


端口信息
            "Ports": {
                "80/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "11155"
                    },
[root@docker-200 ~]#

[root@docker-110 ~]# docker exec c66 bash -c "echo hello haohao do i wish you > /usr/share/ng
# 命令修改页面

小结

1.为什么要学习docker网络管理,容器是要提供访问的,以及容器所处的网络环境,ip从哪里获取

2.docker network命令。brctl 命令

3.如何理解docker网桥,虚拟的网络接口veth

4.自建的docker 网桥,设置子网,网关。

复制代码
```
加强说,ifconfig   ,br-自己建网桥id

查出2个网桥接口
[root@docker-200 ~]#ifconfig  |grep br-
br-5ab8b0856f15: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
br-a0412ee1f5e5: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500



# 基于过滤器参数,查找网桥相关的接口
[root@docker-200 ~]#docker network ls --filter driver=bridge
NETWORK ID     NAME             DRIVER    SCOPE
00dafdbf4726   bridge           bridge    local  # 是默认的docker0
5ab8b0856f15   linux0224-net1   bridge    local
a0412ee1f5e5   linux0224-net2   bridge    local



#brctl命令

[root@docker-200 ~]#brctl show | column -t
bridge           name               bridge  id           STP  enabled  interfaces
br-5ab8b0856f15  8000.024247e06d14  no
br-a0412ee1f5e5  8000.0242ed1d23c5  no      vethffee987
docker0          8000.0242ade8ba38  no
[root@docker-200 ~]#


# 分析,为何 br-a04xxxx  这个网桥,只有它有一个 interfaces网络接口,vethffee987

1。查看当前容器进程
[root@docker-200 ~]#docker ps -q
26f8ce308859


2.查看该容器的网络信息
[root@docker-200 ~]#docker inspect 26f8ce308859 --format="{{.NetworkSettings.Networks}}"
map[linux0224-net2:0xc00065e000]
=========================================================
也就是如下信息
            "Networks": {
                "linux0224-net2": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": [
                        "26f8ce308859"
                    ],
                    "NetworkID": "a0412ee1f5e57a69262c1619625a4de1b04e1e212c016cead532260620913a32",
                    "EndpointID": "485d438d855e7bc7b1e5c719b27b1672819c10edec43b58e4c42d2336ce26b26",
                    "Gateway": "172.14.0.1",
                    "IPAddress": "172.14.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:0e:00:02",
                    "DriverOpts": null

================================================

当前运行中的容器,使用网络配置是 ,名字为 linux0224-net2 的网桥
a0412ee1f5e5   linux0224-net2   bridge    local


[root@docker-200 ~]#docker network ls --filter name=linux0224-net2
NETWORK ID     NAME             DRIVER    SCOPE
a0412ee1f5e5   linux0224-net2   bridge    local

# 查看网桥和容器的关系

[root@docker-110 ~]# docker network ls --filter driver=bridge
NETWORK ID     NAME             DRIVER    SCOPE
fca76ebba6d5   bridge           bridge    local
e5c6866dbfd1   linux0224-net1   bridge    local
b3ca5dd162d9   linux0224-net2   bridge    local

#brctl命令

[root@docker-200 ~]#brctl show | column -t
bridge           name               bridge  id           STP  enabled  interfaces
br-5ab8b0856f15  8000.024247e06d14  no
br-a0412ee1f5e5  8000.0242ed1d23c5  no      vethffee987
docker0          8000.0242ade8ba38  no
[root@docker-200 ~]#


# 分析,为何 br-a04xxxx  这个网桥,只有它有一个 interfaces网络接口,vethffee987

1。查看当前容器进程
[root@docker-200 ~]#docker ps -q
26f8ce308859


2.查看该容器的网络信息
[root@docker-200 ~]#docker inspect 26f8ce308859 --format="{{.NetworkSettings.Networks}}"
map[linux0224-net2:0xc00065e000]


也就是如下信息
            "Networks": {
                "linux0224-net2": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": [
                        "26f8ce308859"
                    ],
                    "NetworkID": "a0412ee1f5e57a69262c1619625a4de1b04e1e212c016cead532260620913a32",
                    "EndpointID": "485d438d855e7bc7b1e5c719b27b1672819c10edec43b58e4c42d2336ce26b26",
                    "Gateway": "172.14.0.1",
                    "IPAddress": "172.14.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:0e:00:02",
                    "DriverOpts": null
                    

当前运行中的容器,使用网络配置是 ,名字为 linux0224-net2 的网桥
a0412ee1f5e5   linux0224-net2   bridge    local


[root@docker-200 ~]#docker network ls --filter name=linux0224-net2
NETWORK ID     NAME             DRIVER    SCOPE
a0412ee1f5e5   linux0224-net2   bridge    local

# 查看网桥和容器的关

总结

相关推荐
墨痕诉清风7 分钟前
Web浏览器客户端检测网站网络健康(代码)
前端·网络·测试工具
ElevenS_it18816 分钟前
Redis监控实战:内存使用+命中率+连接数三类核心指标接入Zabbix+分级告警完整配置方案
运维·网络·redis·mybatis·zabbix
Waay1 小时前
图文详解|K8s Pod内部结构
docker·云原生·kubernetes
oo哦哦1 小时前
搜索矩阵系统的最短路密码:用Dijkstra算法和网络流理论,解释为什么你做了1000个关键词,流量还不如别人30个
网络·算法·矩阵
一起聊电气1 小时前
智能断路器:守护智能照明系统的AI电气安全闸门
网络·人工智能·安全
hu55667981 小时前
华硕路由RT-AC68U梅林固件外部网络(WAN) -自定义 DDNS
网络
cd_949217211 小时前
邮件安全联防预警平台“网哨M01”:全面联防对抗社工钓鱼攻击
网络·安全·web安全
德迅云安全-小潘2 小时前
了解并防范跨站脚本攻击,XSS攻击全解析,德迅云安全SCDN提供全方位的安全
网络·安全·xss
小贾要学习2 小时前
【Linux】基于自定义TCP协议的日期计算器
linux·网络·c++·网络协议·tcp/ip
万里侯3 小时前
Kubernetes成本优化:降低云原生基础设施成本的完整指南
微服务·容器·k8s