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
希望本文章對各位學者有所幫助!
作者:倉儲大叔,張占嶺,
榮譽:微軟MVP
QQ:853066980
支付寶掃一掃,為大叔打賞!
