1. 程式人生 > >docker-swarm建立本地整合開發環境

docker-swarm建立本地整合開發環境

在k8s出現之後,docker-swarm使用的人越來越少,但在本地整合開發環境的搭建上,使用它還是比較輕量級的,它比docker-compose最大的好處就是容器之間的共享和服務的治理,你不需要links容器,也不知道關心失敗之後的重啟,這些都於swarm來實現。

對於docker-compose和docker-swarm的分工

  1. docker-compose用來進行映象的編排,同時將多個相關映象構建
  2. docker-swarm用來啟動和管理容器,它不能構建映象

建立compose檔案,不支援build,links,depends_on

services:
  db:
    image: arungupta/couchbase:latest
    ports:
      - 8091:8091
      - 8092:8092
      - 8093:8093
      - 11210:11210

swarm初始化

docker swarm init

建立服務

docker stack deploy --compose-file=docker-compose-swarm.yml lind

檢視所有服務列表

docker stack ls

檢視指定服務

docker stack services lind

更新某個服務

docker service update lind_service1 //有時我們的lind_service1依賴於configserver,當後者沒有重啟動,前者會一直報錯,然後使用預設的配置,由於預設配置為localhost,所以就出現了連線失敗的情況

刪除服務

docker stack  rm lind

痛點

configserver是比較低層的服務,所有專案的配置都來自於這個服務,我們拿eureka配置為例,如果專案從配置中心拿不到它的配置,會使用預設的localhost:8761做為連線地址,這在某些不是localhost:8761的環境下,這簡直就成了災難。

配置中心使用本地倉庫

配置中心的配置檔案一般儲存在git遠端,而如果太依賴遠端也不是好事 ,你可以把倉庫下載到本地,然後掛載到容器目錄即可,但在進行操作時也有一些需要注意的點:

  1. 配置中心的目錄必須是git倉庫,預設是master分支
  2. 使用docker-comopse部署時,使用volumes把宿主目錄掛載到容器目錄,例如固定為config_repo,它可以在yml檔案裡提前宣告。
  • compose檔案
 configserver:
   image: swarm_configserver
   ports:
     - "6200:6200"
     - "6201:6201"
   environment:
     SPRING_PROFILES_ACTIVE: development
     PORT: 6200
     BG_PORT: 6201
     EUREKA_PORT: 6761
     MY_IP: 192.168.170.30
   volumes:
        - /Users/lind.zhang/github/config_repo:/config_repo
  • bootstramp.yml檔案
spring:
  profiles: development
  cloud:
    config:
      server:
        git:
          uri: /config_repo