SpringCloud教程 | 第十一篇: docker部署spring cloud项目

 

目录(?)[+]java

 

转载请标明出处: 
http://blog.csdn.net/forezp/article/details/70198649 
本文出自方志朋的博客linux

1、docker简介

Docker是一个开源的引擎,能够轻松的为任何应用建立一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试经过的容器能够批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其余的基础应用平台。 
Docker一般用于以下场景:git

  • web应用的自动化打包和发布;
  • 自动化测试和持续集成、发布;
  • 在服务型环境中部署和调整数据库或其余的后台应用;
  • 从头编译或者扩展示有的OpenShift或Cloud Foundry平台来搭建本身的PaaS环境。

Docker 的优势github

  • 一、简化程序: 
    Docker 让开发者能够打包他们的应用以及依赖包到一个可移植的容器中,而后发布到任何流行的 Linux 机器上,即可以实现虚拟化。Docker改变了虚拟化的方式,使开发者能够直接将本身的成果放入Docker中进行管理。方便快捷已是 Docker的最大优点,过去须要用数天乃至数周的 任务,在Docker容器的处理下,只须要数秒就能完成。web

  • 二、避免选择恐惧症: 
    若是你有选择恐惧症,仍是资深患者。Docker 帮你 打包你的纠结!好比 Docker 镜像;Docker 镜像中包含了运行环境和配置,因此 Docker 能够简化部署多种应用实例工做。好比 Web 应用、后台应用、数据库应用、大数据应用好比 Hadoop 集群、消息队列等等均可以打包成一个镜像部署。spring

  • 三、节省开支: 
    一方面,云计算时代到来,使开发者没必要为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思惟定势。Docker 与云的结合,让云空间获得更充分的利用。不只解决了硬件管理的问题,也改变了虚拟化的方式。docker

上面文字参考了相关文章;另,关于docker 的安装和基本的使用见相关教程数据库

2、准备工做

环境条件:windows

  • linux系统,不建议windows
  • docker最新版本
  • jdk 1.8
  • maven3.0

本文采用的工程来自第一篇文章的工程,采用maven的方式去构建项目,并采用docker-maven-plugin去构建docker镜像。

3、改造工程、构建镜像

改造eureka-server工程

在pom文件加上插件:

<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!-- tag::plugin[] --> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.3</version> <configuration> <imageName>${docker.image.prefix}/${project.artifactId}</imageName> <dockerDirectory>src/main/docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin> <!-- end::plugin[] --> </plugins> </build> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

Spotify 的 docker-maven-plugin 插件是用maven插件方式构建docker镜像的。

  • imageName指定了镜像的名字,本例为 forep/eureka-server
  • dockerDirectory指定 Dockerfile 的位置
  • resources是指那些须要和 Dockerfile 放在一块儿,在构建镜像时使用的文件,通常应用 jar 包须要归入。

修改下配置文件:

server: port: 8761 eureka: instance: prefer-ip-address: true client: registerWithEureka: false fetchRegistry: false 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

编写dockerfile文件:

FROM frolvlad/alpine-oraclejdk8:slim VOLUME /tmp ADD eureka-server-0.0.1-SNAPSHOT.jar app.jar #RUN bash -c 'touch /app.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] EXPOSE 8761 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

docker file编写指令:

  • FROM
FROM <image> FROM <image>:<tag> FROM <image> <digest> 
  • 1
  • 2
  • 3
  • 4

FROM指令必须指定且须要在Dockerfile其余指令的前面,指定的基础image能够是官方远程仓库中的,也能够位于本地仓库。后续的指令都依赖于该指令指定的image。当在同一个Dockerfile中创建多个镜像时,可使用多个FROM指令。

  • VOLUME

格式为:

VOLUME ["/data"]
  • 1

使容器中的一个目录具备持久化存储数据的功能,该目录能够被容器自己使用,也能够共享给其余容器。当容器中的应用有持久化数据的需求时能够在Dockerfile中使用该指令。

  • ADD

从src目录复制文件到容器的dest。其中src能够是Dockerfile所在目录的相对路径,也能够是一个URL,还能够是一个压缩包

  • ENTRYPOINT

指定Docker容器启动时执行的命令,能够屡次设置,可是只有最后一个有效。

  • EXPOSE

为Docker容器设置对外的端口号。在启动时,可使用-p选项或者-P选项。

构建镜像

执行构建docker镜像maven命令:

mvn clean
mvn package docker:build 
  • 1
  • 2
  • 3

Paste_Image.png

构建eureka-server镜像成功。

同理构建service-hi镜像

  • pom文件导入同eurek-server
  • 修改下配置文件:
eureka: client: serviceUrl: defaultZone: http://eureka-server:8761/eureka/ # 这个须要改成eureka-server server: port: 8763 spring: application: name: service-hi 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

在这里说下:defaultZone发现服务的host改成镜像名。

  • dockefile 编写同eureka-server

  • 构建镜像:

mvn clean
mvn package docker:build 
  • 1
  • 2
  • 3

Paste_Image.png

这时咱们运行docke的eureka-server 和service-hi镜像:

docker run -p 8761: 8761 -t forezp/eureka-server docker run -p 8763: 8763 -t forezp/service-hi 
  • 1
  • 2
  • 3

访问localhost:8761

Paste_Image.png

4、采用docker-compose启动镜像

Compose 是一个用于定义和运行多容器的Docker应用的工具。使用Compose,你能够在一个配置文件(yaml格式)中配置你应用的服务,而后使用一个命令,便可建立并启动配置中引用的全部服务。下面咱们进入Compose的实战吧。

采用docker-compose的方式编排镜像,启动镜像:

version: '3' services: eureka-server: image: forezp/eureka-server restart: always ports: - 8761:8761 service-hi: image: forezp/service-hi restart: always ports: - 8763:8763
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

输入命令: docker-compose up

Paste_Image.png

发现2个镜像按照指定的顺序启动了。

源码下载:https://github.com/forezp/SpringCloudLearning/tree/master/chapter11

5、采用docker-compose编排并启动镜像

docker-compose也能够构建镜像,如今咱们采用docker-compose的方式构建镜像。

如今以eureka-server为例: 
将Dockerfile移到eureka-server的主目录,改写ADD的相对路径:

FROM frolvlad/alpine-oraclejdk8:slim VOLUME /tmp ADD ./target/eureka-server-0.0.1-SNAPSHOT.jar app.jar #RUN bash -c 'touch /app.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] EXPOSE 8761
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

同理修改service-hi目录;

编写构建镜像docker-compose-dev文件:

version: '3' services: eureka-server: build: eureka-server ports: - 8761:8761 service-hi: build: service-hi ports: - 8763:8763 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

命令构建镜像并启动:

docker-compose -f docker-compose.yml -f docker-compose-dev.yml up 
  • 1
  • 2

Paste_Image.png

相关文章
相关标签/搜索