Docker部署Spring|Docker部署Spring Boot
Docker技术的发展给微服务的部署带来了很大的便利,本文简单介绍一下使用Docker部署Spring Boot项目。
一、构建一个简单的Spring Boot项目
- 启动类
@SpringBootApplication
public class DemoApplication {
@RestController
public class HelloSimonController{
@RequestMapping("/hello")
public String hello(){
return "hello simon";
}
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
- pom依赖
4.0.0 com.simon
demo
0.0.1-SNAPSHOT jardemo
Demo project for Spring Boot org.springframework.boot
spring-boot-starter-parent
2.0.4.RELEASE
UTF-8UTF-8
1.8
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
启动这个demo,浏览器访问
http://localhost:8080/hello
,返回 “hello simon”,接口正常。二、添加Docker支持
- 添加Docker构建插件
com.spotify docker-maven-plugin1.0.0 simon/${project.artifactId}:${project.version} src/main/docker / ${project.build.directory} ${project.build.finalName}.jar
简要说明插件配置:
- imageName:用于指定镜像名称,其中
simon
是仓库名称,${project.artifactId}
是镜像名称,${project.version}
是标签名称; - resources.resource.directory:用于指定需要复制的文件,
${project.build.directory}
表示target目录; - resources.resource.include:用于指定需要复制的文件。
${project.build.finalName}.jar
指的是打包后的jar
- imageName:用于指定镜像名称,其中
- 在目录src/main/docker下创建 Dockerfile 文件,Dockerfile 文件用来说明如何来构建镜像
FROM openjdk:8-jdk-alpine VOLUME /tmp ADD demo-0.0.1-SNAPSHOT.jar app.jar ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.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
- 构建镜像
进入demo项目的根目录,执行下面的命令
$ mvn package docker:build
- 查看是否构建成功
$ docker images
[root@simon demo]# docker images
REPOSITORYTAGIMAGE IDCREATEDSIZE
ibase/demo0.0.1-SNAPSHOT639e4a6f043d6 seconds ago119MB
ibase/feign_upload_first0.0.1-SNAPSHOT3f8c202e53e738 minutes ago119MB
openjdk8-jdk-alpine5801f7d008e56 weeks ago103MB
ibase/demo
就是构建的镜像- 运行镜像
$ docker run -p 8080:8080 -t ibase/demo:0.0.1-SNAPSHOT
- 查看正在运行的镜像
$ docker ps
CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES
24a8d8d5b309ibase/demo:0.0.1-SNAPSHOT"java -Djava.secur..."26 minutes agoUp 26 minutes0.0.0.0:8080->8080/tcpadoring_johnson
- 访问项目
浏览器访问http://localhost:8080/hello
,返回hello simon
,部署成功。
- 【Docker部署Spring|Docker部署Spring Boot】停止实例
$ docker stop adoring_johnson
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- Activiti(一)SpringBoot2集成Activiti6
- SpringBoot调用公共模块的自定义注解失效的解决
- 解决SpringBoot引用别的模块无法注入的问题
- Beego打包部署到Linux
- 私有化轻量级持续集成部署方案--03-部署web服务(下)
- 2018-07-09|2018-07-09 Spring 的DBCP,c3p0
- spring|spring boot项目启动websocket
- Spring|Spring Boot 整合 Activiti6.0.0
- Spring集成|Spring集成 Mina