5docker打包Springboot · SpringCloud微服务实战 · 看云

导航


本节代码地址


本节我们来讨论怎么利用docker 来打包一个我们自己的镜像文件,本节主要打包一个SpringBoot应用的镜像。

1. 创建新应用

为了演示方便,我们单独建立一个模块来演示docker打包镜像。
f45fc8d38c8500e8e754a238bc7d3351_MD5.webp

1.1. maven 配置

本节我们只需要提供一个对外接口的demo,因此只需要引入spring-boot-starter-web即可。

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

1.2. 应用配置

这里仅仅配置一下端口,不需要特殊的配置

server:
  port: 8901

1.3. 控制层demo

这里我们仅仅需要设置一个对外的demo接口


@RestController
public class DemoController {

    
    @GetMapping("/hello")
    public String hello(){
        return "hello,World";
    }

}

1.4. 设置启动类

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

到此,一个demo已经搭建好了,下面我们需要构建自己的镜像了。

2. Docker 构建

构建镜像的前提是我们需要先将应用打包,同时还需要先安装Docker

2.1 应用打包

通过输入以下maven命令打包

mvn clean install 或 mvn package

b2e54b6302c48f9599665a085b687d68_MD5.png

2.2 传递包到服务器

创建demo应用目录

mkdir -p /fwcloud/fw-cloud-docker

将Dockerfile文件上传到/fwcloud/fw-cloud-docker目录
笔者使用的是secuerFX
e19231f773735d534d6ae5168c166a3b_MD5.png

Dockerfile 内容如下

FROM openjdk:8u212-jre
MAINTAINER xuyisu 727517292@qq.com

COPY fw-cloud-docker-1.0-SNAPSHOT.jar /fwcloud/fw-cloud-docker-1.0-SNAPSHOT.jar

ENTRYPOINT ["java", "-Xmx256m", "-jar", "/fwcloud/fw-cloud-docker-1.0-SNAPSHOT.jar"]

上面4条脚本命令含义:

  1. FROM openjdk:8u212-jre表示由openjdk:8u212-jre基础镜像构建。因为我们的项目使用的是JDK 1.8,所以我们要依赖于1.8版本的JDK镜像构建,openjdk官方Docker镜像仓库为https://hub.docker.com/_/openjdk?tab=tags
  2. MAINTAINER xuyisu 727517292@qq.com指定镜像的作者及联系方式
  3. COPY fw-cloud-docker-1.0-SNAPSHOT.jar /fwcloud/fw-cloud-docker-1.0-SNAPSHOT.jar表示将当前目录(/fwcloud/fw-cloud-docker)下的fw-cloud-docker-1.0-SNAPSHOT.jar拷贝到openjdk:8u212-jre镜像里的/fwcloud目录下,名称也为fw-cloud-docker-1.0-SNAPSHOT.jar
  4. ENTRYPOINT ["java", "-Xmx256m", "-jar", "/fwcloud/fw-cloud-docker-1.0-SNAPSHOT.jar"]表示运行java -jar运行镜像里的jar包,JVM内存最大分配为256m(因为只是一个demo,所以内存分配小了点,实际应用可以根据自身需求和宿主服务器的配置做出相应调整)

2.3 进入引用目录构建镜像

进入目录

cd /fwcloud/fw-cloud-docker

通过如下命令
fw-cloud-docker是我们制定的镜像名字

docker build -t fw-cloud-docker .

构建结果如下

[root@VM_0_4_centos fw-cloud-docker]# docker build -t fw-cloud-docker .
Sending build context to Docker daemon  20.94MB
Step 1/4 : FROM openjdk:8u212-jre
8u212-jre: Pulling from library/openjdk
a4d8138d0f6b: Pull complete 
dbdc36973392: Pull complete 
f59d6d019dd5: Pull complete 
5fee445fce94: Pull complete 
d270185e6f4d: Pull complete 
0ca0b0a3fc43: Pull complete 
Digest: sha256:11cbb99bc937a7cf5735857d418f98a9287b627f2caa01925f9ec677ad6c7abe
Status: Downloaded newer image for openjdk:8u212-jre
 ---> 0fc98012d4a8
Step 2/4 : MAINTAINER xuyisu 727517292@qq.com
 ---> Running in 75b03fa3b058
Removing intermediate container 75b03fa3b058
 ---> c04637f8c6ff
Step 3/4 : COPY ./target/fw-cloud-docker-1.0-SNAPSHOT.jar /fwcloud/fw-cloud-docker-1.0-SNAPSHOT.jar
COPY failed: stat /var/lib/docker/tmp/docker-builder167451748/target/fw-cloud-docker-1.0-SNAPSHOT.jar: no such file or directory
[root@VM_0_4_centos fw-cloud-docker]# docker build -t fw-cloud-docker .
Sending build context to Docker daemon  20.94MB
Step 1/4 : FROM openjdk:8u212-jre
 ---> 0fc98012d4a8
Step 2/4 : MAINTAINER xuyisu 727517292@qq.com
 ---> Using cache
 ---> c04637f8c6ff
Step 3/4 : COPY fw-cloud-docker-1.0-SNAPSHOT.jar /fwcloud/fw-cloud-docker-1.0-SNAPSHOT.jar
 ---> ce3cd2caf980
Step 4/4 : ENTRYPOINT ["java", "-Xmx256m", "-jar", "/fwcloud/fw-cloud-docker-1.0-SNAPSHOT.jar"]
 ---> Running in 124162c29864
Removing intermediate container 124162c29864
 ---> 2919332fb2ac
Successfully built 2919332fb2ac
Successfully tagged fw-cloud-docker:latest

通过docker images可以查看自己构建的镜像

2.4 Docker启动应用

左数第一个端口是对外端口,第二个端口是docker内部通信端口,fw-cloud-docker是镜像的名字

docker run -p 8901:8901 fw-cloud-docker

2.5 测试

浏览器或Postman 输入http://服务器IP:8901/hello可以看到如下结果
3d1944827eeaeca861601155824776b7_MD5.png