docker容器部署Spring Boot项目及更新

标签: docker 容器 spring | 发表时间:2018-12-24 10:03 | 作者:郑云飞
出处:https://www.iteye.com

Docker这项容器技术已经是十分的火热了,读者要是不了解docker的话可以吧docker先理解为虚拟机。 
我们的Springboot最终是要部署在Linux上的,docker作为Linux轻量级的实现。docker也是可以用来部署Springboot应用的。 

1.创建Dockerfile 
创建一个文件名为Dockerfile的文件,复制以下内容到文件中

Java代码 
  1. FROM java:8  
  2. VOLUME /tmp  
  3. ADD config-server-0.0.1-SNAPSHOT.jar app.jar  
  4. RUN sh -c 'touch /app.jar'  
  5. ENV JAVA_OPTS=""  
  6. ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]  

 其中config-server-0.0.1-SNAPSHOT.jar这个是我的springClould的一个配置中心微服务



 2.创建docker镜像 

将创建好的Dockerfile文件和jar包上传到服务器,放在同一文件夹下,进入jar包所在文件夹,执行命令

Java代码 
  1. docker build -t xstz_config_server .  

 xstz_config_server为生成的镜像名, .表示当前目录

 

Java代码 
  1. docker build -t xstz_config_server .  
  2. Sending build context to Docker daemon 26.84 MB  
  3. Step 1 : FROM java:8  
  4. Trying to pull repository docker.io/library/java ...  
  5. 8: Pulling from docker.io/library/java  
  6. 5040bd298390: Pull complet  
  7. fce5728aad85: Pull complete  
  8. 76610ec20bf5: Pull complete  
  9. 60170fec2151: Pull complete  
  10. e98f73de8f0d: Pull complete  
  11. 11f7af24ed9c: Pull complete  
  12. 49e2d6393f32: Pull complete  
  13. bb9cdec9c7f3: Pull complete  
  14. Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d  
  15.  ---> d23bdf5b1b1b  
  16. Step 2 : VOLUME /tmp  
  17.  ---> Running in 2c1948cd1181  
  18.  ---> 33092a5791af  
  19. Removing intermediate container 2c1948cd1181  
  20. Step 3 : ADD config-server-0.0.1-SNAPSHOT.jar app.jar  
  21.  ---> b2c41134d3f  
  22. Removing intermediate container 684002e93194  
  23. Step 4 : RUN sh -c 'touch /app.jar'  
  24.  ---> Running in 985f0fece3fd  
  25.  ---> b63eb40e4e50  
  26. Removing intermediate container 985f0fece3fd  
  27. Step 5 : ENV JAVA_OPTS ""  
  28.  --> Running in 327eb48ba1d6  
  29.  ---> d3c19e35c369  
  30. Removing intermediate container 327eb48ba1d6  
  31. Step 6 : ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar /app.jar  
  32.  ---> Running in eb0d88164ae7  
  33.  ---> 1ed548a8d199  
  34. Removing intermediate container eb0d88164ae7  
  35. Successfully built 1ed548a8d199  

 

 

3.查看生成的镜像

 

Java代码 
  1. docker images  
  2. REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE  
  3. xstz_config_server   latest              1ed548a8d199        6 seconds ago       696.8 MB  
  4. docker.io/nginx      latest              8b89e48b5f15        5 days ago          109 MB  
  5. docker.io/registry   latest              b2b03e9146e1        2 weeks ago         33.29   

 

 

docker.io/java       8                   d23bdf5b1b1b        18 months ago       643.1 MB

4.创建容器并运行jar包

 

Java代码 
  1. [root@oracle xstz_springclould]# docker run -d -p 8091:8091 xstz_config_server  
  2. e67579cb6f5bc60a11ca1441ba1ae220c9fdf2d772d1ff3d22d713614673c75e  
  3. [root@oracle xstz_springclould]#  

 增加时区,并给容器起名字,防止docker容器时间和宿主机不一致

Java代码 
  1. docker run --name eureka -d -p 8761:8761 -e TZ="Asia/Shanghai" eureka:v1  

 

 

-d表示在后台运行

-p 指定端口号 第一个8080 为 容器内部的端口号 第二个8080位外界访问的端口号,将容器内的8080端口号映射到外部的8080端口号

5.然后就可以通过外网ip+端口号访问项目

6.测试一下,从spring clould config 客户端启动项目,从config-server端读取配置文件,看是否可以成功

启动我本地的Config客户端,发下可以成功启动,成功从服务端读取配置文件



 配置文件如下



 

 

 二、服务更新

 1.查看容器上存放的jar包路径

Dofile为例如下

Java代码 
  1. FROM java:8  
  2. VOLUME /tmp  
  3. ADD eureka_server-0.0.1-SNAPSHOT.jar eureka.jar  
  4. RUN sh -c 'touch /eureka.jar'  
  5. ENV JAVA_OPTS=""  
  6. ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/eureka.jar"]  

 查看命令

Java代码 
  1. find / -name eureka.jar  

 结果

Java代码 
  1. /var/lib/docker/overlay2/0ad9b91289cca6d0cc4961476ecadc4f96761af3c202c270ad60de7aee1ecf4f/diff/eureka.jar  
  2. /var/lib/docker/overlay2/3759b25ac40ef0c8df4e0f87ec245417fdb3efdcaf17569e5a866de6bf6882a0/diff/eureka.jar  
  3. /var/lib/docker/overlay2/959a2175dc14231ae29aa231626b6aae566063e9d3f577e299fc261d511908aa/merged/eureka.jar  

 

2. 把需要更新的新jar包替换上面查询出来的所有jar。

3. 重启docker容器。

实时查看docker容器名为eureka的最后10行日志

Java代码 
  1. docker logs -f -t --tail 10 eureka  

 优化更新

用了一段时间上面的更新方法,发现每次替换jar,都要替换3个地方,有点繁琐,而且前缀不固定,没法通过自动化脚本更新,于是又研究了另外一个智能的办法

dockerfile如下

Dockerfile代码 
  1. FROM java:8  
  2. VOLUME /tmp  
  3. ADD eureka_server-0.0.1-SNAPSHOT.jar eureka.jar  
  4. RUN sh -c 'touch /eureka.jar'  
  5. ENV JAVA_OPTS=""  
  6. ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/eureka.jar"]  

 构建命令

Java代码 
  1. docker build -t eureka:v1 .  

 

运行命令

Java代码 
  1. docker run --name=eureka -d -p 8761:8761 -v /home/docker/springclould/eureka/eureka_server-0.0.1-SNAPSHOT.jar:/eureka.jar -e tZ="Asia/Shanghai" eureka:v1  

 将容器中的jar映射到宿主机目录中,每次只需要替换宿主机中的jar包即可

然后停止服务

Java代码 
  1. docker stop eureka  

 再启动服务

Java代码 
  1. docker start eureka  

 即可更新服务



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [docker 容器 spring] 推荐:

docker容器部署Spring Boot项目及更新

- - 编程语言 - ITeye博客
Docker这项容器技术已经是十分的火热了,读者要是不了解docker的话可以吧docker先理解为虚拟机. 我们的Springboot最终是要部署在Linux上的,docker作为Linux轻量级的实现. docker也是可以用来部署Springboot应用的. 1.创建Dockerfile . 创建一个文件名为Dockerfile的文件,复制以下内容到文件中.

关于docker容器的监控

- - CSDN博客推荐文章
1 docker inspect [容器ID | 镜像ID]. 查看容器创建时间、容器的IP、映射的端口、挂载的目录等信息. 此命令同样也能用来查看镜像的详细信息. 2 docker stats 容器ID. 用来查看容器的资源使用情况,如:CPU、内存、网络、I/O. 另外,在docker的配置文件中添加如下的参数之后,可以采用curl来调用stats API接口.

Docker容器安全性分析

- - FreeBuf互联网安全新媒体平台
Docker是目前最具代表性的容器技术之一,对云计算及虚拟化技术产生了颠覆性的影响. 本文对Docker容器在应用中可能面临的安全问题和风险进行了研究,并将Docker容器应用环境中的安全机制与相关解决方案分为容器虚拟化安全、容器安全管理、容器网络安全三部分进行分析. 一、从虚拟化安全到容器安全 .

调试 Docker 容器内部进程

- - 掘金后端
摘要:本文以 Nebula Graph 进程为例,讲解如何不破坏原有容器的内容,也不用在其中安装任何的工具包前提下,像在本地一样来调试进程. 在开发或者测试过程中,我们经常会用到. vesoft-inc/nebula-docker-compose 这个 repo 下的部署方式,因为当初为了尽可能的压缩每个.

使用Spring Cloud和Docker构建微服务架构

- - Oopsguy
原文: https://dzone.com/articles/microservice-architecture-with-spring-cloud-and-do. 作者:Alexander Lukyanchikov. 如何使用Spring Boot、Spring Cloud、Docker和Netflix的一些开源工具来构建一个微服务架构.

使用 docker 部署 spring boot 并接入 skywalking

- - SegmentFault 最新的文章
最近在研究skywalking,打算使用k8s部署 skywalking 并将 pod 中的应用接入 skywalking 进行服务链路追踪. 这篇文章先不介绍 skywalking 在k8s中的部署和使用,而是先介绍如何使用手动和docker的方式使用 skywalking. 在整个实践过程中查阅了大量文档,遇到了各种问题,这里将我自己的实践过程记录下来,希望对有同样需求的小伙伴提供一些帮助.

微服务应用-基于Spring Cloud和Docker构建电影推荐微服务

- - CSDN博客推荐文章
使用Spring Cloud和Docker构建电影推荐微服务. 如果你对云应用很了解,可以直接移步下载运行项目(https://github.com/kbastani/spring-cloud-microservice-example),或跳转到部署步骤,. 本博客系列将向你介绍一些使用Spring Cloud和Docker构建微服务平台的基本概念.

减少使用Java应用服务器,迎接Docker容器

- - ITeye资讯频道
【编者的话】随着Docker的发展,越来越多的应用开发者开始使用Docker. James Strachan写了一篇有关Java开发者如何使用Docker进行轻量级快速开发的文章. 他告诉我们,使用Docker和服务发现的机制,可以有效减轻Java运维人员的负担,进行项目的快速启动和持续迭代. 多年来,Java生态系统一直在使用应用服务器.

理解Docker跨多主机容器网络

- - Tony Bai
在 Docker 1.9 出世前,跨多主机的容器通信方案大致有如下三种:. 将宿主机A的端口P映射到容器C的网络空间监听的端口P’上,仅提供四层及以上应用和服务使用. 这样其他主机上的容器通过访问宿主机A的端口P实 现与容器C的通信. 显然这个方案的应用场景很有局限. 2、将物理网卡桥接到虚拟网桥,使得容器与宿主机配置在同一网段下.

Docker容器的自动化监控实现

- - DockerInfo
2016年对于网易杭州研究院(以下简称“杭研”)而言是重要的,成立十周年之际,杭研正式推出了网易云. “十年•杭研技术秀”系列文章,由杭研研发团队倾情奉献,为您展示杭研那些有用、有趣的技术实践经验,涵盖云计算、大前端、信息安全、运维、QA、大数据、人工智能等领域,涉及前沿的分布式、 容器、深度学习等技术.