社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

Spring Boot 2.0(四):使用 Docker 部署 Spring Boot

纯洁的微笑 • 6 年前 • 663 次点击  

Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下。

首先构建一个简单的 Spring Boot 项目,然后给项目添加 Docker 支持,最后对项目进行部署。

一个简单 Spring Boot 项目

在 pom.xml 中 ,使用 Spring Boot 2.0 相关依赖

  1.  org.springframework.boot

  2.  spring-boot-starter-parent

  3.  2.0.0.RELEASE

添加 web 和测试依赖

  1.  

  2.  org.springframework.boot

  3.  spring-boot-starter-web

  4.  

  5.  

  6.  org.springframework.boot

  7.  spring-boot-starter-test

  8.  test

  9.  

创建一个 DockerController,在其中有一个 index()方法,访问时返回: Hello Docker!

  1. @RestController

  2. public class DockerController {

  3.  @RequestMapping("/")

  4.  public String index() {

  5.  return "Hello Docker!";

  6.  }

  7. }

启动类

  1. @SpringBootApplication

  2. public class DockerApplication {

  3.  public static void main(String[] args) {

  4.  SpringApplication.run(DockerApplication.class, args);

  5.  }

  6. }

添加完毕后启动项目,启动成功后浏览器放问: http://localhost:8080/,页面返回: Hello Docker!,说明 Spring Boot 项目配置正常。

Spring Boot 项目添加 Docker 支持

在 pom.xml-properties中添加 Docker 镜像名称

  1.  springboot

plugins 中添加 Docker 构建插件:

  1.  

  2.  

  3.  org.springframework.boot

  4.  spring-boot-maven-plugin

  5.  

  6.  

  7.  

  8.  com.spotify

  9.  docker-maven-plugin

  10.  1.0.0

  11.  

  12.  ${docker.image.prefix}/${project.artifactId}

  13.  src/main/docker

  14.  

  15.  

  16.  /

  17.  ${project.build.directory}

  18.  ${project.build.finalName}.jar

  19.  

  20.  

  21.  

  22.  

  23.  

  24.  

在目录 src/main/docker下创建 Dockerfile 文件,Dockerfile 文件用来说明如何来构建镜像。

  1. FROM openjdk:8-jdk-alpine

  2. VOLUME /tmp

  3. ADD spring-boot -docker-1.0.jar app.jar

  4. ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

这个 Dockerfile 文件很简单,构建 Jdk 基础环境,添加 Spring Boot Jar 到镜像中,简单解释一下:

  • FROM ,表示使用 Jdk8 环境 为基础镜像,如果镜像不是本地的会从 DockerHub 进行下载

  • VOLUME ,VOLUME 指向了一个 /tmp的目录,由于 Spring Boot 使用内置的Tomcat容器,Tomcat 默认使用 /tmp作为工作目录。这个命令的效果是:在宿主机的 /var/lib/docker目录下创建一个临时文件并把它链接到容器中的 /tmp目录

  • ADD ,拷贝文件并且重命名

  • ENTRYPOINT ,为了缩短 Tomcat 的启动时间,添加 java.security.egd的系统属性指向 /dev/urandom作为 ENTRYPOINT

这样 Spring Boot 项目添加 Docker 依赖就完成了。

构建打包环境

我们需要有一个 Docker 环境来打包 Spring Boot 项目,在 Windows 搭建 Docker 环境很麻烦,因此我这里以 Centos 7 为例。

安装 Docker 环境

安装

  1. yum install docker

安装完成后,使用下面的命令来启动 docker 服务,并将其设置为开机启动:

  1. ervice docker start

  2. chkconfig docker on

  3. #LCTT 译注:此处采用了旧式的 sysv 语法,如采用CentOS 7中支持的新式 systemd 语法,如下:

  4. systemctl start docker.service

  5. systemctl enable docker.service

使用Docker 中国加速器

  1. vi /etc/docker/daemon.json

  2. #添加后:

  3. {

  4.  "registry-mirrors": ["https://registry.docker-cn.com"],

  5.  "live-restore": true

  6. }

重新启动docker

  1. systemctl restart docker

输入 docker version 返回版本信息则安装正常。

安装JDK

  1. yum -y install java-1.8.0-openjdk*

配置环境变量 打开 vim /etc/profile 添加一下内容

  1. export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-0.b14.el7_4.x86_64

  2. export PATH=$PATH:$JAVA_HOME/bin

修改完成之后,使其生效

  1. source /etc/profile

输入 java -version 返回版本信息则安装正常。

安装MAVEN

下载: http://mirrors.shu.edu.cn/apache/maven/maven-3/3.5.2/binaries/apache-maven-3.5.2-bin.tar.gz

  1. ## 解压

  2. tar vxf apache-maven-3.5.2-bin.tar.gz

  3. ## 移动

  4. mv apache-maven-3.5.2 /usr/local/maven3

修改环境变量, 在 /etc/profile中添加以下几行

  1. MAVEN_HOME=/usr/local/maven3

  2. export MAVEN_HOME

  3. export PATH=${PATH}:${MAVEN_HOME}/bin

记得执行 source /etc/profile使环境变量生效。

输入 mvn -version 返回版本信息则安装正常。

这样整个构建环境就配置完成了。

使用 Docker 部署 Spring Boot 项目

将项目 spring-boot-docker 拷贝服务器中,进入项目路径下进行打包测试。

  1. #打包

  2. mvn package

  3. #启动

  4. java -jar target/spring-boot-docker-1.0.jar

看到 Spring Boot 的启动日志后表明环境配置没有问题,接下来我们使用 DockerFile 构建镜像。

  1. mvn package docker:build

第一次构建可能有点慢,当看到以下内容的时候表明构建成功:

  1. ...

  2. Step 1 : FROM openjdk:8-jdk-alpine

  3.  ---> 224765a6bdbe

  4. Step  2 : VOLUME /tmp

  5.  ---> Using cache

  6.  ---> b4e86cc8654e

  7. Step 3 : ADD spring-boot-docker-1.0.jar app.jar

  8.  ---> a20fe75963ab

  9. Removing intermediate container 593ee5e1ea51

  10. Step 4 : ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar /app.jar

  11.  ---> Running in 85d558a10cd4

  12.  ---> 7102f08b5e95

  13. Removing intermediate container 85d558a10cd4

  14. Successfully built 7102f08b5e95

  15. [INFO] Built springboot/spring-boot-docker

  16. [INFO] ------------------------------------------------------------------------

  17. [INFO] BUILD SUCCESS

  18. [INFO] ------------------------------------------------------------------------

  19. [INFO] Total time: 54.346 s

  20. [INFO] Finished at: 2018-03-13T16:20:15+08:00

  21. [INFO] Final Memory: 42M/182M

  22. [INFO] ------------------------------------------------------------------------

使用 docker images命令查看构建好的镜像:

  1. docker images

  2. REPOSITORY TAG IMAGE ID CREATED SIZE

  3. springboot/spring-boot-docker latest 99ce9468da74 6 seconds ago 117.5 MB

springboot/spring-boot-docker 就是我们构建好的镜像,下一步就是运行该镜像

  1. docker run -8080:8080 -t springboot/spring-boot-docker

启动完成之后我们使用 docker ps查看正在运行的镜像:

  1. docker ps

  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

  3. 049570da86a9 springboot/spring-boot-docker "java -Djava.security" 30 seconds ago Up 27 seconds 0.0.0.0:8080-> 8080/tcp determined_mahavira

可以看到我们构建的容器正在在运行,访问浏览器: http://192.168.0.x:8080/,返回

  1. Hello Docker!

说明使用 Docker 部署 Spring Boot 项目成功!

示例代码:https://github.com/ityouknow/spring-cloud-examples

END


寻找一千名铁杆读者


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/utgp650EmR
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/8922
 
663 次点击