日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

物联网架构成长之路(24)-Docker练习之Compose容器编排

發布時間:2023/12/1 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 物联网架构成长之路(24)-Docker练习之Compose容器编排 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

0.前言
  一開始學的之后,是想一步到位直接上Kubernetes(K8s)的,后面沒想到,好像有點復雜,有些概念不是很懂。因此學習東西還是要循序漸進,慢慢來。先了解單機編排技術Docker Compose,了解一些技術細節及原理后,在入手K8s。還是不能一口吃成胖子,要多吃幾口才可以。而且目前公司都是一些小項目,能用得上DockerCompose已經很不錯了,還想要上K8s,估計是不現實的。

?

1. 安裝

  可以通過運行下面命令進行安裝,

1 curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` -o docker-compose 2 chmod +x docker-compose 3 mv docker-compose /usr/local/bin

  安裝Tab自動補全

curl -L https://raw.githubusercontent.com/docker/compose/1.23.1/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose

  由于我看得是《Spring Cloud與Docker微服務架構實戰 第二版》這本書,里面剛好有個例子,這里就用這個做練手。

1 git clone https://github.com/itmuch/spring-cloud-docker-microservice-book-code-docker/ 2 cd spring-cloud-docker-microservice-book-code-docker 3 cd docker-1-simple 4 mvn clean package docker:build

  里面的每個微服務都構建成一個Docker Image,然后就可以開干了。

?

2. 簡單例子

  從一個簡單的例子開始
  Dockerfile 文件

1 FROM java:latest 2 VOLUME /tmp 3 ADD microservice-discovery-eureka-0.0.1-SNAPSHOT.jar app.jar 4 RUN bash -c 'touch /app.jar' 5 EXPOSE 9000 6 ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"]

  docker-compose.yml 文件

1 version: '3' 2 services: 3 eureka: 4 build: . 5 ports: 6 - "8761:8761"

  執行 docker-compose up

  從下圖可以看出,docker-compose 執行后,分別創建了 compose_eureka Image, compose_default Network, compose_eureka_1_b5 Container

  以上就是入門了,關于docker-compose更多的語法,這里就不展開了,具體肯定是參考其他博客,或者官方文檔吧

?

3. 實戰練習

  參考書本上的例子進行練習

  3.1 基于Spring Boot微服務的Compose編寫

  這里要使用上述 github 代碼里 docker-1-simple 這個目錄下的代碼進行編譯

1 version: '3' 2 services: 3 discovery: 4 image: registry.cn-shenzhen.aliyuncs.com/wunaozai/microservice-discovery-eureka:0.0.1-SNAPSHOT 5 ports: 6 - "8761:8761" 7 microservice-provider-user: 8 image: registry.cn-shenzhen.aliyuncs.com/wunaozai/microservice-provider-user:0.0.1-SNAPSHOT 9 microservice-consumer-movie-ribbon-hystrix: 10 image: registry.cn-shenzhen.aliyuncs.com/wunaozai/microservice-consumer-movie-ribbon-hystrix:0.0.1-SNAPSHOT 11 microservice-gateway-zuul: 12 image: registry.cn-shenzhen.aliyuncs.com/wunaozai/microservice-gateway-zuul:0.0.1-SNAPSHOT 13 microservice-hystrix-dashboard: 14 image: registry.cn-shenzhen.aliyuncs.com/wunaozai/microservice-hystrix-dashboard:0.0.1-SNAPSHOT 15 ports: 16 - "8030:8030" 17 microservice-hystrix-turbine: 18 image: registry.cn-shenzhen.aliyuncs.com/wunaozai/microservice-hystrix-turbine:0.0.1-SNAPSHOT

  運行后,就啟動對應的6個Image,以下是運行后效果

  使用之前的weave scope工具查看docker, 可以看到5個微服務通過Spring Boot的Eureka連接在一起了。還有一個microservice-hystrix-dashboard這個沒有在里面是因為這個是一個儀表盤(Dashboard),不屬于實際業務,所以代碼里面沒有關聯起來,實際上是已啟動的。
  從圖中還可以看到,后面的那兩個集群etcd和elasticsearch,這兩個是之前做練習時創建的。初學者,利用這個weave scope工具來查看和監控,挺好用的。

  3.2 基于Eureka高可用(HA)的Compose編寫

  這里要使用上述 github 代碼里 docker-2-eureka-ha 這個目錄下的代碼進行編譯

1 version: "3" 2 services: 3 peer1: # 默認情況下,其他服務可使用服務名稱連接到該服務。對于peer2節點,它需連接http://peer1:8761/eureka/,因此,我們可配置該服務的名稱為peer1。 4 image: registry.cn-shenzhen.aliyuncs.com/wunaozai/microservice-discovery-eureka-ha:0.0.1-SNAPSHOT 5 ports: 6 - "8761:8761" 7 environment: 8 - spring.profiles.active=peer1 9 peer2: 10 image: registry.cn-shenzhen.aliyuncs.com/wunaozai/microservice-discovery-eureka-ha:0.0.1-SNAPSHOT 11 hostname: peer2 12 ports: 13 - "8762:8762" 14 environment: 15 - spring.profiles.active=peer2 16 17 ## 使用Compose編排高可用的Eureka Server

  通過Eureka自帶的Dashboard可以看到啟動的兩個容器已經互相注冊,實現高可用(HA)功能

  3.3 基于Spring Boot微服務集群及動態伸縮的Compose編寫

  這里要使用上述 github 代碼里 docker-3-complex 這個目錄下的代碼進行編譯,要在每個項目的根目錄下,執行 mvn clean package docker:build

1 version: "3" 2 services: 3 peer1: 4 image: itmuch/microservice-discovery-eureka-ha:0.0.1-SNAPSHOT 5 ports: 6 - "8761:8761" 7 environment: 8 - spring.profiles.active=peer1 9 peer2: 10 image: itmuch/microservice-discovery-eureka-ha:0.0.1-SNAPSHOT 11 hostname: peer2 12 ports: 13 - "8762:8762" 14 environment: 15 - spring.profiles.active=peer2 16 microservice-provider-user: 17 image: itmuch/microservice-provider-user:0.0.1-SNAPSHOT 18 microservice-consumer-movie-ribbon-hystrix: 19 image: itmuch/microservice-consumer-movie-ribbon-hystrix:0.0.1-SNAPSHOT 20 microservice-gateway-zuul: 21 image: itmuch/microservice-gateway-zuul:0.0.1-SNAPSHOT 22 microservice-hystrix-turbine: 23 image: itmuch/microservice-hystrix-turbine:0.0.1-SNAPSHOT

  通過Eureka的Dashboard查看

  仔細查看下圖,可以觀察到各個Container間箭頭的指向,用于理解Spring Boot各個微服務間關系

  執行以下命令,為各個微服務動態擴容。讓各個微服務都執行3個實例,由于docker-compose版本問題,建議使用 --scale 參數來設置啟動實例。

1 docker-compose up --scale microservice-provider-user=3 \ 2 --scale microservice-consumer-movie-ribbon-hystrix=3 \ 3 --scale microservice-gateway-zuul=3 \ 4 --scale microservice-hystrix-turbine=3

  Eureka的Dashboard查看

?


  3.4 修改之前博客中的etcd集群配置,改為docker-compose方式啟動(自己實踐)

1 version: "3" 2 services: 3 etcd01: 4 image: etcd:3.3 5 ports: 6 - "10001:2379" 7 - "10011:2380" 8 #volumes: 9 #- "/root/workspace/docker/k8s/etcd/data11:/data" 10 command: 11 - /bin/etcd 12 - --data-dir 13 - /data 14 - -name 15 - etcd01 16 - -advertise-client-urls 17 - http://etcd01:2379 18 - -listen-client-urls 19 - http://0.0.0.0:2379 20 - -initial-advertise-peer-urls 21 - http://etcd01:2380 22 - -listen-peer-urls 23 - http://0.0.0.0:2380 24 - -initial-cluster-state 25 - new 26 - -initial-cluster-token 27 - docker-etcd 28 - -initial-cluster 29 - etcd01=http://etcd01:2380,etcd02=http://etcd02:2380,etcd03=http://etcd03:2380 30 etcd02: 31 image: etcd:3.3 32 ports: 33 - "10002:2379" 34 - "10012:2380" 35 #volumes: 36 #- "/root/workspace/docker/k8s/etcd/data22:/data" 37 command: 38 - /bin/etcd 39 - --data-dir 40 - /data 41 - -name 42 - etcd02 43 - -advertise-client-urls 44 - http://etcd02:2379 45 - -listen-client-urls 46 - http://0.0.0.0:2379 47 - -initial-advertise-peer-urls 48 - http://etcd02:2380 49 - -listen-peer-urls 50 - http://0.0.0.0:2380 51 - -initial-cluster-state 52 - new 53 - -initial-cluster-token 54 - docker-etcd 55 - -initial-cluster 56 - etcd01=http://etcd01:2380,etcd02=http://etcd02:2380,etcd03=http://etcd03:2380 57 etcd03: 58 image: etcd:3.3 59 ports: 60 - "10003:2379" 61 - "10013:2380" 62 #volumes: 63 #- "/root/workspace/docker/k8s/etcd/data33:/data" 64 command: 65 - /bin/etcd 66 - --data-dir 67 - /data 68 - -name 69 - etcd03 70 - -advertise-client-urls 71 - http://etcd03:2379 72 - -listen-client-urls 73 - http://0.0.0.0:2379 74 - -initial-advertise-peer-urls 75 - http://etcd03:2380 76 - -listen-peer-urls 77 - http://0.0.0.0:2380 78 - -initial-cluster-state 79 - new 80 - -initial-cluster-token 81 - docker-etcd 82 - -initial-cluster 83 - etcd01=http://etcd01:2380,etcd02=http://etcd02:2380,etcd03=http://etcd03:2380 View Code

  測試,實際效果是,對3個節點的增刪改查操作都是等效的

curl http://127.0.0.1:10001/v2/keys/hello -XPUT -d value="hello world"

?

4. 小結

  這幾天的練習與了解,算是對Docker及Docker Compose有了一定的了解,接下來,就以實際項目中需要用到的服務構建成一個個Docker Image并推送到阿里云容器私有倉庫上。初期會構建的有STUN服務、Nginx-RTMP服務、EMQ-MQTT服務、Redis與MongoDB服務,暫時會先構建這幾個服務。服務間還涉及到認證與鑒權的,還會寫代碼,業務代碼應該還是用Spring Cloud全家桶,以練促學,未來之路,任重而道遠呀!加油!

?

本文地址:?https://www.cnblogs.com/wunaozai/p/9936306.html

轉載于:https://www.cnblogs.com/wunaozai/p/9936306.html

總結

以上是生活随笔為你收集整理的物联网架构成长之路(24)-Docker练习之Compose容器编排的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。