Docker网络管理

本文详细介绍了Docker的网络模式,包括bridge、host和none模式,并通过实例展示了如何创建和使用这些网络模式。在bridge模式下,容器间可以相互通信,同一宿主机上容器在同一网段。host模式下,容器与宿主机共享网络栈,容器IP与宿主机相同。none模式则不进行网络配置。此外,还演示了如何对外部访问容器内的服务,以及如何自定义Docker默认网桥的网络配置。
摘要由CSDN通过智能技术生成

查询网络列表

[root@localhost ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
44a5886ba7b7        bridge              bridge              local
52e7a1f6e41a        host                host                local
0c371794f186        none                null                local

查询具体信息

[root@localhost ~]# docker network inspect bridge
[
    {
        "Name": "bridge",
        "Id": "44a5886ba7b75ef06a892232618984d57823b63418c7697652d61b31f8a064d5",
        "Created": "2020-12-16T01:35:51.164348347+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": {},
        "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": {}
    }
]

bridge模式
默认情况下不指定网络会创建bridge模式

[root@localhost ~]# docker run -itd --name www centos:latest /bin/bash
24dc9d447917a219101b97bb404d05d10b53e0928ce72ee2c9ef1cc77f17a1fe
[root@localhost ~]# docker exec -it www ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
4: eth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever

指定模式为bridge模式
[root@localhost ~]# docker run -itd --name rrr --net=bridge centos:latest /bin/bash
1d6cbd9d9f8bb2ee28251a713a9032ee8f3a361eefe22d239780498d90001fdc
不进入容器查看ip

[root@localhost ~]# docker exec rrr ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
6: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever

同一个宿主机上的所有容器会在同一个网段下,相互之间是可以通信的
```bash
[root@localhost ~]# docker exec -it  rrr /bin/bash
[root@1d6cbd9d9f8b /]# ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.653 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.045 ms
^C
--- 172.17.0.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 2ms
rtt min/avg/max/mdev = 0.045/0.349/0.653/0.304 ms

host模式
容器的ip和虚拟机的ip一致

[root@localhost ~]# docker run -itd --name xxx --net=host centos bash
d7349e0535ee514e5a108cfae134568833c39d2261ae0d10e9fbf90bb832b357
[root@localhost ~]# docker exec -it xxx ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:be:a6:8c brd ff:ff:ff:ff:ff:ff
    inet 192.168.200.69/24 brd 192.168.200.255 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:febe:a68c/64 scope link 
       valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:53:01:7a:ed 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:53ff:fe01:7aed/64 scope link 
       valid_lft forever preferred_lft forever
5: veth5ea9ea8@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
    link/ether b2:50:09:0c:5a:1a brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::b050:9ff:fe0c:5a1a/64 scope link 
       valid_lft forever preferred_lft forever
7: veth7354ddf@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
    link/ether 42:d8:e0:a6:40:40 brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet6 fe80::40d8:e0ff:fea6:4040/64 scope link 
       valid_lft forever preferred_lft forever
```bash
[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:be:a6:8c brd ff:ff:ff:ff:ff:ff
    inet 192.168.200.69/24 brd 192.168.200.255 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:febe:a68c/64 scope link 
       valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:53:01:7a:ed 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:53ff:fe01:7aed/64 scope link 
       valid_lft forever preferred_lft forever
5: veth5ea9ea8@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP 
    link/ether b2:50:09:0c:5a:1a brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::b050:9ff:fe0c:5a1a/64 scope link 
       valid_lft forever preferred_lft forever
7: veth7354ddf@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP 
    link/ether 42:d8:e0:a6:40:40 brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet6 fe80::40d8:e0ff:fea6:4040/64 scope link 
       valid_lft forever preferred_lft forever
none模式
不进行网络配置

```bash
这里是引用

```bash

```bash

```bash
[root@localhost ~]# docker run -itd --name lll --net=none centos bash
3cbfae8673da7707b9312c7f29f14823d67b2e381ae3bed0011d3a5a27beaefb
[root@localhost ~]# docker exec -it lll ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever

查询网络信息



[root@localhost ~]# docker inspect none
[
    {
        "Name": "none",
        "Id": "0c371794f1860457f967323dea7f8f002165c1046ed6492b02db9c018bf1cc49",
        "Created": "2020-12-16T01:27:30.280671499+08:00",
        "Scope": "local",
        "Driver": "null",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": []
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "3cbfae8673da7707b9312c7f29f14823d67b2e381ae3bed0011d3a5a27beaefb": {
                "Name": "lll",
                "EndpointID": "c2828b70284af57eeab5af00db021ebae6dab53a5fc066a5292ca51114d26c27",
                "MacAddress": "",
                "IPv4Address": "",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

外部访问网络
新建一个容器

[root@localhost ~]# docker run -itd --name llfff centos /bin/bash
4addc25e1fbb6a981535b14e9cef0bb73f4a8c118b358caaf9ed12b079b7dc25
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
4addc25e1fbb        centos              "/bin/bash"         8 seconds ago       Up 5 seconds                            llfff
在容器里面安装httpd服务
[root@localhost ~]# docker exec -it llfff /bin/bash
[root@4addc25e1fbb /]# yum install  httpd net-tools -y

导成镜像,再使用镜像创建容器并指定端口映射

[root@localhost ~]# docker commit -m "install http" -a"liufengfeng" eefb35f3589a   liufenger
[root@localhost ~]# docker run -it -p 6666:80 2f034a49a60b   /bin/bash
[root@ba0217b5ad96 /]# httpd -k start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.6. Set the 'ServerName' directive globally to suppress this message
[root@ba0217b5ad96 /]# netstat -ntpl                    
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      15/httpd
    [root@localhost ~]# docker start ba0217b5ad96
ba0217b5ad96
[root@localhost ~]# docker exec -it ba0217b5ad96 /bin/bash
[root@ba0217b5ad96 /]# vi /var/www/html/1.html
[root@ba0217b5ad96 /]# cat /var/www/html/1.html
liufengshige 
haoren

用浏览器输入192.168.200.69:6666/1.html
可以看到编辑的内容

给默认网桥设置网段

[root@localhost ~]# docker run -it --name liufengzi --net=bridge 300e315adb2f   /bin/bash
[root@d2bc16e54199 /]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
16: eth0@if17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
[root@localhost ~]# vi /etc/docker/daemon.json添加
bip": "192.168.5.1/24"
[root@localhost ~]# docker start liufengzi
liufengzi
[root@localhost ~]# docker exec -it liufengzi ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
18: eth0@if19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:c0:a8:05:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.5.2/24 brd 192.168.5.255 scope global eth0
       valid_lft forever preferred_lft forever
Docker 提供了各种网络管理选项,用于在容器之间建立网络连接和通信。以下是一些常见的 Docker 网络管理概念和功能: 1. Docker 网络驱动程序(Network Drivers):Docker 支持多种网络驱动程序,用于创建和管理容器之间的网络。默认情况下,Docker 使用 `bridge` 驱动程序。 2. 网络模式(Network Modes):Docker 提供了几种网络模式,用于定义容器如何与主机和其他容器通信。常见的网络模式包括 `bridge`、`host`、`overlay` 和 `none`。 3. 网络创建(Network Creation):可以使用 Docker 命令或 Docker Compose 文件来创建自定义网络。创建自定义网络可以为容器提供隔离的网络环境,并根据需要配置网络参数。 4. 容器连接(Container Networking):可以使用 Docker 命令或 Docker Compose 文件将容器连接到特定网络。这样可以使容器能够通过网络与其他容器或主机进行通信。 5. 网络别名(Network Aliases):Docker 允许为容器分配多个网络别名,这样容器可以通过多个名称进行访问。这对于容器之间的相互通信和服务发现非常有用。 6. 跨主机网络(Multi-Host Networking):Docker 提供了 `overlay` 和 `macvlan` 网络驱动程序,允许在多个 Docker 主机之间创建跨主机网络。这样可以在分布式环境轻松地管理容器之间的通信。 以上只是 Docker 网络管理的一些基本概念和功能。具体使用方法和配置选项可以参考 Docker 官方文档或其他相关资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值