一、项目依赖二、引入docker依赖三、项目打包四、编写Dockerfile文件五、构建镜像六、启动容器七、测试
一、项目依赖本篇主题主要实战如何使用Docker部署springboot项目,那么首先保证服务器上已经安装完docker容器,如果尚未安装请移步《详解阿里云服务器安装docker》文章完成docker安装操作;以下直接搭建springboot项目;以下也是springboot项目中最基本的依赖项;因为我们想测试接口访问,故搭建的是一个web项目,那么我们提供一个controller层
controller类
@RestController
public class HelloDockerController {
@GetMapping("/hello")
public String hello() {
return "Hello Docker.";
}
}
pom.xml
二、引入docker依赖4.0.0 org.springframework.boot spring-boot-starter-parent 2.6.3 com.itwx docker-demo 0.0.1-SNAPSHOT docker-demo Demo project for Spring Boot 1.8 org.springframework.boot spring-boot-starter-web org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-maven-plugin org.projectlombok lombok
docker提供了maven构建的插件docker-maven-plugin,故pom.xml中
三、项目打包com.spotify docker-maven-plugin 1.2.0 itwx/${project.artifactId} java:8 ["java", "-jar", "/${project.build.finalName}.jar"] / ${project.build.directory} ${project.build.finalName}.jar
项目编译,打成Jar包
mvn clean # -Dmaven.test.skip=true 是跳过测试代码 mvn package -Dmaven.test.skip=true四、编写Dockerfile文件
springboot项目我们采用使用dockerfile文件的方式构建镜像,故需要创建dockerfile文件,内容如下:
FROM openjdk:8 # FROM: 基础镜像,基于jdk8镜像开始 COPY *.jar /app.jar # COPY: 将应用的配置文件也拷贝到镜像中。 CMD ["--server.port=8097"] EXPOSE 8080 # EXPOSE:声明端口 ENTRYPOINT ["java","-jar","/app.jar"] # ENTRYPOINT:docker启动时,运行的命令,这里容器启动时直接运行jar服务。
注意:
1、文件名一定别写错了,Dockerfile,非驼峰格式;
2、将项目jar包和Dockerfile文件上传到服务器;
3、Jar包和Dockerfile文件要在同一目录下;
命令:docker build -t docker-demo .
docker bulid 是打包命令-t 镜像加一个Tagdocker-demo 自定义的镜像名字. 小数点表示当前目录,即Dockerfile所在目录
等待镜像构建完成
[root@VM-4-8-centos project]# docker build -t docker-demo . Sending build context to Docker daemon 17.77MB Step 1/5 : FROM openjdk:8 8: Pulling from library/openjdk 0c6b8ff8c37e: Pull complete 412caad352a3: Pull complete e6d3e61f7a50: Pull complete 461bb1d8c517: Pull complete e442ee9d8dd9: Pull complete 36b5bcea956c: Pull complete 8ed70148ebcf: Pull complete Digest: sha256:208812d8c45e0f5cb51c35b143094bd28322bad83ec8e463a1cbe3c5a6308b1f Status: Downloaded newer image for openjdk:8 ---> 47482c603b2a Step 2/5 : COPY *.jar /app.jar ---> 843484f82093 Step 3/5 : CMD ["--server.port=8083"] ---> Running in 62d4bd1ddf75 Removing intermediate container 62d4bd1ddf75 ---> 9ef3ddc144fa Step 4/5 : EXPOSE 8080 ---> Running in e0e627838cc3 Removing intermediate container e0e627838cc3 ---> ac55c9edc15d Step 5/5 : ENTRYPOINT ["java","-jar","/app.jar"] ---> Running in 673eb2c738e2 Removing intermediate container 673eb2c738e2 ---> 4e0c81d17c49 Successfully built 034aca093b5e Successfully tagged docker-demo:latest 查看生成的镜像列表 [root@VM-4-8-centos project]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker-demo latest 034aca093b5e 16 minutes ago 544MB openjdk 8 47482c603b2a 2 weeks ago 526MB hello-world latest feb5d9fea6a5 5 months ago 13.3kB centos latest 5d0da3dc9764 5 months ago 231MB六、启动容器
命令:docker run -d -p 8097:8097 --name docker-demo-container docker-demo
-d 是后台运行-p 8097:8097 端口映射--name 定义容器名字docker-demo 以哪个镜像为基础运行容器
运行如下:
[root@VM-4-8-centos project]# docker run -d -p 8097:8097 --name docker-demo-container docker-demo b38019663d93a9917b842e89b59861ac9ce118c02c906f52e8025c30488a2336 查看容器 [root@VM-4-8-centos project]# docker ps ConTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8cdb27ca5858 docker-demo "java -jar /app.jar …" 4 minutes ago Up 4 minutes 0.0.0.0:8097->8097/tcp, :::8097->8097/tcp docker-demo-container 2abc9f2c0dde centos "/bin/bash" 46 hours ago Up 45 hours my_centos七、测试
[root@VM-4-8-centos project]# curl localhost:8097/hello
结果如下:



