转载自:
http://blog.csdn.net/forezp/article/details/70198649
本文出自方志朋的博客
一、docker简介
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。
docker通常用于如下场景:
- web应用的自动化打包和发布;
- 自动化测试和持续集成、发布;
- 在服务型环境中部署和调整数据库或其他的后台应用;
- 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
Docker 的优点
-
1、简化程序:
Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。 -
2、避免选择恐惧症:
如果你有选择恐惧症,还是资深患者。Docker 帮你 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。 -
3、节省开支:
一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。
上面文字参考了相关文章;另,关于docker 的安装和基本的使用见相关教程。
二、准备工作
环境条件:
- linux系统,不建议windows
- docker最新版本
- jdk 1.8
- maven3.0
本文采用的工程来自第一篇文章的工程,采用maven的方式去构建项目,并采用docker-maven-plugin去构建docker镜像。
三、改造工程、构建镜像
改造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>
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
编写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
docker file编写指令:
- FROM格式为
FROM <image> FROM <image>:<tag> FROM <image> <digest>
FROM指令必须指定且需要在Dockerfile其他指令的前面,指定的基础image可以是官方远程仓库中的,也可以位于本地仓库。后续的指令都依赖于该指令指定的image。当在同一个Dockerfile中建立多个镜像时,可以使用多个FROM指令。
- VOLUME
格式为:
VOLUME ["/data"]
使容器中的一个目录具有持久化存储数据的功能,该目录可以被容器本身使用,也可以共享给其他容器。当容器中的应用有持久化数据的需求时可以在Dockerfile中使用该指令。
- ADD
从src目录复制文件到容器的dest。其中src可以是Dockerfile所在目录的相对路径,也可以是一个URL,还可以是一个压缩包
- ENTRYPOINT
指定Docker容器启动时执行的命令,可以多次设置,但是只有最后一个有效。
- EXPOSE
为Docker容器设置对外的端口号。在启动时,可以使用-p选项或者-P选项。
构建镜像
执行构建docker镜像maven命令
mvn clean mvn package docker:build
构建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
在这里说下:defaultZone发现服务的host改为镜像名。
-
dockefile 编写同eureka-server
-
构建镜像:
mvn clean mvn package docker:build
这时我们运行docke的eureka-server 和service-hi镜像:
docker run -p 8761: 8761 -t forezp/eureka-server docker run -p 8763: 8763 -t forezp/service-hi
访问localhost:8761
四、采用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
输入命令: docker-compose up
发现2个镜像按照指定的顺序启动了。
源码下载:https://github.com/forezp/SpringCloudLearning/tree/master/chapter11
五、采用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
同理修改service-hi目录;
编写构建镜像docker-compose-dev文件:
version: '3' services: eureka-server: build: eureka-server ports: - 8761:8761 service-hi: build: service-hi ports: - 8763:8763
命令构建镜像并启动:
docker-compose -f docker-compose.yml -f docker-compose-dev.yml up
源码下载:https://github.com/forezp/SpringCloudLearning/tree/master/chapter11-2
六、参考文献
用 Docker 构建、运行、发布一个 Spring Boot 应用
相关推荐
史上最简单的SpringCloud教程 | 第十一篇:docker部署spring cloud项目 史上最简单的SpringCloud教程 | 第十二篇: 断路器监控(Hystrix Dashboard) 史上最简单的SpringCloud教程 | 第十三篇: 断路器聚合监控(Hystrix ...
第二课: 服务消费者(rest+ribbon) ... 第十一课:docker部署spring cloud项目 第十二课: 断路器监控(Hystrix Dashboard) 第十三课: 断路器聚合监控(Hystrix Turbine) 第十四课: 服务注册(consul)
k8s docker 部署springcloud集群文档。 部署开发、云平台、容器技术
SpringBoot非官方教程 | 第十一篇:springboot集成swagger2,构建优雅的Restful API SpringBoot非官方教程 | 第十二篇:springboot集成apidoc 缓存篇 SpringBoot非官方教程 | 第十三篇:springboot集成spring ...
基于SpringCloud的高校二手书交易平台系统源码+项目说明(支持docker部署).zip 基于SpringCloud2.3的校园二手书交易系统,整合了nacos、feign、springcloud-gateway服务,并实现Docker部署与云部署。 每个微服务是...
docker部署springcloud微服务,下载即可用。请参考博客:https://blog.csdn.net/qq_35314762/article/details/81948291
springcloud与docker微服务架构实战配套代码springcloud与docker微服务架构实战配套代码springcloud与docker微服务架构实战配套代码springcloud与docker微服务架构实战配套代码springcloud与docker微服务架构实战...
《7天学会Spring Cloud教程》是一本专注于快速掌握微服务框架Spring Cloud的实践指南。Spring Cloud作为Java领域的主流微服务框架,为企业级分布式应用提供了全面的解决方案,包括服务发现、配置中心、负载均衡、...
使用Spring Cloud和Docker构建微服务的过程中,Docker容器技术提供了一种轻量级、可移植、自给自足的运行环境,这使得微服务能够在任何支持Docker的机器上运行,而且对环境的依赖性降到最低。这在开发、测试和生产...
SpringCloudAlibaba 是一个基于 Spring Cloud 和 Alibaba 开源的微服务框架,提供了丰富的微服务组件和工具,帮助开发者快速构建微服务应用程序。该框架提供了服务注册、配置中心、服务调用、熔断器、服务网关等多种...
SpringCloud与Docker微服务架构实战-完整版 高清 PDF 周立
基于Spring Cloud实现,使用Docker部署的电影订票系统源码.zip
《Spring Cloud实战教程》是一本全面且深入的指南,旨在帮助开发者从初识到精通Spring Cloud,从而在微服务架构领域建立起坚实的基础。Spring Cloud作为Java领域的热门框架,为构建分布式系统提供了丰富的工具集,...
11. **Docker和Kubernetes集成**:SpringBoot和SpringCloud可以轻松地与Docker容器化技术结合,通过Kubernetes进行服务编排,实现自动化部署和扩展。 这些知识点是SpringCloud开发中的关键点,学习和掌握它们将有助...
《微服务书籍管理系统springcloud.rar》是一个包含使用Spring Cloud构建微服务架构的书籍管理系统的资源压缩包。Spring Cloud是基于Spring Boot实现的服务发现、配置、路由、熔断、负载均衡等全套微服务解决方案,它...
- 基于 Spring Cloud 2021 、Spring Boot 2.7、 OAuth2 的 RBAC **权限管理系统** - 基于数据驱动视图的理念封装 element-ui,即使没有 vue 的使用经验也能快速上手 - 提供对常见容器化支持 Docker、Kubernetes、...
Spring Cloud+Docker微服务的Docker源码
根据提供的文件信息,可以看出这份材料主要涉及的是Spring Cloud与Docker在高并发微服务架构设计中的应用,并且提供了关于如何获取该电子书的信息。然而,实际内容并未给出具体的技术细节,而是介绍了如何联系作者...
详细资料,需要自取。 使用SpringCloud和Docker实战微服务
在IT行业中,微服务架构已经成为了现代应用开发的主流趋势,Spring Boot、Spring Cloud和Docker作为其中的关键技术,各自扮演着重要的角色。本实战指南将深入探讨这三者的使用和整合,帮助开发者构建高效、可扩展的...