理解docker部署springboot-构建和运行(一)
来源:互联网 发布:java发送邮件工具类 编辑:程序博客网 时间:2024/06/13 20:36
通过这个文章的总结希望弄明白docker至少在运行层面的原理,以及docker结合springboot在生产环境的应用。
首先要在虚机上安装docker,docker对虚机的版本有要求,因此在安装的时候需要注意,关于对docker概念性的知识的理解,可以参考以下这两篇文章,文章一和文章二,最重要的是对image和container的理解,这两个文章完全可以解决这个问题,至于使用docker有什么好处,谷歌可以告诉你很多,这里就不写了。我学习docker的原因是用微服务的思想写了几个项目了,但是都只是停留在代码的层面,对于部署还是重量级的,docker正好可以解决这个问题,因此利用闲余的时间学了三四天,对docker有个大概的了解,可能还有些不够深入和错误,但是犯错也是前进的方式,所以只要快速学习快速改进就可以。下边是在springboot的项目在docker上部署的过程。
首先:建立一个文件夹,在这个文件夹下放置springboot的jar包和新建的Dockerfile文件,打开Dockerfile文件输入
第二步:构建Dockerfile文件
第三步:运行docker容器
首先要在虚机上安装docker,docker对虚机的版本有要求,因此在安装的时候需要注意,关于对docker概念性的知识的理解,可以参考以下这两篇文章,文章一和文章二,最重要的是对image和container的理解,这两个文章完全可以解决这个问题,至于使用docker有什么好处,谷歌可以告诉你很多,这里就不写了。我学习docker的原因是用微服务的思想写了几个项目了,但是都只是停留在代码的层面,对于部署还是重量级的,docker正好可以解决这个问题,因此利用闲余的时间学了三四天,对docker有个大概的了解,可能还有些不够深入和错误,但是犯错也是前进的方式,所以只要快速学习快速改进就可以。下边是在springboot的项目在docker上部署的过程。
首先:建立一个文件夹,在这个文件夹下放置springboot的jar包和新建的Dockerfile文件,打开Dockerfile文件输入
# 编写Dockerfile文件FROM hub.c.163.com/xbingo/jdk8:latestADD yourapp.jar app.jarCMD ["java","-jar","/app.jar"]这里使用的是网易蜂巢的jdk的镜像,这个镜像不需要事先pull到本机,构架springboot的镜像的时候会自动下载
第二步:构建Dockerfile文件
docker build -t txxs/springbootdocker:1.0 .这一步执行完就相当于建立了你项目的镜像,这个镜像里只有jdk和springboot源码中打包的东西,之前有同事说运行springboot需要centos等的虚机环境,但在运行的过程中其实证明了他是错的,这也正是docker的思想所在。
第三步:运行docker容器
docker run -p 8081:8080 -t txxs/springbootdocker:1.0docker run -p 8082:8080 -t txxs/springbootdocker:1.0docker run -p 8083:8080 -t txxs/springbootdocker:1.0docker run -p 8084:8080 -t txxs/springbootdocker:1.0执行上边四个命令的时候把镜像执行了四遍,相当于启动了四个相同的服务,每个服务中只包含项目的jar和jdk足够的轻,这四个服务通过8081、8082、8083和8084对外提供服务,比如本地localhost:8081,通过ps -ef| grep docker命令我们可以看到内部端口和IP的映射情况。需要说明的是在启动容器的时候,项目本身的启动时间并不会减少和在虚机上启动的时间差不多,这个需要有时间再验证
[root@iZwz9cps5bpzjurg8m4ax0Z project]# ps -ef| grep dockerroot 2615 8607 0 11:19 ? 00:00:00 docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8081 -container-ip 111.107.10.47 -container-port 8080root 4718 8607 0 12:01 ? 00:00:00 docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8082 -container-ip 111.107.10.143 -container-port 8080root 5148 8607 0 12:02 ? 00:00:00 docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8083 -container-ip 111.107.10.145 -container-port 8080root 5657 8607 0 12:12 ? 00:00:00 docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8084 -container-ip 111.107.10.146 -container-port 8080docker ps 可以看到容器的ID等信息
[root@iZwz9cps5bpzjurg8m4ax0Z project]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES9b45a14a2e34 txxs/springbootdocker:1.0 "java -jar /app.jar" 3 hours ago Up 3 hours 0.0.0.0:8084->8080/tcp fervent_newton c0a44b2116c8 txxs/springbootdocker:1.0 "java -jar /app.jar" 3 hours ago Up 3 hours 0.0.0.0:8083->8080/tcp insane_noyce eb7b3e268ff2 txxs/springbootdocker:1.0 "java -jar /app.jar" 3 hours ago Up 3 hours 0.0.0.0:8082->8080/tcp stoic_mayer d01019ff4818 txxs/springbootdocker:1.0 "java -jar /app.jar" 3 hours ago Up 3 hours 0.0.0.0:8081->8080/tcp stoic_morsedocker stats 容器id 查看内存占用情况,ID为d0的容器的内存和cpu的占用情况如下所示
CONTAINER CPU % MEM USAGE/LIMIT MEM % NET I/Od0 0.04% 167.6 MB/1.968 GB 8.51% 1.162 kB/1.032 kB执行 ps -ef| grep java我们可以看到以下的结果,而且进程号是一样的
root 2658 8607 0 11:19 pts/2 00:00:14 java -jar /app.jarroot 4796 8607 0 12:01 pts/3 00:00:12 java -jar /app.jarroot 5211 8607 0 12:02 pts/4 00:00:13 java -jar /app.jarroot 5734 8607 0 12:12 pts/5 00:00:12 java -jar /app.jar使用top -p 8607,我们可以看到随着开开启的container实例的个数原来越多,内存的占用比例也在随之增大%MEM,这也说明docker本身就是一个进程
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 8607 root 20 0 803m 32m 9.9m S 0.0 1.7 5:20.62 docker
下一步要验证的是:https://yeasy.gitbooks.io/docker_practice/content/introduction/why.html提到的优点
Nginx怎么做IP映射,搭建MySQL主从镜像集群以及其他集群为springboot提供数据服务,再次理解docker是如何只利用jdk和jar提供服务的,以及其他一些问题阅读全文
0 0
- 理解docker部署springboot-构建和运行(一)
- 理解docker部署springboot-为什么要用docker(六)
- 理解docker部署springboot-搭建mysql主从集群(二)
- 理解docker部署springboot-容器网络使用(三)
- 理解docker部署springboot-容器日志处理(四)
- Docker(一)-构建Docker
- springboot 构建(一)初步搭建springboot
- 理解docker部署springboot-容器内存优化的反思(五)
- springboot docker部署发布
- SpringBoot Docker部署
- jenkins和docker实现自动化构建部署
- Docker(二)-Docker化-构建Springboot的镜像
- Docker构建SpringBoot镜像
- docker 构建springboot maven 项目
- docker构建部署pinpoint
- springboot入门(一)文件配置和运行
- docker 部署springboot、dubbo项目
- 使用docker部署springboot应用
- Eclipse远程调试Tomcat
- ZOJ2706-Thermal Death of the Universe
- android 图像加载 第三方开源 之
- Bootstrap 响应式实用工具——visible-xs、visible-sm、hidden-xs、hidden-sm等
- 学习笔记--第五章神经网络
- 理解docker部署springboot-构建和运行(一)
- bzoj 4808: 马
- 水仙花数
- Android基础知识(十一)之新特性
- Hive
- APP 开发 和ios 安卓的交互大全
- Spring Controller 获取中文参数值乱码问题解决
- keepalived+nginx双机热备+负载均衡 非抢占模式
- Android Notification 详解