我正在参与掘金创作者训练营第6期,点击了解活动详情
Docker简介
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用及依赖包到一个可移植的容器中,然后发布到任何Linux、Windows或者Mac操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
打包项目
我们先打包执行如下命令打包下Spring Boot项目:
mvn clean package
构建Docker镜像
使用Docker构建Spring Boot应用程序,首先我们需要创建一个Dockerfile文件(没有后缀)。
然后在项目根目录下创建一个Dockerfile文件,Dockerfile文件的内容如下:
FROM openjdk:8
VOLUME /tmp
ADD target/learn-springboot-docker.jar /learn-springboot-docker.jar
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/learn-springboot-docker.jar"]
下面对Dockerfile文件进行简单的说明。
第一行:使用openjdk:8作为基础镜像,指定jdk的版本。
第二行:临时文件目录。
第三行:learn-springboot-docker.jar是示例程序Jar包文件。
第四行:ENTRYPOINT用于指定容器启动时执行的命令,在容器启动时执行Jar文件。
接着,我们使用如下命令生成Docker镜像,构建的Docker镜像名称为test。
docker build -t test .
运行Docker镜像
执行Docker镜像只需要执行docker run命令即可,其中可以通过-d来指定后台运行,-p来指定容器内端口以及服务器端口,最后指定运行的镜像名称。完整运行Docker镜像的代码如下所示:
docker run -d -p 7409:7409 test
这里笔者指定的端口号为7409。
运行后,在浏览器地址栏输入项目访问地址http://localhost:7409/hello看到亲切的hello world就表示我们的项目部署成功了。
后记
笔者的Maven项目是多模块项目,learn-springboot-docker是项目中的一个模块,执行命令打包成功后,进入target目录,执行java -jar learn-springboot-docker.jar命令运行项目报错,错误信息如下:
xxx中没有主清单属性
解决办法
在子模块项目learn-springboot-docker的pom.xml文件中添加如下代码:
<build>
...省略其它代码
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
...省略其它代码
</build>