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

# 查看网桥和容器的关

总结

相关推荐
领世达检测V1335290924913 分钟前
智能门锁申请 EN 18031 欧盟网络安全认证指南
网络·安全
bbsh20992 小时前
SiteAzure:SetCookie 未设置Secure
前端·网络·安全·siteazure
wearegogog1233 小时前
Docker Buildx 简介与安装指南
运维·docker·容器
wanhengidc3 小时前
造成服务器宕机的原因都有哪些?
运维·服务器·网络
西北大程序猿3 小时前
服务器代码知识点补充
服务器·开发语言·网络·c++·网络协议
yangzx的网工日常5 小时前
网络的那些事——初级——OSPF(2)
网络
暮色_年华5 小时前
《TCP/IP协议卷1》第9章 IP选路
网络
搬码临时工5 小时前
别人如何访问我的内网呢? 设置让外网访问内网本地服务器和指定端口应用的几种方式
服务器·网络·智能路由器
yangzx的网工日常5 小时前
网络的那些事——初级——OSPF(1)
运维·服务器·网络
暮色_年华5 小时前
《TCP/IP协议卷1》第1章 概述
网络