所有分类
  • 所有分类
  • 未分类

Docker Compose网络系列–多个docker-compose进行网络连接

简介

说明

本文介绍如何实现多个docker-compose的通信。

需求场景

docker compose中,1个docker-compose.yml就是1个应用。默认情况下,单个docker-compose.yml中的services下的容器是可以进行网络连接的。

多个docker-compose.yml中的services下的容器是无法进行网络连接的,让多个应用进行网络连接的方法:指定一个中间网络,让这两个应用都连接到这个中间网络。

本文要达到的目的

2个docker compose:一个数据库和一个app(halo),它们要进行网络连接。

情景1:新建多个docker compose

概述

1. 建立中间网络

docker network create app_net

2. 每个docker-compose.yml连接到中间网络

一级配置都加上如下配置:

networks:
  external_net_1:
    name: app_net
    external: true

需要进行网络连接的services加上networks配置:

services:
  app:
    # image: 
    # container_name: 
    # ports:
    # volumes:
    # environment:
    networks:
      - external_net_1

纯docker可以这样做:docker xxx –net app_net  

备注

也可以使用默认网络,这样services里边就不需要指定了,如下:

​version: '3.1'

services:
  # ...

networks:
  default:
    name: my-net
    external: true
# 也可以这么写:
# networks:
#   default:
#     external:
#       name: my-net​

详述

1.创建中间网络

docker network create app_net

2.mysql的docker-compose.yml

version: '3.1'
services:
    mysql:
        # 启动方式
        #restart: unless-stopped
        
        # 镜像
        image: mysql:8.0
        # 容器名字
        container_name: mysql8
        privileged: true
        environment:
          # 时区
          TZ: Asia/Shanghai
          # root用户的密码
          MYSQL_ROOT_PASSWORD: 123456
        command:
          --character-set-server=utf8mb4
          --collation-server=utf8mb4_general_ci
          --explicit_defaults_for_timestamp=true
        ports:
          - 3306:3306
        volumes:
          - /work/db/mysql8/log:/var/log/mysql
          - /work/db/mysql8/data:/var/lib/mysql
          - /work/db/mysql8/conf:/etc/mysql/conf.d
        networks:
          - external_net_1

networks:
  external_net_1:
    name: app-net
    external: true

3.app的docker-compose.yml

version: '3.1'
services:
  halo:
    # 启动方式
    #restart: unless-stopped

    # 镜像
    image: halohub/halo:1.6.0
    # 容器名字
    container_name: halo1.6.0
    ports:
      - 8090:8090
    volumes:
      - /work/app/halo/config/:/root/.halo
    environment:
      - VIRTUAL_PORT=8090
      #- VIRTUAL_HOST=localhost  # 你的博客地址(务必修改)
      #- LETSENCRYPT_HOST=localhost # 你的博客地址 (务必修改)
      #- LETSENCRYPT_EMAIL=i@example.com # 证书所有者的邮箱,快过期时会提醒(务必修改)
      - MAX_UPLOAD_SIZE=10m
      - JVM_XMS=256m
      - JVM_XMX=256m
    networks:
      - external_net_1

networks:
  external_net_1:
    name: app-net
    external: true

app中直接将ip换成mysql的容器名字,例如:

spring:
  datasource:
    # MySQL database configuration.
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://mysql8:3306/dbName?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
    username: user1
    password: 123456

情景2:1个docker compose容器已存在

本处假设mysql8这个容器已经存在了。

概述

1. 建立中间网络

docker network create app_net

2.将mysql8连接到中间网络

docker network connect app_net mysql8

3. app的docker-compose.yml连接到中间网络

一级配置都加上如下配置:

networks:
  external_net_1:
    name: app_net
    external: true

需要进行网络连接的services加上networks配置:

services:
  app:
    # image: 
    # container_name: 
    # ports:
    # volumes:
    # environment:
    networks:
      - external_net_1

纯docker可以这样做:docker xxx –net app_net 

备注

也可以使用默认网络,这样services里边就不需要指定了,如下:

​version: '3.1'

services:
  # ...

networks:
  default:
    name: my-net
    external: true
# 也可以这么写:
# networks:
#   default:
#     external:
#       name: my-net​

详述

 1.创建中间网络

docker network create app_net

2. 将mysql8连接到中间网络

docker network connect app_net mysql8

3.app的docker-compose.yml

version: '3.1'
services:
  halo:
    # 启动方式
    #restart: unless-stopped

    # 镜像
    image: halohub/halo:1.6.0
    # 容器名字
    container_name: halo1.6.0
    ports:
      - 8090:8090
    volumes:
      - /work/app/halo/config/:/root/.halo
    environment:
      - VIRTUAL_PORT=8090
      #- VIRTUAL_HOST=localhost  # 你的博客地址(务必修改)
      #- LETSENCRYPT_HOST=localhost # 你的博客地址 (务必修改)
      #- LETSENCRYPT_EMAIL=i@example.com # 证书所有者的邮箱,快过期时会提醒(务必修改)
      - MAX_UPLOAD_SIZE=10m
      - JVM_XMS=256m
      - JVM_XMX=256m
    networks:
      - external_net_1

networks:
  external_net_1:
    name: app-net
    external: true

 app中直接将ip换成mysql的容器名字,例如:

spring:
  datasource:
    # MySQL database configuration.
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://mysql8:3306/dbName?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
    username: user1
    password: 123456
0

评论0

请先

显示验证码
没有账号?注册  忘记密码?

社交账号快速登录