zoukankan      html  css  js  c++  java
  • docker学习:6.docker网络管理

    6 docker网络管理

    6.1 查看docker网络

    docker network 命令

    选项说明

    Commands instruction
    connect Connect a container to a network
    create Create a networ
    disconnect Disconnect a container from a network
    inspect Display detailed information on one or more network
    ls List network
    prune Remove all unused network
    rm Remove one or more networks

    6.1.1 查看docker所有的网络配置清单

    命令:docker network list

    
    [root@vms41 ~]# docker network list
    NETWORK ID     NAME      DRIVER    SCOPE
    931d07b62ed8   bridge    bridge    local
    8a1b5913f0ab   host      host      local
    31291cf90202   none      null      local
    
    
    

    scope 范围:

    • local: 只会影响本物理机容器网络设置
    • golbal:跨多个物理机容器网络设置

    driver 类型:

    1. bridge: 桥接网络,用于与本物理机联通
    2. overlay: 不同机器上的容器相互通信,同时支持对消息进行加密,注意事项:
      • 如果想要连接到overlay网络,请确保连接前下列端口没有服务,并且服务器防火墙要允许下列端口通过:
        • TCP端口2377,用于集群管理信息的交流
        • TCP、UDP端口7946用于集群中节点的交流
        • UDP端口4789用于overlay网络中数据报的发送与接收
      • 无论是否需要使用集群服务,都需要使用docker swarm init初始化本地主机为swarm管理节点或是使用docker swarm join加入现有得swarm

    6.1.2 查看docker某个网络的详细配置

    命令:

    docker network inspect 网络名称

    示例:

    docker network inspect bridge

    
    [root@vms41 ~]# docker network inspect bridge ##查看docker的bridge的网络详细属性
    [
        {
            "Name": "bridge", #名称为bridge
            "Id": "931d07b62ed809f78fc6edfbc4fe67bdb08e14bb8379b2ae139fb383570879f1",
            "Created": "2021-05-03T22:12:49.690831517+08:00",
            "Scope": "local", ##范围是本物理机生效
            "Driver": "bridge", ##类型为桥接
            "EnableIPv6": false, ##是否容许IPV6,否
            "IPAM": {
                "Driver": "default",
                "Options": null,
                "Config": [
                    {
                        "Subnet": "172.17.0.0/16",  ##子网网段为172.17.0.0/16
                        "Gateway": "172.17.0.1" ## 网关为172.17.0.1
                    }
                ]
            },
            "Internal": false,
            "Attachable": false,
            "Ingress": false,
            "ConfigFrom": {
                "Network": ""
            },
            "ConfigOnly": false,
            "Containers": { ##该网段内的容器信息
                "011d27f5bea6fabdeb3a761d0e198b33d9eacb0e9ec780efb8a8c772ed2e4ceb": {
                    "Name": "db",
                    "EndpointID": "7339fd35dc490df82e9b05891876361bffc3d701b03602c8765136199bd31d09",
                    "MacAddress": "02:42:ac:11:00:03",
                    "IPv4Address": "172.17.0.3/16",
                    "IPv6Address": ""
                },
                "b0f75d5d639431361206c8024cb1881e3ded2d18e840734f8412e8297563316c": {
                    "Name": "web",
                    "EndpointID": "6ee4934f684ecf74cd7ba4511e78d51c236fff083a9e25b7d1f1bd5e62f6b913",
                    "MacAddress": "02:42:ac:11:00:02",
                    "IPv4Address": "172.17.0.2/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": {}
        }
    ]
    
    
    

    man -k docker --docker man手册

    6.2 创建一个docker网络

    命令:

    docker network create -d 类型[bridge|overlay|macvlan] --subnet= 网络名称

    示例:

    docker network create -d bridge --subnet=192.168.0.0/16 br0

    docker network create 命令选项说明

    OPTIONS INSTRUCTION
    --attachable[=false] Enable manual container attachment
    --aux-address=map[] Auxiliary IPv4 or IPv6 addresses used by Network driver
    --config-from="" The network from which to copy the configuration
    --config-only[=false] Create a configuration only network
    -d, --driver="bridge" Driver to manage the Network
    --gateway=[] IPv4 or IPv6 Gateway for the master subnet
    -h, --help[=false] help for create
    --ingress[=false] Create swarm routing-mesh network
    --internal[=false] Restrict external access to the network
    --ip-range=[] Allocate container ip from a sub-range
    --ipam-driver="default" IP Address Management Driver
    --ipam-opt=map[] Set IPAM driver specific options
    --ipv6[=false] Enable IPv6 networking
    --label= Set metadata on a network
    -o, --opt=map[] Set driver specific options
    --scope="" Control the network's scope
    --subnet=[] Subnet in CIDR format that represents a network segment
    
    [root@vms41 ~]# docker network create -d bridge --subnet=10.0.0.0/24 mynet #配置一个名为mynet子网为10.0.0.0/24的子网
    0796ec7b41853ae30fb85a7caa468193fa64322393a05c8faddfee25429d6c6d
    [root@vms41 ~]# docker network ls ##查看容器网络mynet确实已经存在
    NETWORK ID     NAME      DRIVER    SCOPE
    931d07b62ed8   bridge    bridge    local
    8a1b5913f0ab   host      host      local
    0796ec7b4185   mynet     bridge    local
    31291cf90202   none      null      local
    [root@vms41 ~]# docker run -dit --name=db1 --restart=always --network=mynet -p 3307:3306 -e MYSQL_ROOT_PASSWORD=haha001 -e MYSQL_DATABASE=xxx hub.c.163.com/library/mysql:latest
    55304526fb5b381d9f61d76ca3208705a39465a180b20eb5d2dd7c18080dc102
    ##启用容器db并使用mynet网络
    [root@vms41 ~]# docker exec -it db ip a ##查看容器连接的网络,确认分配的网络地址为10.0.0.2
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
        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
    219: eth0@if220: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
        link/ether 02:42:0a:00:00:02 brd ff:ff:ff:ff:ff:ff
        inet 10.0.0.2/24 brd 10.0.0.255 scope global eth0
           valid_lft forever preferred_lft forever
    
    

    docker容器使用host网络后,网络信息就会和物理机一样

    
    [root@vms41 ~]# docker run -dit --name=db1 --restart=always --network=host -p 3307:3306 -e MYSQL_ROOT_PASSWORD=haha001 -e MYSQL_DATABASE=xxx hub.c.163.com/library/mysql:latest
    WARNING: Published ports are discarded when using host network mode
    48b1a4d0cca0890dfbb434153727e029fa968bd7781c1da7e428de87f7cd3d3a
    ##使用network=host
    [root@vms41 ~]# 
    [root@vms41 ~]# 
    [root@vms41 ~]# docker exec -it db ip a ##发现网络配置与物理机一致
    Error: No such container: db
    [root@vms41 ~]# docker exec -it db1 ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
        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: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:2c:53:32 brd ff:ff:ff:ff:ff:ff
        inet 192.168.57.41/24 brd 192.168.57.255 scope global ens32
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fe2c:5332/64 scope link 
           valid_lft forever preferred_lft forever
    3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
        link/ether 02:42:fd:be:e8:39 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:fdff:febe:e839/64 scope link 
           valid_lft forever preferred_lft forever
    130: br-0796ec7b4185: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
        link/ether 02:42:cb:1f:53:e6 brd ff:ff:ff:ff:ff:ff
        inet 10.0.0.1/24 brd 10.0.0.255 scope global br-0796ec7b4185
           valid_lft forever preferred_lft forever
        inet6 fe80::42:cbff:fe1f:53e6/64 scope link 
           valid_lft forever preferred_lft forever
    
    
    

    6.3 设置容器连接、断开连接一个已经创建的网络

    [root@vms41 ~]# docker network connect mynet db #将容器db连接至已经创建的mynet网络
    [root@vms41 ~]# docker exec -it db ip a ##查看容器db的网络设置,发现已经增10.0.0.2的网址
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
        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
    227: eth0@if228: <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
        inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
           valid_lft forever preferred_lft forever
    231: eth1@if232: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
        link/ether 02:42:0a:00:00:02 brd ff:ff:ff:ff:ff:ff
        inet 10.0.0.2/24 brd 10.0.0.255 scope global eth1
    [root@vms41 ~]# docker network disconnect mynet db #将容器db断开连接至已经创建的mynet网络 
    [root@vms41 ~]# docker exec -it db ip a  ##查看容器db的网络设置,发现已经没有到10.0.0.0/24的连接
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
        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
    227: eth0@if228: <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
        inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
           valid_lft forever preferred_lft forever
    
    
    

    6.4 实验,创建一个wordpress博客

    wordpress容器 容器磁盘卷 /var/www/html挂载物理机/blog 发布端口
    mysql容器 容器磁盘卷 /var/lib/mysql 挂载物理机/db 不需要对外发布端口

    
    ##创建mysql容器
    [root@vms41 ~]# docker run -dit --name=db --restart=always -v /db:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=haha001 -e MYSQL_DATABASE=wordpress hub.c.163.com/library/mysql:latest
    be3f6fead92e247daf8d0a5304a06f383fa1b9eaafd808ecc7851e8b3a834743
    [root@vms41 ~]# docker ps 
    CONTAINER ID   IMAGE                                COMMAND                  CREATED         STATUS         PORTS      NAMES
    be3f6fead92e   hub.c.163.com/library/mysql:latest   "docker-entrypoint.s…"   6 seconds ago   Up 5 seconds   3306/tcp   db
    [root@vms41 ~]# ls /db/ ##查看物理机挂载目录下文件,发现workpress库已经创建好了
    auto.cnf    ca.pem           client-key.pem  ibdata1      ib_logfile1  mysql               private_key.pem  server-cert.pem  sys
    ca-key.pem  client-cert.pem  ib_buffer_pool  ib_logfile0  ibtmp1       performance_schema  public_key.pem   server-key.pem   wordpress
    [root@vms41 ~]# docker run -dit --name=blog --restart=always -v /blog:/var/www/html  #运行wordpress
    > -e WORDPRESS_DB_HOST=172.17.0.2 -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=haha001  #指定连接数据库172.12.0.2,账号,密码,库名称,映射容器80端口到本机80端口
    > -e WORDPRESS_DB_NAME=wordpress -p 80:80 hub.c.163.com/library/wordpress:latest
    715d84df85fbc598fda253f8f1c0ccd1e8203ae379c6ac5f9f0cbe890b537418
    
    docker run -dit --name=blog --restart=always -v /blog:/var/www/html -e WORDPRESS_DB_HOST=172.17.0.2 -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=haha001 -e WORDPRESS_DB_NAME=wordpress -p 80:80 hub.c.163.com/library/wordpress:latest
    
    

    浏览器打开192.168.57.41,wordpress已经正常运行

  • 相关阅读:
    hdu 1754 I Hate It(线段树水题)
    hdu 1166敌兵布阵(线段树入门题)
    多校1007 Naive Operations
    51NOD 1277 字符串中的最大值(KMP)
    括号匹配
    Visual Studio中定义OVERFLOW不能用
    数据结构第二章小节
    关键字new与malloc函数
    构造函数不能为虚/重载函数总结
    预处理之宏定义
  • 原文地址:https://www.cnblogs.com/yj411511/p/14749003.html
Copyright © 2011-2022 走看看