Docker----容器间通讯案例

本章主要解决两个问题
1, 同一主机下两个或者多个容器间相互访问且外网无法访问
2,不同主机下的两个或者多个容器间相互访问且外网无法访问
参考文章:
https://www.runoob.com/docker/docker-container-connection.html
https://www.cnblogs.com/mrhelloworld/p/docker11.html
https://blog.csdn.net/u013355826/article/details/84987233

先看docker的网络模式 docker network ls
bridge: 为每一个容器分配、设置 IP 等,并将容器连接到一个 docker0 虚拟网桥,默认为该模式。 容器重启后IP会变动
host: 容器将不会虚拟出自己的网卡,配置自己的 IP 等,而是使用宿主机的 IP 和端口。
none: 容器有独立的 Network namespace,但并没有对其进行任何网络设置,如分配 veth pair 和网桥连接,IP 等。
container: 新创建的容器不会创建自己的网卡和配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。
以上是docker网络模式

而docker 间的通讯主要有
1,通过容器ip访问,这个属于bridge模式
2,通过宿主机的ip:端口访问,暴露容器端口
3,通过link建立连接(官方不推荐使用)
4,通过 User-defined networks(推荐)

User-defined networks
创建网络 docker network create test-network
网络名称: test-network
启动容器的时候加入创建的网络

docker run 命令行为:   docker run -itd --name  alpine_1 --net test-network 7731472c3f2a

创建两个应用 docke1和docker2

docker1的代码:

    @GetMapping("/")
    public String getHotList(String name) {
    
    
        System.out.println("收到:  "+name);
       String result = HttpUtil.doGet("http://docker2:8002/docker2/?name="+name);
        return name+" -----> "+result ;
    }

docker1的yml配置

server:
  # 自定义端口号
  port: 8001
  servlet:
    context-path: /docker1

docker2的代码:

    @GetMapping("/")
    public String getHotList(String name) {
    
    
        System.out.println("收到:  "+name);
        return "docker2"+ name;
    }

docker2的yml配置

server:
  # 自定义端口号
  port: 8002
  servlet:
    context-path: /docker2

运行docker-compose
指定自定义网络
docker-compose.yml

version: "3.7" 
services:
    alpine_1:
        image: <镜像id>
        container_name: docker1
        tty: true
        ports: 
            - 8001:8001 
        networks:
            - test-network
           

    alpine_2:
        image: <镜像id>
        container_name: docker2      
        tty: true
        networks:
            - test-network

networks:
    test-network:
        driver: bridge  

使用默认网络:

version: "3.7" 
services:
    alpine_1:
        image: f88d9a6758a7         
        container_name: docker1
        tty: true
        ports: 
            - 8001:8001 
        #networks:
        #    - test-network
           

    alpine_2:
        image: d624057fd6a4      
        container_name: docker2      
        tty: true
        #networks:
         #   - test-network

networks:
    default:
        driver: bridge
        

使用已有网络:
提前要创建网络 docker network create test

version: "3.7" 
services:
    alpine_2:
        image: d624057fd6a4      
        container_name: docker2      
        tty: true

networks:
 default:
  external:
   name: test   
         

Guess you like

Origin blog.csdn.net/xy3233/article/details/115958061