云原生

08-网络

2021-12-10  本文已影响0人  紫荆秋雪_文

净化docker系统

docker system prune

一、云服务器网络

场景:当购买云服务器后部署应用后,使用其他终端并不能访问到该云服务器中的资源,还需要网络配置

image.png

二、Docker网络

1、网络原理

Docker使用 Linux 桥接,在宿主机虚拟一个 Docker 容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个 IP 地址,称为 Container-IP,同时 Docker 网桥是每个容器的默认网关。因为在同一宿主机内的容器都介入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。


Linux虚拟网络技术.png

Docker容器网络就很好的利用了 Linux 虚拟网络技术,在本地主机和容器内分别创建一个虚拟接口,并让它们彼此联通(这对接口叫做 veth pair)
Docker中的网络接口默认都是虚拟的接口。虚拟接口的优势就是转发效率极高(因为Linux是在内核中进行数据的复制来实现虚拟接口之间的数据转发,无需通过外部的网络设备交换),对于本地系统和容器系统来说,虚拟接口跟一个正常的以太网卡相比并没有区别,只是它的速度块很多

2、查看宿主机网络

image.png

3、安装Docker后宿主机网络

image.png

创建容器

3.1、查看宿主机网络

3.2、容器ip

为了查看容器ip,所以需要使用前台启动命令

docker run -it alpine
ip addr
image.png

三、网络模式

1、bridge 模式

2、none 模式

3、Container 模式

4、host 模式

5、用户自定义

四、桥接(bridge)网络原理

A:外界资源如何访问容器

# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                    NAMES
e6169e94ea18   redis:latest   "docker-entrypoint.s…"   18 seconds ago   Up 18 seconds   0.0.0.0:6379->6379/tcp   hungry_panini
53f2f7e3716c   tomcat:8.0     "catalina.sh run"        5 minutes ago    Up 5 minutes    0.0.0.0:8080->8080/tcp   sleepy_bassi
#  iptables -nL
Chain DOCKER (1 references)
target     prot opt source               destination(容器的虚拟ip)
ACCEPT     tcp  --  0.0.0.0/0            172.17.0.2           tcp dpt:8080    # 容器端口
ACCEPT     tcp  --  0.0.0.0/0            172.17.0.3           tcp dpt:6379    # 容器端口
#  netstat -nl | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN

小结:当外界通过公网ip访问+端口访问(8080)访问Tomcat时

B:查看docker 网络

# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
9521b1c99f21   bridge    bridge    local
31f0dfdda38a   host      host      local
4841cdf0c375   none      null      local
# docker inspect 9521b1c99f21
[
    {
        "Name": "bridge",
        "Id": "9521b1c99f216ed7f176942329843a96f6d9b84a3d241a01896a4a3463e4a825",
        "Created": "2021-12-10T14:21:22.818210801+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",    #  子网
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {  #  容器网络
            "53f2f7e3716c7dc8d89417e85c3c973867a0c18c46dc0b6eb33a3c855d345305": {
                "Name": "sleepy_bassi",
                "EndpointID": "4c73e10da636aac4468b7ee95b85ebdf0e0a637e1504c1dce3be3e7a1c83599c",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            },
            "942a4b5030f272c8c2da2415ce87a0b0fc1d44c247f1e5c60acf87c6467c8ce6": {
                "Name": "magical_elbakyan",
                "EndpointID": "a748a3efad11d2e541f2b43eb4eae85f1d98c702df1f2c2f27721aa7e4cdddfd",
                "MacAddress": "02:42:ac:11:00:04",
                "IPv4Address": "172.17.0.4/16",
                "IPv6Address": ""
            },
            "e6169e94ea18297811ec63274d00a6f2d6e11353dca1d9bf35665e562b3fbce6": {
                "Name": "hungry_panini",
                "EndpointID": "f56298d396424d40ffb8434dfd9abe4dc24cc7549a3079287b25f13540e86833",
                "MacAddress": "02:42:ac:11:00:03",
                "IPv4Address": "172.17.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]

C:容器访问容器(容器间是互通的)

场景:在 Tomcat 容器访问 Redis,这就需要在Tomcat容器中可以ping通Redis容器

D:自定义网络

docker network create --subnet=192.168.0.0/16 --gateway=192.168.0.1 raven-net

docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
docker network ls
image.png
docker run -dP --network raven-net --name=redis1 redis:latest
docker run -dP --network raven-net tomcat:8.0

#不加入自定义网络
docker run -dP --name=redis2 redis:latest

E:容器安装ping命令

apt-get update
apt install net-tools
apt install iputil-ping

五、容器(Container)网络

场景:如果需要在Redis容器中ping www.baidu.com 发现没有ping命令,方式一是可以直接安装ping工具,方式二可以再起一个可以执行ping命令容器(alpine)让容器(test)和容器Redis共用同一个网络

docker run -it --network container:redis2 alpine
容器网络.png

小结 image.png

上一篇 下一篇

猜你喜欢

热点阅读