Docker 已经成为新一代的云计算技术,而且可以看到他们的发展态势非常迅猛。Docker作为一门杀手级应用,它的特点有:
在实际的应用场景中,我们会把自己的Spring Boot应用程序使用Docker部署到类似于阿里云这种云原生平台上。今天,就让我们来学习一下如何将Spring Boot应用打包成Docker镜像文件。
这里需要注意的是,RUN时是运行安装时会执行的命令,也就是用于指定 docker build 过程中要运行的命令。CMD 和 ENTRYPOINT 会在docker run 时运行。
在Dockerfile中,只能有一个ENTRYPOINT指令,如果有多个ENTRYPOINT指令则以最后一个为准。
在Dockerfile中,只能有一个CMD指令,如果有多个CMD指令则以最后一个为准。
在Dockerfile中,ENTRYPOINT指令或CMD指令,至少必有其一。
FROM java:8 MAINTAINER fwt"HunterQiu" EXPOSE80# 设置时区 RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime&&echo'Asia/Shanghai'>/etc/timezone ARG JAR_FILE ADD target/${JAR_FILE} /workspace/myshop.jar WORKDIR /workspace ENTRYPOINT["java","-jar","myshop.jar"]
之前在查看日志发现阿里云ECM服务器和自己打包的Docker容器两者之间的时间相差了八个小时!
宿主机采用了CST时区,CST应该是指(China Shanghai Time,东八区时间)
容器采用了UTC时区,UTC应该是指(Coordinated Universal Time,标准时间)
所以在Docker Build的阶段就把时区改正过来。
Dockerfile放在项目的根目录,如下:
<plugin><groupId>com.spotifygroupId><artifactId>dockerfile-maven-pluginartifactId><version>${dockerfile-maven-version}version><executions><execution><id>defaultid><goals><goal>buildgoal><goal>pushgoal>goals>execution>executions><configuration><repository>${docker.image.prefix}/${project.artifactId}repository><tag>${project.version}tag><buildArgs><JAR_FILE>${project.build.finalName}.jarJAR_FILE>buildArgs>configuration>plugin>
[root@hunteraliyun shop]# ll total 44-rw-r--r-- 1 root root 265 Jul 15 00:52 Dockerfile drwxr-xr-x 2 root root 4096 Jul 12 01:27 logs-rw-r--r-- 1 root root 10070 Jun 30 17:44 mvnw-rw-r--r-- 1 root root 6608 Jun 30 17:44 mvnw.cmd-rw-r--r-- 1 root root 6515 Jul 15 00:52 pom.xml drwxr-xr-x 4 root root 4096 Jun 30 17:44 src drwxr-xr-x 9 root root 4096 Jul 12 01:27 target[root@hunteraliyun shop]# mvn clean package -Dmaven.test.skip=true
看到build成功的信息:
[INFO] Successfully built 44002908890c[INFO] Successfully tagged myshop/justice-league-shopping:0.0.3-SNAPSHOT[INFO][INFO] Detected build of image withid 44002908890c[INFO] Building jar: /home/hunter/projects/shop/target/justice-league-shopping-0.0.3-SNAPSHOT-docker-info.jar[INFO] Successfully built myshop/justice-league-shopping:0.0.3-SNAPSHOT[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time:26.243 s[INFO] Finished at:2021-07-15T01:16:54+08:00[INFO] ------------------------------------------------------------------------
检查结果
检查docker镜像是否已经创建:
[root@hunteraliyun shop]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE myshop/justice-league-shopping0.0.3-SNAPSHOT 44002908890c3 minutes ago 692MB
$ docker login --username=hunter registry.cn-shenzhen.aliyuncs.com $ docker tag[ImageId] registry.cn-shenzhen.aliyuncs.com/hunter_qiu/docker-factory:[镜像版本号] $ docker push registry.cn-shenzhen.aliyuncs.com/hunter_qiu/docker-factory:[镜像版本号]
镜像被推送到阿里云的私有docker仓库,镜像名字会有要求,镜像名字应为[服务器域名]/[命名空间]/[仓库名称]:[镜像版本号]。因此需要用tag去改镜像名称, 如果名字不符合格式规范,推送会报错。