5docker打包Springboot · SpringCloud微服务实战 · 看云
导航
本节代码地址
本节我们来讨论怎么利用docker 来打包一个我们自己的镜像文件,本节主要打包一个SpringBoot应用的镜像。
1. 创建新应用
为了演示方便,我们单独建立一个模块来演示docker打包镜像。
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
2.2 传递包到服务器
创建demo应用目录
mkdir -p /fwcloud/fw-cloud-docker
将Dockerfile文件上传到/fwcloud/fw-cloud-docker目录
笔者使用的是secuerFX
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条脚本命令含义:
FROM openjdk:8u212-jre表示由openjdk:8u212-jre基础镜像构建。因为我们的项目使用的是JDK 1.8,所以我们要依赖于1.8版本的JDK镜像构建,openjdk官方Docker镜像仓库为https://hub.docker.com/_/openjdk?tab=tagsMAINTAINER xuyisu 727517292@qq.com指定镜像的作者及联系方式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.jarENTRYPOINT ["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可以看到如下结果



