java高级开发docker

Docker-compose之外部容器连接

2018-11-16  本文已影响183人  老鼠AI大米_Java全栈

docker-compose为我们带来了很多便利,可以批量安装大量的服务,针对大而复杂的系统可以一键部署,真的很方便,但大多数情况下都是一个单独的文件中配置所有的服务,有时需要分开配置,就需要网络配置了。

Docker-Conpose为应用创建一个网络,Docker-Compose为每个Service创建一个容器,并加入到这个网络中,被网络中的其它容器访问和发现。此容器能够以容器名称作为hostname标识,被其它容器访问。

在不使用Docker Compose的时候,将两个容器链接起来使用 --link 参数,相对来说比较简单,以 nginx 镜像为例子:

docker run --rm --name test1 -d nginx  #开启实例test1
docker run --rm --name test2 --link test1 -d nginx #开启实例test2并与test1建立链接 

这样 test2 与 test1 便建立了链接,就可以在 test2 中使用访问 test1 中的服务了,在docker-compose更简单。

示例docker-compose创建资源
docker-compose.yml

version: '2'

services:
  web:
    build: .
    ports:
      - "8000:8000"
  db:
    image: postgres

在myapp目录使用命令docker-compose up,将执行以下几步:

更新容器
使用docker-compose up将停止并移除旧容器,重建新容器。
任何连接到旧容器的(其它容器的)连接将关闭,然后检测条件,根据容器名称查找并重建连接。

Links
默认情况下,Docker-Compose下的Servcie之间是可通过服务名称(容器名称,也即hostname)相互访问的。
links只不过为Service提供了以别名访问其它Service的一种方式。

容器连接external_links
我们以Docker-compose一键部署zk集群+dubbo-admin为例,将其拆开部署,如下:
zk.yml

version: '3'

services:
  zoo1:
    image: zookeeper:3.4  #zk镜像版本
    container_name: zoo1 
    restart: always
    hostname: zoo1 #容器名
    ports:
      - "2181:2181"  #将左端口绑定到右端口上
    environment:     #配置zk集群环境变量
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

  zoo2:
    image: zookeeper:3.4
    container_name: zoo2
    restart: always
    hostname: zoo2
    ports:
      - "2182:2181"
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

  zoo3:
    image: zookeeper:3.4
    container_name: zoo3
    restart: always
    hostname: zoo3
    ports:
      - "2183:2181"
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

启动zk容器docker-compose -f zk.yml up -d

tomcat.yml

version: '3'

services:
  dubbo-admin:
    image: dubbo-admin:1.0
    container_name: dubbo-admin
    external_links:
      - zoo1:zk  #外部容器连接
    #links:
    #  - zoo1:zk  #配置容器link名,可理解为别名
    #depends_on:
    #  - zoo1
    #  - zoo2
    #  - zoo3
    ports:
      - 7001:7001 #主机端口:容器端口
    restart: always

启动tomcat容器docker-compose -f tomcat.yml up -d
注意,tomcat容器依赖于zk容器,所以要先启动zk容器。

接着我们使用ping来测试下连通性:

[root@localhost network]# docker exec -it dubbo-admin ping zoo1
PING zoo1 (192.168.96.3): 56 data bytes
64 bytes from 192.168.96.3: icmp_seq=0 ttl=64 time=0.128 ms
64 bytes from 192.168.96.3: icmp_seq=1 ttl=64 time=0.113 ms
64 bytes from 192.168.96.3: icmp_seq=5 ttl=64 time=0.112 ms
^C--- zoo1 ping statistics ---
[root@localhost network]# docker exec -it zoo1 ping dubbo-admin
PING dubbo-admin (192.168.96.5): 56 data bytes
64 bytes from 192.168.96.5: seq=0 ttl=64 time=0.127 ms
64 bytes from 192.168.96.5: seq=1 ttl=64 time=0.132 ms
64 bytes from 192.168.96.5: seq=2 ttl=64 time=0.135 ms

从上面得知,两个容器都能ping通。
学习交流群:64691032

上一篇下一篇

猜你喜欢

热点阅读