本文已参与「新人创作礼」活动,一起开启掘金创作之路。
创建通信网络
由于要涉及到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