更新时间:2020-09-07 13:44
在将应用工程打包成 Docker 镜像的方法上,SOFABoot 完全与 SpringBoot 一致。本篇将基于 SpringBoot 官方提供的文档教您如何将一个 SOFABoot 的示例应用工程制作成 Docker镜像。
在运行示例工程之前请先安装 Docker 环境,具体操作请参见 Docker 官方文档。
注意:在后面打包过程中,如果是 Mac OS ,会出现连接问题,解决方案请参见 Docker 在 Mac 下的 2375 端口问题 。
本教程将教您如何使用 Dockerfile 将一个 SOFABoot 示例应用的 JAR 包打包成镜像。
Docker 提供了 Dockerfile 格式的文件来构建应用镜像,现在开始创建一个 Spring Boot 应用的 Dockerfile:
FROM openjdk:8-jdk-alpine
VOLUME /tmp
// 应用 JAR 包的名称必须遵循 artifactId-version 的格式
COPY sofaboot-docker-demo-web-1.0.0.jar /app.jar
ENV JAVA_OPTS=""
# 商业版SOFAStack中间件需要输入四元组进行服务端注册鉴权,可以按照以下约定,在进行容器化发布时以环境变量方式注入。详见 服务网格的 [快速入门](https://help.aliyun.com/document_detail/137639.html "快速入门")。
# COM_ALIPAY_ENV=shared
# ENV COM_ALIPAY_INSTANCEID=
# ENV COM_ANTCLOUD_ANTVIP_ENDPOINT=
# ENV COM_ANTCLOUD_MW_ACCESS=
# ENV COM_ANTCLOUD_MW_SECRET=
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
java:8
是指 Docker Hub上官方提供的 Java 镜像,版本号是 8,也就是 JDK 1.8。有了这个基础镜像后,Dockerfile 可以通过 FROM
指令直接获取它的状态——也就是在容器中,Java是已经安装的。接下来,通过自定义的命令来运行 Spring Boot 应用:
VOLUME /tmp
创建 /tmp 目录并持久化到Docker数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用 /tmp 作为工作目录。COPY sofaboot-docker-demo-web-1.0.0.jar /app.jar
将应用 JAR 包复制到/app.jar
。ENTRYPOINT
表示容器运行后默认执行的命令。在 app/web 模块的 pom 文件中添加 docker maven 的打包插件:
说明:仔细检查本地镜像打包配置,如发现存在
outputDirectory
和classifier
配置,需注释掉或移除该配置。
<!-- Docker maven plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<imageName>${project.groupId}/${project.artifactId}:${project.version}</imageName>
<!-- Dockerfiler 的文件目录位置-->
<dockerDirectory>src/main/resources/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
在工程模块下执行 mvn clean install -DskipTests
,安装模块。
切换到 web 模块,打包镜像:
- cd app/web
- mvn package docker:build -Dmaven.test.skip
打包日志如下所示:
Step 1/6 : FROM openjdk:8-jdk-alpine
---> 3675b9f543c5
Step 2/6 : VOLUME /tmp
---> Using cache
---> c7a81ace946a
Step 3/6 : COPY sofaboot-docker-demo-web-1.0.0.jar app.jar
---> f24e191bc980
Step 4/6 : RUN sh -c 'touch /app.jar'
---> Running in 777a918b3314
Removing intermediate container 777a918b3314
---> 183a3067e911
Step 5/6 : ENV JAVA_OPTS=""
---> Running in 70c238ef5b5b
Removing intermediate container 70c238ef5b5b
---> a155e72ed7fc
Step 6/6 : ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
---> Running in c53eaccaf58f
Removing intermediate container c53eaccaf58f
---> 57bb9c53cfe6
ProgressMessage{id=null, status=null, stream=null, error=null, progress=null, progressDetail=null}
Successfully built 57bb9c53cfe6
Successfully tagged com.alipay.sofa/sofaboot-docker-demo-web:1.0.0
通过 docker images
命令查看当前镜像文件:
- docker images
显示结果:
REPOSITORY TAG IMAGE ID CREATED SIZE
com.alipay.sofa/sofaboot-docker-demo-web 1.0.0 57bb9c53cfe6 About a minute ago 105MB
在文档使用中是否遇到以下问题
更多建议
匿名提交