之前部署过python、go应用,就是没部署过Java应用,所以一直不清楚该如何去部署一个Java应用(比如说Spring Boot应用)
现在刚好要用到,尝试了一波,以下是我部署Spring Boot应用的方法:
使用的工具
- SpringBoot
- Maven包管理工具
- docker
- docker-compose(依赖于docker,是docker的一个工具)
之前一直以为,用docker跑一定要跑全过程(意味着编译、运行都在docker里),后来没想出啥办法,就直接先手动编译成jar,在docker里跑JVM。这让我想到和python的不同之处:jvm是一个完整的环境,可以直接跑一个jar文件,而python需要下载安装各种依赖才能跑,没有编译过程,自然需要在docker里进行所有步骤。猜测像这种编译型的应用,都应该先编译,然后直接放到docker里跑。
步入正题
服务器 Ubuntu 16.04
-
安装工具
首先安装docker,docker最新版安装步骤直接看官网
直接用apt-get安装
apt-get install maven docker-compose openjdk-8-jdk openjdk-8-jdk-headless
-
编译
下面的步骤maven会提示你设置JAVA_HOME,但其实只要安装完上面的内容,运行java和javac不会显示command not found
就行了(一般用apt-get安装后的jdk目录是/usr/lib/jvm/openjdk-8)
进入项目目录mvn package
如果一切顺利会在项目目录下的target目录下生成
项目名--0.0.1-SNAPSHOT.jar
的jar文件,这就是已经编译好的Java应用程序了 -
docker-compose部署
- 在项目目录下创建docker-compose.yml文件
version: '2' services: tasklist: restart: always build: context: . dockerfile: Dockerfile volumes: - .:/code ports: - "6789:6789"
- 在项目目录下创建Dockerfile文件
FROM openjdk:8-jdk COPY ./target/application-0.0.1-SNAPSHOT.jar /usr/local ENTRYPOINT ["java", "-jar", "/usr/local/application-0.0.1-SNAPSHOT.jar"]
- 构建镜像、创建容器并运行
docker-compose up
- 在项目目录下创建docker-compose.yml文件