一. 应用场景
假设现在我们有一个单独的基于Spring Boot开发的应用,如何将其部署到Docker容器上,并能正确的访问到呢?这里有两种方式:
- 使用Maven插件(docker-maven-plugin)将Spring Boot应用打包为Docker Image,并上传到私有镜像仓库Docker Registry
- 使用Dockerfile为Spring Boot应用构建Docker Image
其中,第1种方式需要依赖自建的Registry镜像仓库,而第2种方式不需要依赖自建的镜像仓库,只需要应用的jar包和一个Dockerfile文件即可。
二. 撸起袖子就是干
-
在src/main目录下新建docker/Dockerfile文件
-
编写Dockfile
# 该镜像需要依赖的基础镜像
FROM java:8
# 将当前目录下的jar包复制到docker容器的/目录下
ADD spring-boot-study-0.0.1-SNAPSHOT.jar /spring-boot-study.jar
# 在容器构建过程中创建一个spring-boot-study.jar文件,可以用该命令自定义容器的行为,比如安装一些软件,创建一些文件等
RUN bash -c 'touch /spring-boot-study.jar'
# 声明服务运行在9527端口(只声明不会打开端口)
EXPOSE 9527
# 指定docker容器启动时运行jar包
ENTRYPOINT ["java", "-jar","/spring-boot-study.jar"]
# 指定维护者的名字
MAINTAINER wanghong
- Maven打包应用
在项目根目录下,即pom.xml文件所在的目录,执行以下命令:
mvn clean package -P dev
或者在IDEA中直接双击 package命令:
- 将应用jar包及Dockerfile文件上传到Linux服务器
- 在Linux上构建docker镜像
在Dockerfile所在目录执行以下命令:
# -t 表示指定镜像仓库名称/镜像名称:镜像标签 .表示使用当前目录下的Dockerfile
docker build -t hong/spring-boot-study:0.0.1-SNAPSHOT .
- 运行应用
docker run -p 9527:9527 --name spring-boot-study hong/spring-boot-study:0.0.1-SNAPSHOT
- 查看所有的容器
- 如果中途有出错,删除镜像和容器
docker rmi -f 镜像ID
docker rm 容器ID
- 访问服务