Docker 通信网络相关操作

242 阅读6分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

创建通信网络

由于要涉及到zookeeper和kafka之间的通信,运用docker内部容器通信机制先新建一个网络。

[root@sz-ben-dev-01 ~]# docker network create kafka_zookeeper   (新建网络)
dcb683a23044e902b251e01f493c814f940bd5bb592025c9eb4b78902f45091f
[root@sz-ben-dev-01 ~]# docker network ls                 (查看网络)
NETWORK ID          NAME                DRIVER              SCOPE
50218292be46        bridge              bridge              local
8dc74fc4e063        host                host                local
80a2879ab000        kafak_zookeeper     bridge              local
10fb11e15eae        none                null                local
[root@sz-ben-dev-01 ~]# docker network inspect kafka_zookeeper   (查看网络详细信息)
[
    {
        "Name": "kafka_zookeeper",
        "Id": "dcb683a23044e902b251e01f493c814f940bd5bb592025c9eb4b78902f45091f",
        "Created": "2019-11-07T11:30:01.007966557+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.20.0.0/16",
                    "Gateway": "172.20.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Containers": {},    (连接的容器为空)
        "Options": {},
        "Labels": {}
    }
]

[root@ZH02-TSER-78 config]# docker network inspect kafka_zookeeper (基于网络启动容器后)
[
    {
        "Name": "kafka_zookeeper",
        "Id": "415ddaac51ce40e24b35a214e92160e373699d631659859a8ea81707874e0235",
        "Created": "2020-05-28T12:14:06.569223604+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.20.0.0/16",
                    "Gateway": "172.20.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "58c9ecc808d8c1ad308d2b56d69c950884b5a7de30f29c6757fc1adedad2ed08": {
                "Name": "zookeeper",
                "EndpointID": "7f8fc76bb6972ee0c86dfc190d26780e2621fde356f12e7800b1032766277a8c",
                "MacAddress": "02:42:ac:14:00:02",
                "IPv4Address": "172.20.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

构建指定IP的通信网络

构建一个 IP 在 172.20.0.0/16 范围内,网关为 172.20.0.1的网络

root@sz-ben-dev-01 ~]# docker network create --subnet 172.20.0.0/16 --gateway 172.20.0.1 kafka_zookeeper
dcb683a23044e902b251e01f493c814f940bd5bb592025c9eb4b78902f45091f
[root@sz-ben-dev-01 ~]# docker network ls                 (查看网络)
NETWORK ID          NAME                DRIVER              SCOPE
50218292be46        bridge              bridge              local
8dc74fc4e063        host                host                local
80a2879ab000        kafak_zookeeper     bridge              local
10fb11e15eae        none                null                local

查看得知构建的网路正好在设计的IP范围内

[root@sz-ben-dev-01 ~]# docker network inspect kafka_zookeeper
[
    {
        "Name": "kafka_zookeeper",
        "Id": "76ec10158736f088a848cea2fa32d1bd1d93611ee895569b91a6eddc4e469da5",
        "Created": "2020-06-09T15:06:40.100082412+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.20.0.0/16",
                    "Gateway": "172.20.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "046148d68b0215fc1a4fac60394e1b01fabd15e896cdd8e8fb1ce85713d05c9e": {
                "Name": "kafka-manager",
                "EndpointID": "1a7fc9d6005a36dcd329bfbea2f9bfa4b9feb9fa2de2799a3f910c17e839719d",
                "MacAddress": "00:ff:0a:4e:5e:fb",
                "IPv4Address": "172.20.0.7/16",
                "IPv6Address": ""
            },
            "0652a8f4be65d2e12952ada5315b394541d84e17a468f08b664773201018f6b1": {
                "Name": "redis",
                "EndpointID": "59890b85b0a52679b342d3b9603def262338953b1c9430202a962560117f9142",
                "MacAddress": "02:42:ac:14:00:03",
                "IPv4Address": "172.20.0.3/16",
                "IPv6Address": ""
            },
            "12be9e18abb05bbbd56b7b0cdf5ded90f04cf1f3ef506021a45577520c60c78a": {
                "Name": "zookeeper",
                "EndpointID": "f961f3da343ff1b86a7c057cb2bd22552b77547529cc90800ff2223800a111c5",
                "MacAddress": "00:ff:0a:4e:5e:fc",
                "IPv4Address": "172.20.0.5/16",
                "IPv6Address": ""
            },
            "1507abf2c0ff4cfe57ef72b3ff931847d59b2e7b571f79da7834027e604b7c1b": {
                "Name": "nginx",
                "EndpointID": "938caf2a6698611d72a7d554d244b35038b19e71a527314aa5e52653cf952a2f",
                "MacAddress": "02:42:ac:14:00:0a",
                "IPv4Address": "172.20.0.10/16",
                "IPv6Address": ""
            },
            "311d6767d48a6936ad678f458357ae2e59723110937f74180d6c68e1da74698c": {
                "Name": "elasticsearch",
                "EndpointID": "16e9e6b10f75a928d87567bcac764912d134cb07aa1579787b13282e098eada1",
                "MacAddress": "02:42:ac:14:00:02",
                "IPv4Address": "172.20.0.2/16",
                "IPv6Address": ""
            },
            "73232f93202e715350510c7aa0b1499c9167c4e71b58ce82018ce22763d46a57": {
                "Name": "kafka",
                "EndpointID": "a8605711f6cad1b3c50c39589f332f175cdab63d7fbc3021f8c64b19277cac77",
                "MacAddress": "00:ff:0a:4e:5e:fa",
                "IPv4Address": "172.20.0.6/16",
                "IPv6Address": ""
            },
            "80b956d1dc3c0dd1219bd9447099b3e71398bfdcaa0528ee0056152842102af3": {
                "Name": "mysql",
                "EndpointID": "0b9bec53e7392c577b25a6e557726959f1bc005031daab456b5104b119630c6a",
                "MacAddress": "02:42:ac:14:00:04",
                "IPv4Address": "172.20.0.4/16",
                "IPv6Address": ""
            },
            "de5fcc2a3b1ccdb776908b8f009e632e01adb2b10ddaeea69c73f72f0b90b38e": {
                "Name": "influxdb",
                "EndpointID": "0886ae8af19b3bcd38e0446f522d73dae50e59e90943b30dc156f936b1468075",
                "MacAddress": "02:42:ac:14:00:09",
                "IPv4Address": "172.20.0.9/16",
                "IPv6Address": ""
            },
            "e140208563d42e6bfd9fdf7e60ae79f346f5134001548db55567a372098ccba5": {
                "Name": "emqx",
                "EndpointID": "2581f5740ee88a0ce91d52046bd2dfa19a726535b0c6b260885fdead6000a8ba",
                "MacAddress": "02:42:ac:14:00:08",
                "IPv4Address": "172.20.0.8/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

基于docker-compose设置固定IP

具体用法如下

version: '3'
services:
  eureka:
    image: necp.mapp.eureka.boot:${EUREKATAG}
    container_name: eureka
    build:
      context: ../server/eureka
      dockerfile: Dockerfile
      args:
        SERVICE: eureka
        TAG: ${EUREKATAG}
    ports:
      - "8761:8761"
    networks:
      kafka_zookeeper:
        ipv4_address: 172.20.0.11
    mac_address: 00:FF:0A:4E:5E:FD
    volumes:
        - /data/iot-server/conf/eureka:/conf
        - /data/iot-server/logs/eureka:/logs
    restart: on-failure
    environment:
        - CONFIGFILE=/conf/eureka.properties
        - PROFILE=${PROFILE}
        - JAVA_OPTS=${JAVA_OPTS}
  tms:
    image: iot.mapp.tms.boot:${TMSTAG}
    container_name: tms
    build:
      context: ../server/tms
      dockerfile: Dockerfile
      args:
        SERVICE: tms
        TAG: ${TMSTAG}
    ports:
      - "19998:19998"
    networks:
      kafka_zookeeper: # 设定当前服务所在网络
        ipv4_address: 172.20.0.14 # 设定当前服务在网络中的IP
    mac_address: 00:FF:0A:4E:5E:FE
    volumes:
      - /data/iot-server/conf/tms:/conf
      - /data/iot-server/logs/tms:/logs
    restart: always
    environment:
      - CONFIGFILE=/conf/application.properties
      - PROFILE=${PROFILE}
      - JAVA_OPTS=${JAVA_OPTS}
    depends_on:
      - "eureka"
    command: ./wait-for-it.sh 172.20.0.11:8761 -t 30 -- java ${JAVA_OPTS} -Dspring.config.location=/conf/application.properties -Dspring.cloud.config.profile=${PROFILE} -jar /app.jar
# 设定当前整个docker-compose中所在服务所在网络
networks:
  kafka_zookeeper:
    external: true