docker swarm部署spring cloud服務

1、準備docker swarm的集羣環境html

ip 是否主節點  
192.168.91.13  
192.168.91.43  

2、準備微服務java

①eureka服務 application.yml配置mysql

server:
  port: 8761

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://localhost:8761/eureka
  instance:
    hostname: localhost

java代碼略...nginx

②microserviceone服務 application.yml配置spring

spring:
  application:
    name: serviceone
  resources:
    static-locations: file:/home/front
  profiles:
    active: pro

server:
  port: 8080

ribbon:
  eureka:
    enabled: true

---
spring:
  profiles: dev
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka
    fetch-registry: true
  instance:
    prefer-ip-address: true


---
# docker 環境下使用此配置
spring: profiles: pro cloud: inetutils: preferred-networks: 10.0.0 #正則匹配10.0.0開頭的網卡ip eureka: client: service-url: defaultZone: http://discovery:8761/eureka fetch-registry: true instance: prefer-ip-address: true

java代碼略...sql

③microservicetwo服務 application.yml配置docker

server:
  port: 8081

spring:
  application:
    name: servicetwo
  profiles:
    active: pro

ribbon:
  eureka:
    enabled: true


---
spring:
  profiles: dev
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka
    fetch-registry: true
  instance:
    prefer-ip-address: true


---
# docker 環境下使用此配置
spring:
  profiles: pro
  cloud:
    inetutils:
      preferred-networks: 10.0.0 #正則匹配10.0.0開頭的網卡ip
eureka:
  client:
    service-url:
      defaultZone: http://discovery:8761/eureka
    fetch-registry: true
  instance:
    prefer-ip-address: true

java代碼略...json

重點配置:網絡

  preferred-networks: 指定向eureka註冊時使用的網卡地址(須要可以被其餘微服務訪問的ip,微服務間不能訪問極可能是註冊的網卡ip不對app

  defaultZone: 使用服務的方式指定eureka地址,這裏的discovery服務是在deploy.yml配置文件中指定的服務名

  prefer-ip-address: eureka上使用ip地址註冊

應用間關係:

  microserviceone、microservicetwo微服務向discovery服務進行註冊

  microserviceone經過feign調用microservicetwo的接口

// Feign接口
@FeignClient("servicetwo")
public interface DemoFeignService {

    @RequestMapping(method= RequestMethod.GET,value = "/userlist")
    @ResponseBody List getUserList();
}

---------------------------------------分割線----------------------------------------

//microserviceone中的controller方法
@Autowired
    private DemoFeignService demoFeignService;

    @RequestMapping(method = RequestMethod.GET,value = "invocation")
    public String testInvoke(){
        List list = demoFeignService.getUserList();
        String result = JSONObject.toJSONString(list);
        return "SUCCESS: " + result;
    }

 3、編寫docker-compose配置文件

deploy.yml

version: "3"
services:
  discovery:      # 其餘微服務能夠經過服務名訪問此服務,如服務註冊http://discovery:8761/eureka
    image: registry.cn-hangzhou.aliyuncs.com/study1990/discovery:1.0
    deploy:
      replicas: 1   #定義 replicated 模式的服務的複本數量
      update_config:
        parallelism: 1    #每次更新複本數量
        delay: 2s       #每次更新間隔
      restart_policy:
        condition: on-failure     #定義服務的重啓條件
    networks:
      - eureka-net
    ports:
      - "8761:8761"
    # environment:
      # - spring.profiles.active=peer1
  serviceone: # 微服務1
    image: registry.cn-hangzhou.aliyuncs.com/study1990/simple-microserviceone:1.0
    deploy:
      replicas: 1   #定義 replicated 模式的服務的複本數量
      update_config:
        parallelism: 1    #每次更新複本數量
        delay: 2s       #每次更新間隔
      restart_policy:
        condition: on-failure     #定義服務的重啓條件
    networks:
      - eureka-net
    ports:
      - "8080:8080"
    environment:
      - spring.profiles.active=pro
    depends_on:
      - discovery #依賴服務
  servicetwo:
    image: registry.cn-hangzhou.aliyuncs.com/study1990/simple-microservicetwo:1.0
    deploy:
      replicas: 1   #定義 replicated 模式的服務的複本數量
      update_config:
        parallelism: 1    #每次更新複本數量
        delay: 2s       #每次更新間隔
      restart_policy:
        condition: on-failure     #定義服務的重啓條件
    networks:
      - eureka-net
    ports:
      - "8081:8081"
    environment:
      - spring.profiles.active=pro
    depends_on:
      - discovery
networks:
  eureka-net:            # 建立網絡
    driver: overlay

 

4、部署

  一、在docker swarm主節點上執行 docker stack deploy -c deploy.yml microservice 建立名爲microservice的stack服務

  二、docker stack ps microservice查看docker服務狀況

  

  三、其餘相關命令

      docker stack rm microservice  刪除名爲microservice的stack服務

      docker service ls 查看服務列表

 

5、經常使用中間件的容器部署

mysql

version: "3"
services:
  mysql:
    image: mysql:5.7
    deploy:
      replicas: 1
      update_config:
        parallelism: 1    #每次更新複本數量
        delay: 2s       #每次更新間隔
      restart_policy:
        condition: on-failure     #定義服務的重啓條件
    networks:
      - eureka-net
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: "111111"
    volumes:
      - "/root/docker/app/mysql/config:/etc/mysql/conf.d"       #配置文件位置 my.cnf
      - "/root/docker/app/mysql/data:/var/lib/mysql"  #數據文件位置

networks:
  eureka-net:            # 建立網絡
    driver: overlay

  

nginx

version: "3"
services:
  nginx:
    image: nginx:1.12
    deploy:
      replicas: 1
      update_config:
        parallelism: 1    #每次更新複本數量
        delay: 2s       #每次更新間隔
      restart_policy:
        condition: on-failure     #定義服務的重啓條件
    networks:
      - eureka-net
    ports:
      - "80:80"
    volumes:
     - "/root/docker/app/nginx/html:/usr/share/nginx/html"  #掛載宿主機的html目錄覆蓋容器的html目錄
     - "/root/docker/app/nginx/config/nginx.conf:/etc/nginx/nginx.conf" #掛載宿主機的nginx.conf覆蓋容器中的nginx.conf
     - "/root/docker/app/nginx/logs:/var/log/nginx" 

networks:
  eureka-net:            # 建立網絡
    driver: overlay

  

其餘

一、查看docker swarm錯誤日誌

docker service ps --no-trunc {service_name}

二、鏡像下載加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://1rght005.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
相關文章
相關標籤/搜索