SpringBoot使用dockerfile生成镜像

简介: SpringBoot使用dockerfile生成镜像

什么是 Dockerfile?

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

构建镜像 默认使用当前目录下的dockerfile文件

$ docker build -t nginx:v3 .

  • -t 指明镜像名称及版本

上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。

解析:由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。这就需要把我们本机的指定目录下的文件一起打包提供给 docker 引擎使用。

如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。

注意:上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。

创建一个springBoot项目

加入maven插件

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <executions>
    <execution>
      <goals>
        <!-- 重新打包,否则报没有main方法 -->
        <goal>repackage</goal>
      </goals>
    </execution>
  </executions>
</plugin>

简单示例

@RestController
@SpringBootApplication
public class DockerApplication {

  public static void main (String[] args) {
    SpringApplication.run(DockerApplication.class,args);
  }

  @GetMapping("/")
  public String index(){
    return "Hello docker. "+ System.currentTimeMillis();
  }
}

创建dockerfile文件

# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER rubble rubble@qq.com
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为app.jar
ADD paw-docker-1.0-SNAPSHOT.jar app.jar
# 运行jar包 前面的add命令把jar复制过去,后面touch命令的作用是修改这个文件的访问时间和修改时间为当前时间。
RUN bash -c 'touch /app.jar'
# 指定加密算法urandom
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

ENTRYPOINT

格式:ENTRYPOINT ["","","",...]

类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。

但是, 如果运行 docker run 时使用了 --entrypoint 选项,将覆盖 CMD 指令指定的程序。

优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。

注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。

生成镜像

spring项目打包后将jar包复制到dockerfile同目录下

docker build -t hello:1.0 .

首次运行会下载java8镜像

rubble@RubbledeMacBook-Pro docker % docker build -t hello:1.0 .
[+] Building 2.0s (8/8) FINISHED                                                                                                                                                                       
 => [internal] load build definition from Dockerfile                                                                                                                                              0.0s
 => => transferring dockerfile: 37B                                                                                                                                                               0.0s
 => [internal] load .dockerignore                                                                                                                                                                 0.0s
 => => transferring context: 2B                                                                                                                                                                   0.0s
 => [internal] load metadata for docker.io/library/java:8                                                                                                                                         1.8s
 => [internal] load build context                                                                                                                                                                 0.0s
 => => transferring context: 51B                                                                                                                                                                  0.0s
 => [1/3] FROM docker.io/library/java:8@sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d                                                                                   0.0s
 => CACHED [2/3] ADD paw-docker-1.0-SNAPSHOT.jar app.jar                                                                                                                                          0.0s
 => CACHED [3/3] RUN bash -c 'touch /app.jar'                                                                                                                                                     0.0s
 => exporting to image                                                                                                                                                                            0.0s
 => => exporting layers                                                                                                                                                                           0.0s
 => => writing image sha256:97b7ccbbd48180f71ebb2fbb8661b5c33526779baa2bbc0aa7d460857380aae1                                                                                                      0.0s
 => => naming to docker.io/library/hello:1.0                                                                                                                                                      0.0s

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them

docker images 查看镜像

$ docker images
REPOSITORY                     TAG                                                     IMAGE ID       CREATED          SIZE
hello                          1.0                                                     97b7ccbbd481   31 minutes ago   678MB
wurstmeister/kafka             2.12-2.5.0                                              3f924079abc7   8 weeks ago      500MB
wurstmeister/kafka             latest                                                  c3b059ede60e   8 weeks ago      507MB

启动容器

docker run --name hello -p 8080:8080 hello:1.0

本机浏览器访问 http://localhost:8080/

输出: Hello docker. 1628154691827

生成docker镜像后可以推送到阿里镜像仓库或者镜像私服harbor,微服务集群使用时拉取镜像运行容器即可启动一个服务节点。

相关文章
|
7月前
|
Java
dockerfile打包阿里云镜像 springboot实战项目(阿里云镜像仓失败 处理)
dockerfile打包阿里云镜像 springboot实战项目(阿里云镜像仓失败 处理)
|
Java
阿里云镜像快速构建springboot
阿里云镜像快速构建springboot
926 0
|
Java Linux Maven
IDEA集成Docker构建SpringBoot镜像上传服务器
IDEA集成Docker构建SpringBoot镜像上传服务器
IDEA集成Docker构建SpringBoot镜像上传服务器
|
2月前
|
Java Docker 微服务
SpringBoot微服务打包Docker镜像
SpringBoot微服务打包Docker镜像
76 11
|
6月前
|
Java Docker 容器
使用 Spring Boot 构建 Docker 镜像并进行多模式部署
使用 Spring Boot 构建 Docker 镜像并进行多模式部署
275 2
|
7月前
|
Java Maven Docker
SpringBoot项目打包部署到阿里云服务器、通过Maven插件制作Docker镜像、部署项目容器、配置生产环境
SpringBoot项目打包部署到阿里云服务器、通过Maven插件制作Docker镜像、部署项目容器、配置生产环境
693 0
|
Java Linux Docker
docker制作springboot镜像
以下步骤在具有Docker环境的Linux机器上操作。 1. 把springboot-1.0.0.jar放到/usr/local/springboot目录下,并在该目录下创建Dockerfile文件,内容为:
|
Kubernetes Java 开发者
SpringBoot-2.3镜像方案为什么要做多个layer
通过图文,对java开发者解释docker镜像layer带来的好处
SpringBoot-2.3镜像方案为什么要做多个layer
|
Java 编译器 Docker
Docker学习重点(9)~SpringBoot微服务打包成Docker镜像
Docker学习重点(9)~SpringBoot微服务打包成Docker镜像
117 0
|
Kubernetes Java Devops
详解SpringBoot(2.3)应用制作Docker镜像(官方方案)
学习SpringBoot官方镜像方案的细节
584 0
详解SpringBoot(2.3)应用制作Docker镜像(官方方案)