`
郑云飞
  • 浏览: 795795 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SpringBoot in Docker

 
阅读更多

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

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

FROM java:8
VOLUME /tmp
ADD config-server-0.0.1-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

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



 2.创建docker镜像 

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

 docker build -t xstz_config_server .

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

 

docker build -t xstz_config_server .
Sending build context to Docker daemon 26.84 MB
Step 1 : FROM java:8
Trying to pull repository docker.io/library/java ...
8: Pulling from docker.io/library/java
5040bd298390: Pull complet
fce5728aad85: Pull complete
76610ec20bf5: Pull complete
60170fec2151: Pull complete
e98f73de8f0d: Pull complete
11f7af24ed9c: Pull complete
49e2d6393f32: Pull complete
bb9cdec9c7f3: Pull complete
Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
 ---> d23bdf5b1b1b
Step 2 : VOLUME /tmp
 ---> Running in 2c1948cd1181
 ---> 33092a5791af
Removing intermediate container 2c1948cd1181
Step 3 : ADD config-server-0.0.1-SNAPSHOT.jar app.jar
 ---> b2c41134d3f
Removing intermediate container 684002e93194
Step 4 : RUN sh -c 'touch /app.jar'
 ---> Running in 985f0fece3fd
 ---> b63eb40e4e50
Removing intermediate container 985f0fece3fd
Step 5 : ENV JAVA_OPTS ""
 --> Running in 327eb48ba1d6
 ---> d3c19e35c369
Removing intermediate container 327eb48ba1d6
Step 6 : ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar /app.jar
 ---> Running in eb0d88164ae7
 ---> 1ed548a8d199
Removing intermediate container eb0d88164ae7
Successfully built 1ed548a8d199
 

 

3.查看生成的镜像

 

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

 

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

4.创建容器并运行jar包

 

[root@oracle xstz_springclould]# docker run -d -p 8091:8091 xstz_config_server
e67579cb6f5bc60a11ca1441ba1ae220c9fdf2d772d1ff3d22d713614673c75e
[root@oracle xstz_springclould]#
 增加时区,并给容器起名字,防止docker容器时间和宿主机不一致
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为例如下

FROM java:8
VOLUME /tmp
ADD eureka_server-0.0.1-SNAPSHOT.jar eureka.jar
RUN sh -c 'touch /eureka.jar'
ENV JAVA_OPTS=""
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/eureka.jar"]

 查看命令

find / -name eureka.jar

 结果

/var/lib/docker/overlay2/0ad9b91289cca6d0cc4961476ecadc4f96761af3c202c270ad60de7aee1ecf4f/diff/eureka.jar
/var/lib/docker/overlay2/3759b25ac40ef0c8df4e0f87ec245417fdb3efdcaf17569e5a866de6bf6882a0/diff/eureka.jar
/var/lib/docker/overlay2/959a2175dc14231ae29aa231626b6aae566063e9d3f577e299fc261d511908aa/merged/eureka.jar

 

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

3. 重启docker容器。

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

docker logs -f -t --tail 10 eureka

 优化更新

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

dockerfile如下

FROM java:8
VOLUME /tmp
ADD eureka_server-0.0.1-SNAPSHOT.jar eureka.jar
RUN sh -c 'touch /eureka.jar'
ENV JAVA_OPTS=""
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/eureka.jar"]

 构建命令

docker build -t eureka:v1 .

 

运行命令

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包即可

然后停止服务

docker stop eureka

 再启动服务

docker start eureka

 即可更新服务

  • 大小: 119.3 KB
  • 大小: 133.6 KB
  • 大小: 42.9 KB
分享到:
评论

相关推荐

    详解SpringBoot项目docker环境运行时无限重启问题

    描述:springboot项目,docker镜像里面运行,看docker的日志,项目启动成功后,隔了一分钟左右他就自动重新启动,然后造成网站接口访问的时候nginx报502 gateway啥的,有两台服务器,一个是文件服务器,运行了很简单...

    springboot整合docker部署实现两种构建Docker镜像方式

    Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和...

    详解在Docker容器中运行Spring Boot应用

    spring Boot简化了Spring应用的开发...Docker是一种Linux容器的实现,Linux容器是基于进程的轻量级资源隔离技术,每一个容器对应操作系统中的一个进程,但是它又会有自己的网络空间、文件系统、PID等。Docker除了实现L

    使用Kubernetes部署Springboot或Nginx的详细教程

    经过《Maven一键部署Springboot到Docker仓库,为自动化做准备》,Springboot的Docker镜像已经准备好,也能在Docker上成功运行了,是时候放上Kubernetes跑一跑了。这非常简单,一个yaml文件即可。 2 一键部署...

    Spring Boot 应用容器化之 Docker、Gradle

    本文演示了如何用 Docker、Gradle 来构建、运行、发布来一个 Spring Boot 应用。 Docker 简介 Docker 是一个 Linux 容器管理工具包,具备“社交”方面,允许用户发布容器的 image (镜像),并使用别人发布的 image。...

    Spring Boot 2.4 新特性之一键构建Docker镜像的过程详解

    在我们开发过程中为了支持 Docker 容器化,一般使用 Maven 编译打包然后生成镜像,能够大大提供上线效率,同时能够快速动态扩容,快速回滚,着实很方便。docker-maven-plugin 插件就是为了帮助我们在 Maven 工程中,...

    详解docker部署SpringBoot及替换jar包的方法

    这篇文章主要介绍如何在docker上部署springboot项目。关于如何创建springboot项目可以看看这篇文章IDEA上面搭建一个SpringBoot的web-mvc项目遇到的问题 本文主要介绍docker部署springboot的三种方式,分别是:入门...

    Mac下部署springBoot项目到Docker中(demo)

    这个项目的代码是我执行在Docker上部署SpringBoot的java代码和Dockerfile配置文件,相关的执行命令语句也记录在上。 操作流程 本地部署 在 Mac 上安装启动 Docker。详细步骤请参考:MacOS安装Docker clone 项目:...

    centos7下启动springboot项目启动脚本(shell脚本)

    前言:打包好的springboot项目,可以使用java -jar xxx.jar的方式启动。当出现多个springboot项目需要启动的时候,可以使用脚本启动的方式。这在springcloud项目的开发测试阶段尤为有用。以下展示启动脚本示例,过程...

    Docker部署springboot项目实例解析

    这篇文章主要介绍了docker部署springboot项目实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 创建项目 pom.xml <?xml version=1.0 encoding=UTF-...

    docker安装tomcat并部署Springboot项目war包的方法

    1.首先在启动docker service docker start 2.拉取tomcat镜像。 docker pull tomcat:8-jdk8 如果不加后面的8-jdk8 标签的话,会默认拉取latest,也就是最新的官方版本 3.安装完成后,做作容器,并启动tomcat ...

    如何在docker中运行springboot项目过程图解

    出现如下图时表示成功(前提是...输入:docker build -t app . (注意后面有个点,app为自定义镜像名)构建镜像 查看镜像是否存在: docker images 四、运行刚才打的镜像:docker run -d -p 8888:8081 –name app ap

    IDEA 通过docker插件发布springboot项目的详细教程

    一、编写Dockerfile文件 (1)右键项目名,新建一个文本文件,把名字改成Dockerfile,不用后缀。放在项目根目录下。 (2)填写Dockerfile内容 FROM openjdk:8 VOLUME /tmp ADD target/*.jar app.jar ...

    docker-compose 配置spring环境的方法步骤

    最近需要打包项目给成员们进行测试,但打包运行后很影响开发,于是打算使用docker模拟生产环境运行打包后的项目,这样就能既开发,又能给成员进行测试了。 由于原项目过大,打算先拿软件工程的大实验试试水,软件...

    浅析SpringBoot打包上传到docker并实现多实例部署(IDEA版)

    最近有一个朋友问我有没有玩过docker,回答起来底气不是很足 ^ – ^ (刚开始玩cloud的时候接触过,玩过一会,后面在实际开发中比较少用,所以基本上可以说是忘记了.),今天花了点时间整理之前的笔记以及整理走一个...

    Docker如何给Springboot项目动态传参的实现方法

    而不是每次都要在项目配置文件硬编码,然后构建服务镜像,最后打包发布经过一些列流程才能更新配置,那能不能直接通过docker-compose.yml里把一些配置项放到环境变量,然后springboot项目自动从环境变量获取参数呢?...

    在Idea中使用Docker部署SpringBoot项目的详细步骤

    安装Dockeridea中安装docker插件,并配置docker一个SpringBoot项目创建Dockerfile 一、下载、安装、配置Docker下载Docker 下载地址:官网下载 Docker 安装 一直下一步就行 配置路径:Settings–General 勾选 Expose ...

    使用Docker部署Spring Boot的实现方法

    Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下。 首先构建一个简单的 Spring Boot 项目,然后给项目添加 Docker 支持,最后对项目进行...

    docker连接spring boot和mysql容器方法介绍

    在之前使用docker部署运行了Spring Boot的小例子,但是没有使用数据库。在这一篇中,介绍docker如何启动mysql容器,以及如何将Spring Boot容器与mysql容器连接起来运行。 docker基本命令 首先熟悉一下在操作过程中...

Global site tag (gtag.js) - Google Analytics