Docker容器的跨节点通信

📅 2026/7/2 4:58:27
Docker容器的跨节点通信
安装ZooKeeper之前需要先安装Java的JDK环境。下面的步骤将部署一个单节点的ZooKeeper实例。1解压缩JDK的安装介质这里使用的版本是jdk-8u181-linux-x64.tar.gz。$ tar -zxvf jdk-8u181-linux-x64.tar.gz -C /root/2编辑文件“/root/.bash_profile”设置Java的环境变量。输入下面的内容JAVA_HOME/root/jdk1.8.0_181 export JAVA_HOME PATH$JAVA_HOME/bin:$PATH export PATH3生效Java的环境变量。$ source /root/.bash_profile4解压缩ZooKeeper的安装介质这里使用的版本是zookeeper-3.4.10.tar.gz。$ tar -zxvf zookeeper-3.4.10.tar.gz -C /root5进入ZooKeeper目录生成ZooKeeper的配置文件。$ cd zookeeper-3.4.10 $ cp conf/zoo_sample.cfg conf/zoo.cfg6启动ZooKeeper实例。$ bin/zkServer.sh start7查看ZooKeeper实例的状态如下图所示。这时ZooKeeper是standalone状态说明这是一个单节点的ZooKeeper实例。有了ZooKeeper注册中心的支持就可以进一步实现Docker容器的跨节点通信了。下表显示了部署的环境信息。具体的操作步骤如下1在master节点上修改文件“/usr/lib/systemd/system/docker.service”的内容将参数“ExecStart”改为下面的内容。ExecStart/usr/bin/dockerd-current \ --add-runtime docker-runc/usr/libexec/docker/docker-runc-current \ --default-runtimedocker-runc \ --exec-opt native.cgroupdriversystemd \ --userland-proxy-path/usr/libexec/docker/docker-proxy-current \ --init-path/usr/libexec/docker/docker-init-current \ --seccomp-profile/etc/docker/seccomp.json \ -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock \ --cluster-store zk://192.168.79.11:2181 \ --cluster-advertise 192.168.79.11:2375 \ $OPTIONS \ $DOCKER_STORAGE_OPTIONS \ $DOCKER_NETWORK_OPTIONS \ $ADD_REGISTRY \ $BLOCK_REGISTRY \ $INSECURE_REGISTRY \ $REGISTRIES # 其中增加的主要参数如下。 # --cluster-store指定ZooKeeper的地址和端口。 # --cluster-advertise将Docker注册到ZooKeeper中的地址信息。2重启master节点上的Docker服务。$ systemctl daemon-reload $ systemctl restart docker3在node1节点上修改文件“/usr/lib/systemd/system/docker.service”的内容将参数“ExecStart”改为下面的内容。ExecStart/usr/bin/dockerd-current \ --add-runtime docker-runc/usr/libexec/docker/docker-runc-current \ --default-runtimedocker-runc \ --exec-opt native.cgroupdriversystemd \ --userland-proxy-path/usr/libexec/docker/docker-proxy-current \ --init-path/usr/libexec/docker/docker-init-current \ --seccomp-profile/etc/docker/seccomp.json \ -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock \ --cluster-store zk://192.168.79.11:2181 \ --cluster-advertise 192.168.79.12:2375 \ $OPTIONS \ $DOCKER_STORAGE_OPTIONS \ $DOCKER_NETWORK_OPTIONS \ $ADD_REGISTRY \ $BLOCK_REGISTRY \ $INSECURE_REGISTRY \ $REGISTRIES4重启node1节点上的Docker服务。$ systemctl daemon-reload $ systemctl restart docker5进入ZooKeeper目录启动ZooKeeper命令行客户端。$ cd /root/zookeeper-3.4.10 $ bin/zkCli.sh6查看master和node1在ZooKeeper中的注册信息如下图所示。7在任意节点上创建overlay网络例如在master上执行下面的语句。$ docker network create -d overlay my_multi_hosts # 其中的参数-d 用于指定创建网络的类型这里指定的是overlay。 # 在node1节点上此时会自动同步新创建的网络my_multi_hosts。8在master或者node1上查看Docker的网络信息如下图所示。这时可以看到新创建的网络“my_multi_hosts”。9在master节点上使用my_multi_hosts的overlay网络启动一个容器并确定容器的IP地址如下图所示。从图中可以看成box1的IP地址是“10.0.0.2”。$ docker run -it --netmy_multi_hosts --name box1 busybox $ ifconfig eth010在node1节点上使用my_multi_hosts的overlay网络启动一个容器并确定容器的IP地址如下图所示。从图中可以看成box2的IP地址是“10.0.0.3”。$ docker run -it --netmy_multi_hosts --name box2 busybox $ ifconfig eth011现在box1和box2既可以通过虚拟IP地址进行通信也可以通过DNS Server进行通信如下图所示。12使用ZooKeeper的图形化工具ZooInspector登录ZooKeeper。这时就可以完整看到Overlay网络在ZooKeeper中的注册信息如下图所示。