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. [[email protected] xstz_springclould]# docker run -d -p 8091:8091 xstz_config_server  
  2. e67579cb6f5bc60a11ca1441ba1ae220c9fdf2d772d1ff3d22d713614673c75e  
  3. [[email protected] 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的文件,复制以下内容到文件中.

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

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

关于docker容器的监控

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

Docker容器安全性分析

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

微服务应用-基于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、大数据、人工智能等领域,涉及前沿的分布式、 容器、深度学习等技术.

elk-filebeat收集docker容器日志 - devzxd - 博客园

- -
filebeat安装与配置. 1、使用docker-compose文件构建elk. 2、执行docker-compose up -d 启动elk. 可以使用docker logs 命令查看elk启动日志. 启动成功后打开浏览器访问 http://127.0.0.1:5601. 关于filebeat本文也不做过多介绍.

浅析 Docker 容器安全管控方法

- - IT瘾-dev
二、浅析Docker容器生命周期安全问题. 2.3 容器系统入侵检测与防护. 2.4 容器网络入侵检测与防护. 2.6 Docker及其配套软件漏洞. 三、浅谈Docker容器安全现状改善方法. 3.1 “镜像深度扫描”管控方法. 3.2 “容器系统入侵检测与防护”管控方法. 3.3 “容器网络入侵检测与防护”管控方法.