Docker网络、端口映射详解篇(三)

简介: 1.docker容器的网络访问1.1.为甚docker容器的地址是172网段在安装好docker后默认会添加一块网卡,和kvm虚拟化一样,都会生成一块新的网卡与docker容器进行连接

1.docker容器的网络访问

1.1.为甚docker容器的地址是172网段

在安装好docker后默认会添加一块网卡,和kvm虚拟化一样,都会生成一块新的网卡与docker容器进行连接image.png

1.1.获取docker容器的IP地址

语法格式:

docker container inspect 容器id

container可有可无

主要看最后的networks
[root@docker01 ~]# docker container  inspect 03d28d536053
"Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "7e951c3c8d83e2c3cdf4ad6f9f14a4c788ba79dec9c3adcdcd28ac9b5da3890d",
                    "EndpointID": "0ce5ffa54b0e09025c85f61699b080ff24a7e2dd1ac0e50f182ec7b51ccb21d8",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
第二种方法使用exec进入容器
[root@docker01 ~]# docker exec -it blissful_moore /bin/bash
root@03d28d536053:/# hostname  -I
172.17.0.2

image.png2.docker容器上网机制

首先安装好docker后会多出来一块网卡叫做docker0,与容器进行互联,运行一个镜像都会开启一个容器,一个镜像可以运行多次,每当运行后都会产生新的ip地址新的配置参数,生成ip地址后,宿主机会多一块vethxxx的网卡,vethxxx的网卡连接docker容器中的ip地址和docker网桥,docker网桥再连接宿主的docker0网卡,当docker容器需要上网时,docker0网卡就会与宿主机网卡ens33或者其他的网卡接口进行内核转发实现nat地址转换,最终由eth网卡去访问互联网,最后依次返回。

image.png如果设置内核转发参数为0,则docker容器无法上网

[root@docker01 ~]# sysctl -a 2>/dev/null | grep ipv4 | grep forward
net.ipv4.ip_forward = 1
[root@docker01 ~]# sysctl net.ipv4.ip_forward=0
[root@docker01 ~]# docker exec -it know_nginx /bin/bash
root@8c98c7834ba6:/# curl -I www.baidu.com
curl: (6) Could not resolve host: www.baidu.com
当内核参数设置为1则可以上网
[root@docker01 ~]# sysctl net.ipv4.ip_forward=1
root@8c98c7834ba6:/# curl -I www.baidu.com
HTTP/1.1 200 OK

3.docker端口映射命令格式:

docker run 选项 镜像名

参数

-p hostport:containerport //一对一映射

-p ip:hostport:containerport //指定ip映射

-p ip::containerport //映射成随机端口

-p hostport:containerport:udp //映射成udp端口

-p 81:80 -p 443:443 //指定多个

随机映射

docker run -P

3.1.一对一映射

[root@docker01 ~]# docker run -d -p 80:80 nginx

3.2.指定ip映射

常用于多个容器都想用80端口

[root@docker01 ~]# ifconfig ens33:1  192.168.81.100 up
[root@docker01 ~]# docker run -d -p 192.168.81.100:80:80 nginx
9f6a7971c3778f1c2345a50dad2b101aa61974057f51193dc791de8bf5407b95
[root@docker01 ~]# netstat -lnpt | grep 80
tcp        0      0 192.168.81.100:80       0.0.0.0:*               LISTEN      111264/docker-proxy 
tcp6       0      0 :::8080  

3.3.随机端口

随机端口默认从32768开始,内核默认指定的可以修改


[root@docker01 ~]# sysctl -a | grep ipv4|grep range

net.ipv4.ip_local_port_range = 32768 60999


扩展:nginx负载均衡与后端服务器连接时也使用随机端口,因此最多可以支持5w个并发,想增大并发量就是多增加几个ip,在dns上面设置例如华北用户走这个ip,华南用户走下一个ip,这样并发就高了,cdn也是这种原理。

[root@docker01 ~]# docker run -d -p ::80 nginx
6519668febb07a832ce1d92fe744e9d9cb4099a580ead6b8e7ced650c14eebff
[root@docker01 ~]# netstat -lnpt | grep docker
tcp        0      0 192.168.81.100:80       0.0.0.0:*               LISTEN      111264/docker-proxy 
tcp6       0      0 :::8080                 :::*                    LISTEN      100300/docker-proxy 
tcp6       0      0 :::32768                :::*                    LISTEN      113247/docker-proxy 
```![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20200901104341587.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk1MzY1OA==,size_16,color_FFFFFF,t_70#pic_center)
目录
相关文章
|
13天前
|
负载均衡 网络协议 开发者
掌握 Docker 网络:构建复杂的容器通信
在 Docker 容器化环境中,容器间的通信至关重要。本文详细介绍了 Docker 网络的基本概念和类型,包括桥接网络、宿主网络、覆盖网络和 Macvlan 网络等,并提供了创建、管理和配置自定义网络的实用命令。通过掌握这些知识,开发者可以构建更健壮和灵活的容器化应用,提高应用的可扩展性和安全性。
|
2月前
|
Kubernetes Devops 持续交付
DevOps实践:使用Docker和Kubernetes实现持续集成和部署网络安全的守护盾:加密技术与安全意识的重要性
【8月更文挑战第27天】本文将引导读者理解并应用DevOps的核心理念,通过Docker和Kubernetes的实战案例,深入探讨如何在现代软件开发中实现自动化的持续集成和部署。文章不仅提供理论知识,还结合真实示例,旨在帮助开发者提升效率,优化工作流程。
|
29天前
|
Shell Linux Docker
自定义Docker网络
这篇文章介绍了如何使用Docker命令自定义网络,并通过创建和配置网络来实现容器间的通信。
30 6
自定义Docker网络
|
5天前
|
网络虚拟化
网络实验 VlAN 中 Trunk Access端口的说明及实验
本文介绍了VLAN技术及其在网络实验中的应用,包括Access端口和Trunk端口的工作原理,以及如何通过实验划分不同VLAN实现内部通信和跨交换机实现VLAN间通信的详细步骤和配置。
网络实验 VlAN 中 Trunk Access端口的说明及实验
|
29天前
|
NoSQL 应用服务中间件 Redis
Docker跨宿主机容器通信-通过网络跨宿主机互联
这篇文章介绍了Docker容器跨宿主机通信的实现方法,包括Docker的四种网络模式(host、none、container、bridge)以及如何通过修改网络配置和添加路由规则来实现不同宿主机上的容器之间的互联。
88 0
Docker跨宿主机容器通信-通过网络跨宿主机互联
|
23天前
|
Kubernetes 安全 Docker
|
2天前
|
网络协议 安全 开发者
掌握 Docker 网络:构建复杂的容器通信
在 Docker 容器化环境中,容器间的通信至关重要。本文详细介绍了 Docker 网络的基础知识,包括网络驱动、端口映射和命名等核心概念,并深入探讨了 Bridge、Host、Overlay 和 Macvlan 四种网络类型的特点及应用场景。此外,还提供了创建、连接、查看和删除自定义网络的命令示例,以及高级网络配置方法,如网络命名空间、DNS 解析和安全通信配置,帮助开发者构建更健壮的容器化应用。
|
2月前
|
存储 监控 安全
端口安全:交换机上的网络守护者
【8月更文挑战第27天】
38 1
|
28天前
|
存储 网络协议 安全
C语言 网络编程(五)Socket和端口
Socket 是 TCP/IP 五层网络模型中应用层的编程接口,用于实现不同主机间应用程序的双向通信。它作为网络通信的端点,连接应用层与网络协议栈,提供可靠的流式或非流式数据传输服务。Socket 包括流式(SOCKET_STREAM)、数据报(SOCK_DGRAM)和原始套接字(SOCK_RAW)三种类型,分别适用于不同场景。通过 IP 地址和端口号,Socket 能准确识别并转发数据包至指定进程。端口号分为知名端口(1-1023)、注册端口(1024-49151)和动态端口(49152-65535),确保数据准确交付。
|
1月前
|
监控 安全 网络协议