使用docker-compose來部署開發環境
docker-compose的作用
docker-comopse可以幫助我們快速搭建起開發環境,比如你可以去把redis,mongodb,rabbitmq,mysql,eureka,configserver等一次部署在本機,然後讓它們做為其它專案的基礎,這是可以實現的。
容器之間的通訊-links
由於每個docker例項都是一個封閉的環境,所以預設情況下它們是不能共享的,即你的rabbit容器不能連線你的redis容器,你的configserver不能連線你的eureka容器,如果希望讓它們之間進行資料通訊,需要設定links
屬性來實現,而在本機(宿主機)上進行連線時,使用localhost和埠是可以訪問這些容器的,這個我們要清楚。
啟動順序-depends_on
而對於啟動順序來說,比如你的configserver依賴於eureka,希望先啟動被依賴的容器,再執行自己,這時我們可以使用depends_on屬性來實現,當然它也只是啟動順序,不能保證服務真的越來後再去啟動另一個,解決的方法是使用失敗重試
機制restart: on-failure
,當configserver失敗後,你可以重啟,直到成功為止(主是直到eureka啟動越來為止)。
容器與容器之間要用服務名通訊
如果我們的具體專案也希望部署到docker-compose裡,希望去訪問其它的服務,這時,需要使用docker-compose裡定義的服務名稱,而不是localhost,因為當你的容器起來之後,它的localhost是自己的容器,而不是宿主機,反之在宿主機上,如果希望訪問容器,可以使用localhost
,這一點在前文中已經提到。
下面是我寫的一個部署開發環境的例子
version: "3.3" services: # 公用元件相關配置 mongodb: image: mongo:3.4.10 ports: - "27017:27017" networks: - dev volumes: - mongo_data:/data/db redis: image: redis:3.2-alpine networks: - dev ports: - "6379:6379" volumes: - redis_data:/data rabbit: image: rabbitmq:3.6.10-management-alpine hostname: rabbit ports: - "5672:5672" - "15672:15672" - "61613:61613" networks: - dev environment: RABBITMQ_DEFAULT_VHOST: pilipa volumes: - rabbitmq_data:/var/lib/rabbitmq eurekaserver: build: ./springcloud/eureka-server restart: on-failure ports: - "8761:8761" - "8762:8762" networks: - dev configserver: build: ./springcloud/config-server restart: on-failure ports: - "8888:8888" - "8889:8889" networks: - dev depends_on: - eurekaserver #依賴服務 links: - eurekaserver environment: SPRING_PROFILES_ACTIVE: devops volumes: - /Users/lind.zhang/project/config-repo:/config_repo #前面是本地路徑,後而是容器裡的路徑,在configserver裡配置的是後面的容器路徑
啟動與更新
- 先打映象
docker-compose build
- 再啟動服務
docker-compose up -d #-d是後臺執行
- 停止服務
docker-compose down
- 檢視容器的日誌
docker logs -f 容器ID
希望本文章對各位學者有所幫助!