在工作中部署项目貌似是运维人员的工作,很多开发者并不是很关注这方面,但现在在很多的IT互联网公司的实际开发中,其实开发和测试、运维的边界是会越来越小的,甚至会融为一体,你开发的项目往往需要你来测试,部署之后线上出了问题还是需要自己负责去维护,排查bug等,所以说运维更是开发人员中非常重要的一部分。

第一步:将SpringBoot项目打成jar包

利用idea的maven工具
常见的两种方式:

  1. 先点击clean,再点击package
  2. 先点击clean,再点击install

SpringBoot项目制作Dockerfile镜像部署_spring

  • clean,清理,在进行真正的构建之前进行一些清理工作,移除所有上一次构建生成的文件。执行该命令会删除项目路径下的target文件,但是不会删除本地的maven仓库已经生成的jar文件。
  • validate,验证,验证工程是否正确,所需的信息是否完整。
  • compile,编译源码,编译生成class文件,编译命令,只编译选定的目标,不管之前是否已经编译过,会在你的项目路径下生成一个target目录,在该目录中包含一个classes文件夹,里面全是生成的class文件及字节码文件。
  • test,单元测试,测试。
  • package,打包,将工程文件打包为指定的格式,例如JAR,WAR等。这个命令会在你的项目路径下一个target目录,并且拥有compile命令的功能进行编译,同时会在target目录下生成项目的jar/war文件。如果a项目依赖于b项目,打包b项目时,只会打包到b项目下target下,编译a项目时就会报错,因为找不到所依赖的b项目,说明a项目在本地仓库是没有找到它所依赖的b项目,这时就用到install命令了
  • verify,核实,检查package是否有效、符合标准。
  • install,安装至本地仓库,将包安装至本地仓库,以让其它项目依赖。该命令包含了package命令功能,不但会在项目路径下生成class文件和jar包,同时会在你的本地maven仓库生成jar文件,供其他项目使用(如果没有设置过maven本地仓库,一般在用户/.m2目录下。如果a项目依赖于b项目,那么install b项目时,会在本地仓库同时生成pom文件和jar文件,解决了上面打包package出错的问题)
  • build:功能类似compile,只是只对整个项目进行编译。
  • site,站点,生成项目的站点文档
  • deploy,复制到远程仓库

利用第一种方式后,在 target 包下会生成一个 jar 包

SpringBoot项目制作Dockerfile镜像部署_spring_02

第二步:编写 Dockerfile 文件,保存名为Dockerfile

FROM java:8
VOLUME /tmp
ADD springboot-mybatis-0.0.1-SNAPSHOT.jar springboot-mybatis.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/springboot-mybatis.jar"]
  • FROM :表示使用 Jdk8 环境 为基础镜像,如果镜像不是本地的会从 DockerHub 进行下载
  • VOLUME :VOLUME 指向了一个/tmp的目录,由于 Spring Boot 使用内置的Tomcat容器,Tomcat 默认使用/tmp作为工作目录。这个命令的效果是:在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
  • ADD :拷贝文件并且重命名
  • ENTRYPOINT :为了缩短 Tomcat 的启动时间,添加java.security.egd的系统属性指向/dev/urandom作为 ENTRYPOINT

第三步:将 jar 包和 Dockerfile 通过FTP上传到服务器

1. 在 /usr/local/src/ 建立一个 dev 文件夹,在 dev 文件夹 建立一个 docker 文件夹

mkdir dev
mkdir docker

2. 通过FTP 将 jar 包和 Dockerfile 上传到 docker 文件夹里面(放到同级目录)

SpringBoot项目制作Dockerfile镜像部署_spring_03

3. 进入docker 文件夹

cd /usr/local/src/dev/docker/

查看 docker 文件夹的 文件

ls

SpringBoot项目制作Dockerfile镜像部署_spring_04

4. 构建 docker 镜像,注意后面还有一个点

docker build -t springboot-mybatis .

SpringBoot项目制作Dockerfile镜像部署_spring_05

5. 查看镜像,可以看到springboot-mybatis镜像和拉取的jdk8镜像

docker images

SpringBoot项目制作Dockerfile镜像部署_spring_06

6. 运行构建好的springboot-mybatis镜像

docker run -d -p 8080:8080 --name springboot-mybatis springboot-mybatis

SpringBoot项目制作Dockerfile镜像部署_spring_07

7. 查看正在运行的容器,可以看到springboot-mybatis容器已经运行起来了

docker ps

SpringBoot项目制作Dockerfile镜像部署_spring_08

8. 访问项目:http://115.29.149.49:8080/swagger-ui.html

SpringBoot项目制作Dockerfile镜像部署_spring_09