Springboot(四)Docket部署(本地/远程)
Docker简介
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker的优点
更快速的交付和部署
对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
更高效的虚拟化
Docker 容器的运行不需要额外的 hypervisor(虚拟化管理程序)支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
更轻松的迁移和扩展
Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
特性 | 容器(Docker) | 虚拟机(VM) |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | MB级 | GB级 |
性能 | 接近原生 | 弱于原生 |
系统支持量 | 单机支持上千容器 | 单机支持十几个 |
Docker的局限
- Docker是基于Linux 64bit的,无法在windows/unix或32bit的linux环境下使用
- LXC是基于linux kernel的,因此container的guest系统只能是linux base的
- 隔离性比KVM虚拟化方案还是有些欠缺,所有container公用一部分的运行库
- 网络管理相对简单,主要是基于namespace隔离
- cgroup的cpu功能相比KVM的等虚拟化方案相比难以度量
- docker对disk的管理比较有限
- container随着用户进程的停止而销毁,container中的log等用户数据不便收集
1-2 有windows base应用的是不能使用Docker的
3-5 用户的需求,到底是需要一个container还是一个VM,同时也决定docker作为IaaS不太可行
6-7 虽然是docker本身不支持的功能,但是可以通过其他手段解决(disk quota, mount –bind)。总之,选用container还是vm, 就是在隔离性和资源复用性上做权衡
Springboot集成Docker
先准备一个Spirngboot项目
在项目根目录的pom.xml文件下添加一条properties
1 | <docker.image.prefix>springboot</docker.image.prefix> |
plugins 中添加 Docker 构建插件:
1 | <build> |
在目录src/main/docker下创建 Dockerfile 文件,Dockerfile 文件用来说明如何来构建镜像。
1 | FROM openjdk:8-jdk-alpine |
这个 Dockerfile 文件很简单,构建 Jdk 基础环境,添加 Spring Boot Jar 到镜像中,简单解释一下:
- FROM ,表示使用 Jdk8 环境 为基础镜像,如果镜像不是本地的会从 DockerHub 进行下载
- VOLUME ,VOLUME 指向了一个/tmp的目录,由于 Spring Boot 使用内置的Tomcat容器,Tomcat 默认使用/tmp作为工作目录。这个命令的效果是:在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
- ADD ,拷贝文件并且重命名
- ENTRYPOINT ,为了缩短 Tomcat 的启动时间,添加java.security.egd的系统属性指向/dev/urandom作为 ENTRYPOINT
这样 Spring Boot 项目添加 Docker 依赖就完成了。
安装 Docker 环境
1 | yum install docker |
安装完成后,使用下面的命令来启动 docker 服务,并将其设置为开机启动:
1 | service docker start |
如果启动出现问题
参考
Centos7上安装docker
使用Docker 中国加速器
1 | vi /etc/docker/daemon.json |
重新启动docker
1 | systemctl restart docker |
输入docker version 返回版本信息则安装正常。
安装JDK
1 | yum -y install java-1.8.0-openjdk* |
配置环境变量
打开 vim /etc/profile
添加一下内容
1 | export JAVA_HOME=/usr/lib/jvm/java-1.8.0 |
修改完成之后,使其生效
1 | source /etc/profile |
输入java -version 返回版本信息则安装正常。
安装MAVEN
1 | ## 解压 |
修改环境变量
打开 vim /etc/profile
1 | export JAVA_HOME=/usr/lib/jvm/java-1.8.0 |
修改完成之后,使其生效
1 | source /etc/profile |
输入mvn -version 返回版本信息则安装正常。
这样整个构建环境就配置完成了。
参考文献
CentOS安装Maven
使用Docker部署Springboot项目
将项目 cxy-mybatis 拷贝服务器中,进入项目路径下进行打包测试。
1 | #打包 |
看到 Spring Boot 的启动日志后表明环境配置没有问题,接下来我们使用 DockerFile 构建镜像。
方法一
在我们之前配置docker的机器上 创建一个文件夹docker,放置上面的Dockerfile和springboot打包的项目
在改目录下执行指令
1 | docker build -t docker . |
docker就会根据Dockerfile里你定义好的命令进行构建新的镜像。
-t代表要构建的镜像的tag .代表当前目录,也就是Dockerfile所在的目录。
在该docker文件下使用 指令:
1 | docker run -d -p 8080:8080 docker |
运行该springBoot项目,可以看到构建完毕的景象docker了
最后访问浏览器,成功
关闭运行中的容器
远程windows打包
开启Docker远程API
修改docker配置文件
vi /usr/lib/systemd/system/docker.service
保存后退出,重载
1 | systemctl daemon-reload |
执行
1 | netstat -anp|grep 2375 |
如果设置防火墙,或者限制ip的还需要放行2375端口
1 | iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 2375 -j ACCEPT |
本地windows打包
在项目pom.xml下添加远程地址dockHost和修改dockerDirectory
1 | <!-- Docker maven plugin --> |
远程服务器上查看
搞定,启动服务
1 | docker run -d -p 8080:8080 springboot/springboot-mybatis |
打包Error参考
Maven 不识别 docker:build
1 | [ERROR] No plugin found for prefix 'docker' in the current project and in the plugin groups... |
解决办法是修改maven的配置文件,settings.xml。(pluginGroups在settings.xml中的位置很靠上)
1 | <pluginGroups> |