本人研究docker-compose中間花了大量的時間,網(wǎng)上一大堆,說的都不是很全面,決定貢獻出來給大家
前提條件:宿主機安裝jdk8,安裝docker、安裝docker-compose
關(guān)于安裝docker、docker-compose的文章我前面已經(jīng)說過了,可以回頭再看看。
這里通過演示兩個注冊中心、一個配置服務(wù):eureka-cluster、eureka-cluster2、config-center
目錄結(jié)構(gòu)如下:

image.png
1.編寫Dockerfile文件
eureka
FROM java:8
# ARG JAR_FILE
# ARG LIB_FILE
ADD lib lib
ADD discovery-eureka-1.0.jar /app.jar
# ADD ${LIB_FILE} /lib
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Duser.timezone=GMT+08"]
CMD ["-Xms512m","-Xmx512m","-jar", "/app.jar","--spring.profiles.active=cluster","--server.port=8081","--eureka.client.service-url.defaultZone=http://root:12323232@172.16.11.6:8082/eureka/"]
eureka2
FROM java:8
# ARG JAR_FILE
# ARG LIB_FILE
ADD lib lib
ADD discovery-eureka-1.0.jar /app.jar
# ADD ${LIB_FILE} /lib
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Duser.timezone=GMT+08"]
CMD ["-Xms512m","-Xmx512m","-jar", "/app.jar","--spring.profiles.active=cluster","--eureka.instance.ipAddress=172.16.11.76","--server.port=8082","--eureka.client.service-url.defaultZone=http://root:12323232@172.16.11.6:8081/eureka/"]
config-center
FROM java:8
# ARG JAR_FILE
# ARG LIB_FILE
ADD lib lib
ADD config-center-1.0.jar /app.jar
# ADD ${LIB_FILE} /lib
# -- eureka.instance.ipAddress=172.16.11.76
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Duser.timezone=GMT+08"]
CMD ["-Xms512m","-Xmx512m","-jar", "/app.jar","--spring.profiles.active=native","--server.port=8889","--eureka.client.service-url.defaultZone=http://samc:samc@172.16.11.76:8081/eureka/,http://root:12323232@172.16.11.6:8082/eureka/"]
2.編寫docker-compose
version: '3'
services:
euraka:
build: /home/cater/spring-java/eureka-cluster
ports:
- 8081:8081
volumes:
#將項目中的log4j日志目錄,映射到宿主機的目錄下,格式為 宿主機:容器目錄
- "/application/logs/euraka:/application/logs/business-discovery"
euraka2:
build: /home/cater/spring-java/eureka-cluster2
ports:
- 8082:8082
depends_on:
- euraka
config-center:
build: /home/cater/spring-java/config-center
ports:
- 8889:8889
depends_on:
- euraka
- euraka2
4 整體結(jié)構(gòu)如下:

image.png
5.進入docker-compose.yml所在的目錄
運行命令:
docker-compose up -d
即可構(gòu)建和運行項目
注意:ENTRYPOINT和CMD的效果不同,可以直接使用CMD替代
1 ENTRYPOINT是追加的方式,遇到數(shù)組是不能覆蓋
--spring.profiles.active=native
而項目中的yml的配置 為spring.profiles.active=dev,那么配置在ENTRYPOINT中的效果就是:spring.profiles.active=native,dev ,是追加的方式
如果配置在CMD中,是覆蓋的效果,即:spring.profiles.active=dev
2 eureka.instance.ipAddress 不能指定主機的ip
dockerfile中
如 eureka.instance.ipAddress=172.16.11.6,不能指定為主機的ip,在docker中這個選項略去