Docker部署Springcloud微服务详细讲解(一)

Docker部署Springcloud微服务详细讲解(⼀)
⼀、为什么要使⽤Docker部署Spring Cloud项⽬
3d打印机制作
说⽬前最流⾏的java开发⽅式就是Spring Boot和Spring Cloud应该不为过。Spring Boot进⼀步加强了“约定⼤于配置”这⼀Spring的中⼼思想,使得我们开发⼈员能够更快捷,更便利的开发Spring项⽬,也使得开发java web变得不再那么费劲。⽽Spring Cloud 的出现更是让我们项⽬的开发有了更多的选择,Spring Cloud集成并封装netfix中的ribbon,eureka,hystrix,feign和zull等⼗分出⾊的项⽬,为我们提供了服务注册与发现,客户端的负载均衡和路由分发等功能,为现在的⼤部分中⼩企业开发分布式架构提供了⼀整套的解决⽅案,⼤⼤提⾼了⼯作效率,个⼈认为Spring Cloud在未来⼀定会像Spring⼀样的出⾊。⽽Docker的出现让容器化技术得以普及,更快的部署和维护与Spring Cloud的结合,能让我们不再像以前⼀样为了某⼀个模块的增加⽽服务器上⼤动⼲⼽,还需要考虑环境的问题,现在只需要⼀句docker start .....便可轻松实现服务的扩展。
⼆、如何使⽤Docker来部署Spring Cloud项⽬
Spring Cloud项⽬必须基于Spring Boot项⽬来开发,所以这⾥讲解Spring Boot项⽬的部署,Spring Cloud项⽬也是同理。博主使⽤的是Dockerfile的形式来部署。废话不多说,先张贴代码:
FROM frolvlad/alpine-oraclejdk8
VOLUME /usr/test
ADD test.jar app.jar环保手电筒
EXPOSE 8001
ENTRYPOINT ["java","-d=file:/dev/./urandom","-jar","/app.jar"]
FROM:
Docker是基于镜像的部署,幸运的是Docker官⽅和开发者们为我们维护了许多⾼质量的Docker镜像,⽽基于这些镜像我们能做出符合⾃⼰需求的镜像。此处的FROM意思为我们即将要创建的镜像的基础镜像的名字,这个名字可以是我们本地已有的镜像,也可以是Docker Hub上的镜像,如果是Docker Hub上的镜像,此时docker daemon会为我们⾃动下载该镜像。还有⼀个要注意的点,如果是本地镜像要加上版本(镜像名:版本号),否则默认版本号为latest。
VOLUME:
Docker的运⾏相当于是操作系统的⼀个进程,但是该进程⼜与普通进程有些许不同,因为该进程内部维护着的是我们的⼀个微服务的完整结构,⽽往往项⽬中需要运⾏的微服务都有记录⽇志或者其他写
出⽂件的功能。设想⼀下这样的情况:我们的微服务现在正在运⾏,但是访问量突然增⼤,开发⼈员⼜没有关注到这⼀点,没有进⾏⽔平扩展,这时候很有可能这个微服务就down了,⽽这个微服务⼀旦down了之后,出现的情况就是整个容器的status就变成了Exited,⽽此时如果将容器删除,容器中的所有数据卷会跟随容器⼀起删除,因为这些数据卷是临时的。此处的映射路径为/usr/test。这是我们⾃定义的映射路径,后续要演⽰记录⽇志的功能。当然也可以指定/tmp其效果都是在主机的/var/lib/docker/volumes⽬录下创建⼀个临时⽂件,并链接到容器的链接路径。⽽为什么链接到容器的/tmp⽬录呢?因为 Spring Boot 使⽤的内嵌 Tomcat 容器默认使⽤/tmp作为⼯作⽬录。当然此处的/tmp也可以变成你的⽇志记录⽂件夹,这样就可以在本地实时查看⽇志记录了。
ADD:
将我们⾃⾝的项⽬admin.jar作为app.jar加⼊到容器中。
EXPORT:
命令⽤于声明在运⾏时容器提供服务的端⼝。注意:这只是⼀个声明,运⾏时并不会因为该声明就打开相应的端⼝。该指令的作⽤是帮助镜像使⽤者理解该镜像服务的守护端⼝;其次是当运⾏时使⽤随机映射时(即run命令的-P参数),会⾃动映射EXPORT的端⼝。
ENTRYPOINT:
该命令制定Docker容器启动时执⾏的命令,可多次设置,但只有最后⼀条会⽣效。
["java","-d=file:/dev/./urandom","-jar","/app.jar"]这条命令中可能部分读者会对  -d=file:/dev/./urandom  这条命令有疑惑,这是因为linux中和windows中取随机数时的参考策略不同,linux默认的随机数会被取完,导致返回-1.⽽制定/dev/./urandom这个取随机数的策略时,当随机数取完之后会返回伪随机数,不⾄于影响业务。
三、创建镜像并运⾏
我们jar包中只有⼀个test类:
st;
import java.io.File;
import java.io.FileOutputStream;
压花设备
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestRest {
@RequestMapping("/test/{info}")
public String test(@PathVariable(value="info") String info) throws Exception {
FileOutputStream fos = new FileOutputStream(new File("/usr/"));
fos.Bytes());
fos.close();
return "test ok";
}
}
当我们访问/test/{info}时便将info的信息输出到/usr/中。废话不多说开始打包。
⽂件上传到装有Docker的服务器上。
执⾏命令  docker build -t test/test8001:test .
-t 表⽰打包成功后的镜像tag  不要忘了最后⼀个点。.表⽰Dockerfile⽂件和jar包在同⼀个路径,如果不在需要写出Dockerfile的绝对路径。
打包成功
segg我们先关闭所有正在运⾏的docker容器,并删除/var/lib/docker/volumes中的所有⽂件,呈现如下状态
运⾏我们的docker 镜像。
此时会返回⼀长串字符:06764ea7337484494183557c7425e706dd31e2333aced6034b7a53354c6c8a75
这串字符就是我们容器的唯⼀ID。
现在我们再来看看⽂件夹    /var/lib/docker/volumes
我们可以看到这⾥产⽣了⼀个⽂件夹。但是这⾥的⽂件夹名称却和我们的容器ID不同,接着我们再看看/var/lib/docker/containers这个⽬录下有什么东西。
在containers⽬录下出现了容器的唯⼀ID。这⾥⾯存储的是我们容器运⾏需要的数据。那么我们怎么看到volumes下的⽬录呢?
我们可以据下图的⽅式查看:
根据docker inspect 容器ID  这条命令可以查看到容器的详细信息。但是显⽰的数据太多了,我们也可以选择性的查看。
扎胎器根据 docker inspect --format "{{.Mounts}}" 06764ea73374
真空环境--format  根据模板来查看信息,我们这⾥就查看Mounts的信息
对应着docker inspect 06764ea73374 中划红线的这⼀段
从上⾯我们可以看到。我们已经成功将容器中的/usr/test⽬录挂载到了主机
的/var/lib/docker/volumes/5beee516b4656b67f907cf7178c0323434a4c7b2d044b4059f9e9b52c58e054a/_data
⽬录下。上图划红线中的name后的字符串也就是我们在/var/lib/docker/volumes下⾯看到的⽂件夹名称。
接着我们尝试访问:
上图显⽰访问成功了。那么
在/var/lib/docker/volumes/5beee516b4656b67f907cf7178c0323434a4c7b2d044b4059f9e9b52c58e054a/_data这⾥⾯应该会有我们需要的⽂件。
我们可以看到。果然出现了那么会有hello world!字样吗?我们可以打开来看看。
果然出现了这就证明我们的⽂件挂载成功了。
这时就算你停⽌容器,该⽂件也不会消失。基于此我们可以轻松的搭建微服务的⽇志系统。
下节讲解docker部署微服务时⽹络连接的注意点。
以上内容均为本⼈愚见,望各位⼤⽜在评论中多加指点。⼩弟感激不尽

本文发布于:2024-09-22 15:40:34,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/155868.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:容器   镜像   服务   命令   开发   查看   需要   路径
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议