使用Docker部署Spring boot项目

  • Post author:
  • Post category:其他


使用Docker部署Spring boot项目

一、前提条件

1.有一个Spring boot项目

springboot工程

编译打包(mvn package)后在工程target目录下生成文件springBootDocker.jar

项目源码:

maven打包的jar包:

2. 一台装有Docker的Linux主机和一台Docker Registry(Harbor)

(安装步骤略)

二、用Docker打包镜像并发布

1. 编写Dockerfile文件,创建文件名为Dockerfile的文本文件,内容如下:


FROM java:8


VOLUME /tmp


COPY springBootDocker.jar app.jar


RUN bash -c “touch /app.jar”


EXPOSE 8080


ENTRYPOINT [“java”, “-jar”, “app.jar”, “–spring.profiles.active=test”, “–server.port=8080”, “> /log/app.log”]

解释:

java:8是指Docker Hub上官方提供的java镜像,版本号是8也就是jdk1.8,有了这个基础镜像后,Dockerfile可以通过FROM指令直接获取它的状态——也就是在容器中java是已经安装的,接下来通过自定义的命令来运行Spring Boot应用:

VOLUME指向了一个/tmp的目录,由于Spring Boot使用内置的Tomcat容器,Tomcat默认使用/tmp作为工作目录。效果就是在主机的/var/lib/docker目录下创建了一个临时文件,并连接到容器的/tmp。

将项目的jar文件作为app.jar添加到容器

RUN表示在新创建的镜像中执行一些命令,然后把执行的结果提交到当前镜像。这里使用touch命令来改变文件的修改时间,Docker创建的所有容器文件默认状态都是“未修改”。这对于简单应用来说不需要,不过对于一些静态内容(比如:index.html)的文件就需要一个“修改时间”。

EXPOSE 容器暴露端口

ENTRYPOINT 应用启动命令 参数设定

2. 上传文件Dockerfile和springBootDocker.jar到服务器的同一目录下


[root@localhost img_springboot]# ll


总用量 15864


-rw-r–r–. 1 root root 210 10月 22 15:06 Dockerfile


-rw-r–r–. 1 root root 16237220 10月 22 15:05 springBootDocker.jar

3. 将jar打包为镜像(docker build -t boot-docker .)


[root@localhost img_springboot]# docker build -t spring-boot-docker .


Sending build context to Docker daemon 16.24MB


Step 1/6 : FROM java:8


—> d23bdf5b1b1b


Step 2/6 : VOLUME /tmp


—> Using cache


—> a6f308f55c0c


Step 3/6 : COPY springBootDocker.jar app.jar


—> 155a71904ce8


Step 4/6 : RUN bash -c “touch /app.jar”


—> Running in 03131cf1eda9


Removing intermediate container 03131cf1eda9


—> 00d91e7e9aff


Step 5/6 : EXPOSE 8080


—> Running in 390fbf54f1d4


Removing intermediate container 390fbf54f1d4


—> ae18996023c4


Step 6/6 : ENTRYPOINT [“java”, “-jar”, “app.jar”, “–spring.profiles.active=test”, “–server.port=8080”, “> /log/app.log”]


—> Running in daed8e8d2177


Removing intermediate container daed8e8d2177


—> 1d978ac3b4d4


Successfully built 1d978ac3b4d4


Successfully tagged boot-docker:latest


打包之后可以使用docker images命令查看镜像


[root@localhost img_springboot]# docker images


REPOSITORY TAG IMAGE ID CREATED SIZE


spring-boot-docker latest 1d978ac3b4d4 15 minutes ago 676MB


172.16.50.37/repo-test hw20181019 4ab4c602aa5e 6 weeks ago 1.84kB

4. 运行镜像


[root@localhost img_springboot]# docker run –name spring-boot-docker -d -v /opt/jar/springBootDocker/logs:/log -p 8080:8080 spring-boot-docker


51c70bbb2134e053324de405b92060a9c1c123bbc4c6eb94eb849a8dae7ca9c5

运行后,可以访问到spring boot 项目(http://{运行镜像的主机IP}:8080)

harborWeb

解释说明:

run: 容器启动命令

–name boot-docker 自定义容器命名

-d 程序后台启动

-v /opt/jar/boot-docker/logs:/log 应用日志 数据卷的方式存储

-p 8000:8000 用主机8000端口映射容器端口

boot-docker 镜像名称

5. 推送到私有仓库

5.1 打tag


[root@localhost img_springboot]# docker tag spring-boot-docker 172.16.50.37/repo-test/spring-boot-docker:1600

5.2 推送到私服


[root@localhost img_springboot]# docker push 172.16.50.37/repo-test/spring-boot-docker


The push refers to repository [172.16.50.37/repo-test/spring-boot-docker]


21353a604843: Pushed


53582412fb9f: Pushed


35c20f26d188: Pushed


c3fe59dd9556: Pushed


6ed1a81ba5b6: Pushed


a3483ce177ce: Pushed


ce6c8756685b: Pushed


30339f20ced0: Pushed


0eb22bfb707d: Pushed


a2ae92ffcd29: Pushed


1600: digest: sha256:f79fbf45dccb0e6cbd9b78ee07035fcfbdf1d9311cad5e2067d8d9c59af063fe size: 2424

登录到Harbor的web界面可以看到:

pushed

6. 拉取镜像


[root@localhost img_springboot]# docker pull 172.16.50.37/repo-test/spring-boot-docker:1600


1600: Pulling from repo-test/spring-boot-docker


Digest: sha256:f79fbf45dccb0e6cbd9b78ee07035fcfbdf1d9311cad5e2067d8d9c59af063fe


Status: Image is up to date for 172.16.50.37/repo-test/spring-boot-docker:1600



版权声明:本文为funtaster原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。