SpringBoot37-分布式系统开发-基于Docker部署3

来源:互联网 发布:百分百圣洁知乎 编辑:程序博客网 时间:2024/06/08 06:20

            以spring cloud开发的微服务程序是否适合在docker环境下部署。代码参考之前的博客:http://blog.csdn.net/j903829182/article/details/78511059


一,Dockerfile编写

     前面博客的6个微服务的Dockerfile的编写几乎完全一致,下面以config模块为例。

1,runboot.sh脚本编写

     位于src/main/docker下:


sleep 10java -jar /app/config.jar

根据启动顺序,调整sleep的时间


2,Dockerfile编写

     位于src/main/docker下:

FROM hub.c.163.com/library/java:latestMAINTAINER  jackVOLUME /tmpRUN mkdir /appADD config.jar /app/app.jarADD runboot.sh /app/RUN bash -c 'touch /app/app.jar'WORKDIR /appRUN chmod a+x runboot.shEXPOSE 8888CMD /app/runboot.sh

为不同的微服务我们只需修改:

ADD config.jar /app/app.jar

以及端口:

EXPOSE 8888

3,Docker的maven插件

      在开发机器编译Docker镜像到服务器,使用docker-maven-plugin即可,在所有程序的pom.xml内增加下面代码:

<build><finalName>config</finalName><plugins><!--<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin>--><!--<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.20</version><configuration><skipTests>true</skipTests></configuration></plugin>--><!--在开发机器编译docker镜像到服务器使用docker-mave-plugin--><plugin><groupId>com.spotify</groupId><artifactId>docker-mave-plugin</artifactId><configuration><imageName>${project.name}:${project.version}</imageName><dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory><skipDockerBuild>false</skipDockerBuild><resources><resource><directory>${project.build.directory}</directory><include>${project.build.finalName}</include></resource></resources></configuration></plugin></plugins></build>

4,编译镜像

      使用docker-maven-plugin,默认将Docker编译到localhost。如果是远程Linux服务器,请在环境变量中配置:DOCKER_HOST,本例的linux服务器地址是:192.168.0.104



     在控制台进入代码的目录,执行下面的语句:

mvn clean package docker:build -DskipTests


   编译后效果如下:




    查看linux服务器上的镜像,如下:




二,Docker Compose

    Docker Compose是用来定义和运行多容器应用的工具。关于Docker Compose的安装和使用可以查看:

https://docs.docker.com/compose/。

    Docker Compose使用一个docker-compose.yml来描述多容器的定义,使用下面命令运行整个应用:

docker-compose up



三,docker-compose.yml编写

       docker-compose.yml的编写代码如下:

postgresdb:  image: busybox  volumes: - /var/lib/postgresql/datapostgres:  name: postgres  image: postgres  hostname: postgres  volumes_from:    - postgresdb#ports:# -"5432:5432"  environment:    - POSTGRES_USER=postgres    - POSTGRES_PASSWORD=postgresdiscovery:  image: "discovery:1.0.0-SNAPSHOT"  hostname: discovery  name: discovery  ports:    - "8761:8761"config:  image: "config:1.0.0-SNAPSHOT"  hostname: config  name: config  links:    - discovery  environment:    EUREKA_HOST: discovery    EUREKA_PORT: 8761#ports:#  - "8888:8888"person:  image: person:1.0.0-SNAPSHOT  hostname: person  links:    - discovery    - config    - postgres  environment:    EUREKA_HOST: discovery    EUREKA_PORT: 8761    SPRING_PROFILES_ACTIVE: docker#ports:#  - "8082:8082"some:  image: some:1.0.0-SNAPSHOT  hostname: some  links:    - discovery    - config    environment:      EUREKA_HOST: discovery      EUREKA_PORT: 8761      SPRING_PROFILES_ACTIVE: docker#ports:  - "8083:8083"ui:  image: ui:1.0.0-SNAPSHOT  hostname: ui  links:    - discovery    - config    - person    - some  environment:    EUREKA_HOST: discovery    EUREKA_PORT: 8761    SPRING_PROFILES_ACTIVE: docker  ports:    - "80:80"monitor:  image: monitor:1.0.0-SNAPSHOT  hostname: monitor  links:    - discovery    - config    - person    - some    - ui  environment:    EUREKA_HOST: discovery    EUREKA_PORT: 8761    SPRING_PROFILES_ACTIVE: docker#ports:# - "8989:8989"#enviroment:给容器使用的变量,在容器中使用${}来调用#links:当前容器依赖的容器,可直接使用依赖容器的已有端口#ports:将我们要暴露的端口映射出来,不需要暴露的端口则不做映射




四,运行

    将docker-compose.yml上传至linux服务器,在文件当前目录执行下面命令:

docker-compose up -d


-d表示后台运行

启动效果如下:












源码地址:https://github.com/wj903829182/springcloud3









原创粉丝点击