赞
踩
简介: Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口,用户可以方便地创建和使用容器,把自己的应用放入容器。本文将为大家介绍如何在 Docker 上部署 Spring Boot 项目。

作者:云天
镜像下载、域名解析、时间同步请点击 阿里巴巴开源镜像站
Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。
Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。
总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
Docker 的主要用途:
yum install docker
- service docker start
- chkconfig docker on
- #LCTT 译注:此处采用了旧式的 sysv 语法,如采用CentOS 7中支持的新式 systemd 语法,如下:
- systemctl start docker.service
- systemctl enable docker.service
- vi /etc/docker/daemon.json
- #添加后:
- {
- "registry-mirrors": ["https://registry.docker-cn.com"],
- "live-restore": true
- }
systemctl restart docker
输入 docker version 返回版本信息则安装正常。
docker version
yum -y install java-1.8.0-openjdk*
配置环境变量 打开 vim /etc/profile 添加以下内容
- export JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64
- export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
- export PATH=$PATH:$JAVA_HOME/bin
修改完成之后,使其生效
source /etc/profile
输入java -version 返回版本信息则安装正常。
java -version
下载:https://mirror.bit.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
解压
tar vxf apache-maven-3.6.3-bin.tar.gz
移动
mv apache-maven-3.6.3 /usr/local/maven3
修改环境变量, 在/etc/
- MAVEN_HOME=/usr/local/maven3
- export MAVEN_HOME
- export PATH=${PATH}:${MAVEN_HOME}/bin
执行source /etc/profile 使环境变量生效。
source /etc/profile
输入maven -version 返回版本信息则安装正常。
maven -version
- <?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.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>2.2.4.RELEASE</version>
- <relativePath/> <!-- lookup parent from repository -->
- </parent>
- <groupId>com.easy</groupId>
- <artifactId>spring-boot-docker</artifactId>
- <version>1.0</version>
- <packaging>jar</packaging>
- <name>spring-boot-docker</name>
- <description>Demo project for Spring Boot</description>
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <java.version>1.8</java.version>
- <docker.image.prefix>springboot</docker.image.prefix>
- </properties>
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- <!-- Docker maven plugin -->
- <plugin>
- <groupId>com.spotify</groupId>
- <artifactId>docker-maven-plugin</artifactId>
- <version>1.0.0</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>
- <!-- Docker maven plugin -->
- </plugins>
- </build>
- </project>

- FROM openjdk:8-jdk-alpine
- VOLUME /tmp
- EXPOSE 8282
- ADD spring-boot-docker-1.0.jar app.jar
- ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
Dockerfile 文件介绍,构建 Jdk 基础环境,添加 Spring Boot Jar 到镜像中:
DockerController.java
- @RestController
- public class DockerController {
- @RequestMapping("/")
- public String index() {
- return "Hello Docker!";
- }
- }
DockerApplication.java
- @SpringBootApplication
- public class DockerApplication {
- public static void main(String[] args) {
- SpringApplication.run(DockerApplication.class, args);
- }
- }
application.properties
server.port=8282
将项目 docker 拷贝至服务器中,进入项目路径下进行打包测试。
- #打包
- mvn package
- #启动
- java -jar target/spring-boot-docker-1.0.jar
看到 Spring Boot 的启动日志后表明环境配置没有问题,接下来我们使用 DockerFile 构建镜像。
mvn package docker:build
第一次构建可能有点慢,当看到以下内容的时候表明构建成功:
- Step 1/5 : FROM openjdk:8-jdk-alpine
- ---> a3562aa0b991
- Step 2/5 : VOLUME /tmp
- ---> Using cache
- ---> d070c927d0a7
- Step 3/5 : EXPOSE 8282
- ---> Using cache
- ---> b16d14267527
- Step 4/5 : ADD spring-boot-docker-1.0.jar app.jar
- ---> c4ddc409b458
- Removing intermediate container c58c986e6b9a
- Step 5/5 : ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar /app.jar
- ---> Running in d2b61fddd616
- ---> 13c600d3f625
- Removing intermediate container d2b61fddd616
- Successfully built 13c600d3f625
- [INFO] Built springboot/spring-boot-docker
- [INFO] ------------------------------------------------------------------------
- [INFO] BUILD SUCCESS
- [INFO] ------------------------------------------------------------------------
- [INFO] Total time: 7.273 s
- [INFO] Finished at: 2020-03-25T10:05:04+08:00
- [INFO] ------------------------------------------------------------------------

使用docker images命令查看构建好的镜像:
- # docker images
- REPOSITORY TAG IMAGE ID CREATED SIZE
- springboot/spring-boot-docker latest 13c600d3f625 18 minutes ago 122 MB
- docker.io/openjdk 8-jdk-alpine a3562aa0b991 10 months ago 105 MB
springboot/spring-boot-docker 就是我们构建好的镜像,下一步就是运行该镜像
docker run -p 8282:8282 -t springboot/spring-boot-docker
启动完成之后我们使用docker ps查看正在运行的镜像:
- # docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- a626c3dbdb1b springboot/spring-boot-docker "java -Djava.secur..." 34 seconds ago Up 34 seconds 0.0.0.0:8282->8282/tcp suspicious_murdock
可以看到我们构建的容器正在在运行,浏览器访问:http://192.168.0.x:8282/ ,页面出现“Hello Docker!” 说明使用 Docker 部署 Spring Boot 项目成功!
Hello Docker!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。