这是我参与8月更文挑战的第23天,活动详情查看:8月更文挑战
由于容器化的引入,使用docker发布项目是必须技能,下文带你掌握如果用docker分别发布前后端项目。本文以最简化的配置方式举例,保证可正常运行。
1.发布springboot项目
1.编写Dockerfile文件
下文以eureka项目举例,可以根据配置修改。
1 | bash复制代码# Docker image for springboot file run |
解释下这个配置文件:
VOLUME 指定了临时文件目录为/tmp。其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。该步骤是可选的,如果涉及到文件系统的应用就很有必要了。/tmp目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录
项目的 jar 文件作为 “eureka.jar” 添加到容器的
ENTRYPOINT 执行项目 app.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向 “/dev/./urandom” 作为 Entropy Source
如果是第一次打包,它会自动下载java 8的镜像作为基础镜像,以后再制作镜像的时候就不会再下载了。
2.部署文件
在服务器新建一个docker文件夹,将maven打包好的jar包和Dockerfile文件复制到服务器的docker文件夹下
3.制作镜像
1 | bash复制代码cd /root/docker |
一定要注意”. “ .后面有个空格!
如果出现错误 Step 3/5 : ADD eureka-0.0.1-SNAPSHOT.jar app.jarlstat eureka-0.0.1-SNAPSHOT.jar: no such file or directory
为ADD demo-0.0.1-SNAPSHOT.jar /eureka.jar处配置问题,请检查是否指定了
Application
启动文件。
4.查看镜像
1 | 复制代码docker images |
见下图,可以看到本地已经有docker镜像了。
5.启动容器
- 第一个8761:为你正在操作虚拟机对外的端口 。
- 第二个8761:为docker容器对虚拟机提供的接口 。
- –net=host:以本机ip作为容器地址。
- eureka:为镜像名称。
1 | ini复制代码docker run -d -p 8761:8761 --net =host eureka |
注意这里有个坑,如果是使用springboot Netflix,在服务间调用时,会从eureka拉取服务的ip地址。但是不加–net =host,会拉取docker的虚拟出的地址,当服务间访问时会访问虚拟地址而不是需要访问的服务器地址,所以这里楼主使用服务器地址作为docker的地址。如果有更好办法请联系楼主。
接下来就可以进入容器中,对容器进行操作了。
1 | arduino复制代码docker run -it eureka /bin/bash |
本文转载自: 掘金