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

版权声明:本文为博主原创文章,欢迎转载,转载请注明作者、原文超链接 ,博主地址:http://blog.csdn.net/forezp。 http://blog.csdn.net/forezp/article/details/70198649

目录(?)[+]

转载请标明出处: 
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>
  • 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

构建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

这时我们运行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

四、采用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

发现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
  • 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

原文地址:https://www.cnblogs.com/lanblogs/p/8618429.html

时间: 2024-09-30 11:18:30

SpringCloud教程 | 第十一篇: docker部署spring cloud项目的相关文章

SpringCloud教程 | 第八篇: 消息总线(Spring Cloud Bus)

一.安装rabbitmq 二.pom父文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.ap

使用docker部署spring cloud项目详细步骤

准备工作JDK1.8.Docker1.12.1.CentOS7.0 1.CentOS7.0下JDK1.8的安装 (1)到Oracle官网下载好 jdk-8u181-linux-x64.tar.gz 备用 (2)卸载系统自带的java java -version # 如果有结果出来,则说明自带了javarpm -qa|grep java # 查询出已经安装的javayum -y remove [上面查出来的东西,多个用空格分隔](3)安装jdk cd /usr #进入到要安装jdk的目录mkdir

利用Docker部署Spring Cloud项目

1.按照创建server的方式创建一个项目,可以参照https://www.cnblogs.com/SakerLiu/p/9743577.html 2.在pom.xml文件中添加插件,代码如下所示 <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifact

跟我学SpringCloud | 第十一篇:使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪

SpringCloud系列教程 | 第十一篇:使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如无特殊说明,本系列教程全采用以上版本 在分布式服务架构中,需要对分布式服务进行治理--在分布式服务协同向用户提供服务时,每个请求都被哪些服务处理?在遇到问题时,在调用哪个服务上发生了问题?在分析性能时,调用各个服务都花了多长时间?哪些调用可以并行执行?-- 为此,分布式

docker部署spring boot项目在服务器上

IDE:idea 工具:docker spring boot:2.0.1 ======================================== 简单记录一下流程,以供参考: 第一步:首先得有一个spring boot的项目[集成了jpa+mybatis的spring boot 例子:https://github.com/AngelSXD/swapping] 第二步:项目打包为jar包 install成功以后 找到项目根目录下的target目录,这里面的jar就是打包好可以部署的jar

容器部署Spring Cloud项目

部署eureka和config 最后我们在rancher上部署eureka和config项目,首先我们需要在本地创建这两个项目的docker镜像,然后推送到网易云镜像仓库上. 关于使用Docker部署项目以及Rancher的安装及使用,可以参考我另外两篇文章,本文则不再赘述了: Docker化你的SpringBoot项目 安装 Rancher2.x 并部署工作负载 在eureka项目的根目录中,创建一个Dockerfile文件,编辑文件内容如下: FROM hub.c.163.com/libra

如何用Docker部署Spring Boot项目

1.idea中安装docker插件: 2.新建DockerFile,内容如下. # 基础镜像使用java FROM java:8 # 作者 MAINTAINER vic <[email protected]> # VOLUME 指定了临时文件目录为/tmp. # 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp VOLUME /tmp # 将jar包添加到容器中并更名为app.jar ADD es-1.0.0-SNAPSHOT.jar app.j

史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)

最新Finchley版本请访问:https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f1-eureka/或者http://blog.csdn.net/forezp/article/details/81040925 spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等.它运行环境简单,可以在开发人员的电脑上跑.另外说明spring cl

在CentOS 7上安装docker,部署spring boot

一.查看linux版本:lsb_release -a (如没有这个命令,安装:yum install -y redhat-lsb) uname -r docker 在centos安装,需要centos 7以上版本. 二.docker 安装操作步骤 docker 官网 :  https://docs.docker.com/get-started 安装必要的工具:Install required packages. yum-utils provides the yum-config-manager