docker网络访问和端口映射
文章目录
- docker网络访问和端口映射
- 1.docker容器网络
- 1.1.创建一个centos7的容器
- 1.2.docker网络原理图
- 2.端口映射
- 2.1.创建一个新的IP
- 2.2.多个IP端口映射
- 2.3.随机端口命令
1.docker容器网络
指定映射(docker 会 自动添加一条iptables规则来实现端口映射)
查看容器地址方法一
1.先启动ngninx
[root@localhost ~]#docker run -d -p 80:80 nginx
2.获取一下容器ID
[root@localhost ~]# docker ps -a -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2ee29832f5a8 nginx "/docker-entrypoint.…" 13 minutes ago Up 13 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp angry_ptolemy
3.查看容器的IP地址
[root@localhost ~]#docker container inspect 2ee29832f5a8
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6jpgWrWP-1683532630391)(D:\linux笔记总结\docker\docker网络访问.assets\image-20230327220036776.png)]](https://img-blog.csdnimg.cn/5b4bfdacc44c4e05afe431de61d84761.png)
可以通过登录容器的方式查看
方法二
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eb44dfc7d112 centos "tail -f /etc/hosts" 7 minutes ago Up 7 minutes bold_swirles
cfbe1c462bf3 nginx "/docker-entrypoint.…" 8 minutes ago Up 8 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp eloquent_mirzakhani
[root@localhost ~]# docker exec -it cfbe1c462bf3 bash
root@cfbe1c462bf3:/# hostname -I
172.17.0.2
1.1.创建一个centos7的容器
创建一个centos容器 加tail -f /etc/hosts可以保持容器不会挡掉,可以吭住。
[root@localhost ~]#docker run -it centos tail -f /etc/hosts
使用交互的方式进入容器
[root@localhost ~]#dokcer exec -it a2d38c870ca7 /bin/bash
可以尝试centos系统是可以上网的,我们来curl一下百度。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i8RFCflf-1683532630392)(D:\linux笔记总结\docker\docker网络访问.assets\image-20230327223109377.png)]](https://img-blog.csdnimg.cn/0d72a4de683848a5a38770430c30a5e0.png)
1.2.docker网络原理图
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kvD6Z0SQ-1683532630393)(D:\linux笔记总结\docker\docker网络访问.assets\image-20230327222139184.png)]启动docker之后会自动生成一个docker0的网卡。](https://img-blog.csdnimg.cn/aaecbd889d4243348785ef5bc16b11c0.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sWuM4flV-1683532630393)(D:\linux笔记总结\docker\docker网络访问.assets\image-20230327222218733.png)]](https://img-blog.csdnimg.cn/dc057359151b4cd782596ee68ccbe2be.png)
后面每启动一个容器都会增加veth开头的网卡,veth下面对接容器的地址,veth网卡进行上联docker0的网卡,然后通过内核的转发实现容器的功能。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o2DwWEpm-1683532630394)(D:\linux笔记总结\docker\docker网络访问.assets\image-20230327222337954.png)]](https://img-blog.csdnimg.cn/031c8d5442c34941a06cc2a9249f251f.png)
2.端口映射
把容器的端口映射到物理机本身的端口
把本机的81端口映射到容器nginx的80端口
[root@localhost ~]# docker run -d -p 81:80 nginx
49db108fc63ac4132e3c02f254c119c72006558369befeb3c9d0fbed2296d196
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xIpcZYgG-1683532630394)(D:\linux笔记总结\docker\docker网络访问.assets\image-20230327225330607.png)]](https://img-blog.csdnimg.cn/bd15f320cdf04aa1af2a90e559cc5957.png)
可以看到添加端口映射后新增加的防火墙规则
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lGjGJsrW-1683532630395)(D:\linux笔记总结\docker\docker网络访问.assets\image-20230410151908331.png)]](https://img-blog.csdnimg.cn/11577fcebf5644dda78b59ddff9fa4a3.png)
2.1.创建一个新的IP
[root@localhost ~]# ifconfig ens33:1 192.168.40.10/24 up
2.2.多个IP端口映射
在原来IP地址192.168.40.5和10分别启动一下80端口
如果多个容器都想使用80端口就可以使用这样的方式进行创建一个ip
[root@localhost ~]#docker run -d -p 192.168.40.5:80:80 nginx:latest
[root@localhost ~]#docker run -d -p 192.168.40.10:80:80 nginx:latest
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4J29kR8d-1683532630395)(D:\linux笔记总结\docker\docker网络访问.assets\image-20230410170758104.png)]](https://img-blog.csdnimg.cn/f5447fac6f894dc094a03955ca7767b3.png)
2.3.随机端口命令
[root@localhost ~]# docker run -d -P
-P大写的P创建容器会出现随机端口
[root@localhost ~]# docker run -d -P
-P大写的P创建容器会出现随机端口
随机端口
随机端口默认从32768开始,内核默认指定的可以修改
[root@localhost ~]# sysctl -a | grep ipv4|grep range
net.ipv4.ip_local_port_range = 32768 60999
扩展:nginx负载均衡与后端服务器连接时也使用随机端口,因此最多可以支持5w个并发,想增大并发量就是多增加几个ip,在dns上面设置例如华北用户走这个ip,华南用户走下一个ip,这样并发就高了,cdn也是这种原理。
扩展:nginx负载均衡与后端服务器连接时也使用随机端口,因此最多可以支持5w个并发,想增大并发量就是多增加几个ip,在dns上面设置例如华北用户走这个ip,华南用户走下一个ip,这样并发就高了,cdn也是这种原理。



















