docker运行springboot项目 dockerfile方式

使用Docker部署Spring boot项目

 

一、前提条件

1.有一个Spring boot项目springboot-docker-test

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

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

二、用Docker打包镜像并发布

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

 

FROM java:8

VOLUME /tmp

COPY springBootDockerTest.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 springBootDockerTest.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界面可以看

 

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

 

非Docker方式运行程序

使用Maven命令

mvn package

运行:

java -jar target/***************.jar

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值