docker之网络访问

2021/5/5 10:30:00

本文主要是介绍docker之网络访问,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 

目录

1.配置IP

2.启动服务

3.服务维护


      在之前的docker初体验中,已经尝试了使用端口映射访问nginx,一块网卡可以配置多个Ip地址,使用ifconfig配置ip地址,务必注意这里的ip地址不能冲突,可以使用ping ip,如果ping同网段的目标Ip不通,表示可用。

1.配置IP

[root@localhost opt]# ifconfig ens33:1 192.168.0.101/24 up
[root@localhost opt]# ifconfig

 

这样就配置了两个ip地址,那是否可以登录呢?

ssh root@192.168.0.101

 

这样宿主机就有两个ip地址,使用ifconfig查看之后,在ens33下有192.168.0.100和192.168.0.101两个ip地址。

2.启动服务

[root@localhost opt]# docker run -d -p 192.168.0.100:80:80 nginx:latest
e2e1a5cbc8334d85acf1e8aa9da670dedbb96bb8fcc3ff7b338c5c63ab11eb91
[root@localhost opt]# docker run -d -p 192.168.0.101:80:80 nginx:latest
6ee5b735e75282d0f444ea54f7417bc3bfb3ff38cb0524e784f62a2f6d62a7ce

启动之后使用docker命令查看

[root@localhost opt]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                      NAMES
6ee5b735e752   nginx:latest   "/docker-entrypoint.…"   2 minutes ago   Up 2 minutes   192.168.0.101:80->80/tcp   frosty_beaver
e2e1a5cbc833   nginx:latest   "/docker-entrypoint.…"   4 minutes ago   Up 2 minutes   192.168.0.100:80->80/tcp   jovial_raman
[root@localhost opt]# netstat -lntup

如果映射端口时不写ip地址,则使用默认的ip

[root@localhost opt]# docker run -d -p 81:80 nginx:latest

这样之后,相当于访问100的时候是一个网站,访问101是另一个网站

3.服务维护

[root@localhost opt]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS         PORTS                               NAMES
c2c9273e9484   nginx:latest   "/docker-entrypoint.…"   2 minutes ago    Up 2 minutes   0.0.0.0:81->80/tcp, :::81->80/tcp   mystifying_feistel
6ee5b735e752   nginx:latest   "/docker-entrypoint.…"   9 minutes ago    Up 9 minutes   192.168.0.101:80->80/tcp            frosty_beaver
e2e1a5cbc833   nginx:latest   "/docker-entrypoint.…"   10 minutes ago   Up 9 minutes   192.168.0.100:80->80/tcp            jovial_raman

这样共有三个容器,进入一个容器,修改器首页信息

[root@localhost opt]# docker exec -it 6ee5b735e752 /bin/bash
root@6ee5b735e752:/# echo '101:80'>/usr/share/nginx/html/index.html

再次访问192.168.0.101

当然也可以使用其他命令来做映射

-p hostPort:containerPott
-p ip:honstPort:containerPort  多个容器都想使用80端口
-p ip::containerPort(随机端口)
-p hostPort:containerPort:udp 使用udp协议
-p 192.168.0.104::53:udp 使用宿主机的104ip地址随机端口的udp协议映射到容器udp协议的53端口
-p 81:80 -p 443:443 指定多个port

随机映射-随机端口
docker run -P nginx:latest

前面两个已经介绍了,现在看看对于随机端口如何使用。先使用netstat命令查看一下当前的网络信息

[root@localhost opt]# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1749/dnsmasq        
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1194/sshd           
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1193/cupsd          
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1411/master         
tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN      7574/sshd: root@pts 
tcp        0      0 127.0.0.1:6011          0.0.0.0:*               LISTEN      27560/sshd: root@pt 
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      779/rpcbind         
tcp        0      0 192.168.0.101:80        0.0.0.0:*               LISTEN      7818/docker-proxy   
tcp        0      0 192.168.0.100:80        0.0.0.0:*               LISTEN      7688/docker-proxy   
tcp        0      0 0.0.0.0:81              0.0.0.0:*               LISTEN      7999/docker-proxy   
tcp6       0      0 :::22                   :::*                    LISTEN      1194/sshd           
tcp6       0      0 ::1:631                 :::*                    LISTEN      1193/cupsd          
tcp6       0      0 ::1:25                  :::*                    LISTEN      1411/master         
tcp6       0      0 ::1:6010                :::*                    LISTEN      7574/sshd: root@pts 
tcp6       0      0 ::1:6011                :::*                    LISTEN      27560/sshd: root@pt 
tcp6       0      0 :::111                  :::*                    LISTEN      779/rpcbind         
tcp6       0      0 :::81                   :::*                    LISTEN      8007/docker-proxy   
udp        0      0 0.0.0.0:917             0.0.0.0:*                           779/rpcbind         
udp        0      0 192.168.122.1:53        0.0.0.0:*                           1749/dnsmasq        
udp        0      0 0.0.0.0:67              0.0.0.0:*                           1749/dnsmasq        
udp        0      0 0.0.0.0:111             0.0.0.0:*                           779/rpcbind         
udp        0      0 0.0.0.0:32973           0.0.0.0:*                           772/avahi-daemon: r 
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           772/avahi-daemon: r 
udp6       0      0 :::917                  :::*                                779/rpcbind         
udp6       0      0 :::111                  :::*                                779/rpcbind   

注意观察上面的ip地址和port信息,接着使用如下命令连续执行两次 

[root@localhost opt]# docker run -d -p 192.168.0.101::80 nginx:latest
3a885ede52674ad84570573ac9cb7f4182c809bfa9fd39b4c6ae4ff7a6026dc6
[root@localhost opt]# docker run -d -p 192.168.0.101::80 nginx:latest
738b4313c4f779212547a19a1a7ed231133e71d6ecd08b6f59faf90d0ccd304d

再次使用netstat查看,发现多了两个端口为49153和49154的端口吗,那为什么是这个端口呢 

这个是内核参数决定的,使用sysctl过滤下网络信息

[root@localhost opt]# 
[root@localhost opt]# sysctl -a|grep ipv4|grep rang
net.ipv4.ip_local_port_range = 32768	60999
sysctl: reading key "net.ipv6.conf.all.stable_secret"

端口为从32768到60999这个范围。这个有什么应用呢,比如用户访问web服务器的时候,比如使用了nginx反向代理的过程中,我们知道用户可以开多个网页。

因此入股不使用调优技术,则只能使用3个访问请求,调优之后比如调成10000-60999,差不多5万个多个也无法突破,因此使用多个负载均衡(比如使用4层负载均衡,如lvs),对接web服务集群。

 



这篇关于docker之网络访问的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程