一个微服务项目,小到几个模块,大到十几二十几个模块,每一个模块都是单独的SpringBoot工程,这么多模块的部署,部署成本真的很高,并且每一个服务的部署,都是手动部署,打成war或者jar ?,一个一个的部署也是至关的麻烦,介于此:html
我前段时间倒腾了一个博客系统,昨天测试基本功能已经跑通了,可能再过段时间我就要买服务器架设本身的博客系统了,这个系统由SpringBoot支撑,咱们就把它看成一个微服务项目的一个一个模块,进行学习微服务项目的部署java
基于前面的介绍,测试项目采用SpringBoot开发,咱们将该服务打成一个jar,而后再Docker中运行该jar便可mysql
整个流程咱们豪爽的分为下面两步:linux
SpringBoot项目打包jar 【maven插件支持,不然找不到main方法入口】git
建立Docker镜像、容器、并启动容器,访问测试github
没有其余要说的,就是一个maven插件,这里说明一下,这个插件必须有,不然打成的jar不能运行spring
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
经过idea分别执行clean package打包命令,而后咱们就能够在项目内的target目录下找我打成的jar包sql
【小提示】:能够在本地运行该jar,测试功能是否畅通,功能测试无缺再作下一步深刻入入入...docker
java -jar jar包全名称数据库
在本地磁盘中找到该jar,并将其上传到咱们的Linux服务器:
上传到咱们的Linux服务器后,咱们就在该jar的同等路径下,编写Dockerfil文件,注意在同一路径下!
下面对上面的命令作一个简单的解释:
jdk:8 :构建一个jdk8镜像的新镜像,若是本地不具备,docker回去中央仓库下载
ADD 这一栏将当前目录下的这个jar ,复制到镜像内的根目录下
最后一栏表示 完成上面操做后将进行的命令,相似于CMD 也就是启动该jar的脚本命令
而后就是镜像构建了: docker build -t 'ninjablog:1.0' .
下面仍然作一个简单的解释:
【docker build -t 'ninjablog:1.0' . 】 :表示构建一个镜像取名为ninjablo,版本号为1.0
这里我须要注意的是,镜像名字千万不要使用大写字母,会构建失败的,我也不知道为何
构建完成以后,经过docker images 查看本地镜像,就会看到咱们刚刚构建的那个镜像大摇大摆的出如今了列表中
镜像就算是已经构建成功,下面咱们建立基于该镜像的容器
而后我建立容器,并运行容器,这个时候经过 docker logs -f 容器名/id 查看到一堆有一堆的异常,我炸了
通过30分钟的排查后,我以为多是mysql的配置错了。我配置的localhost:3306,明显个人容器中没有这玩意儿,
通过一番折腾,我再次打包、上传。作镜像。开容器,...再打包....再打包......
一个小时后!啊,个人天啊,怎么回事啊?Linux上都能远程链接Windows上的mysql,为何你个SpringBoot链接不上
我尝试使用ip:port的方式用navicat链接本地数据库,链接失败
开启本地数据库远程链接功能,开放全部数据库访问权限,Linux完美链接,项目报异常
忽然想起个人docker上好像有mysql诶?立刻折腾,启动容器,建立数据库,导数据,容器重启,OJBK
好了,几经波折,终于到了咱们最后的环节了,创镜像,起容器,访项目!
这里我用数据库容器,以及一个由项目构建的镜像启动的容器,两个容器排排站:
而后就是测试访问了!,而后就是404,我靠!,经过docker logs -f myblog 查看日志,又是一堆异常!
此次没上次折腾的久,安装docker的机器的防火墙未关,在上一步中,我用了mysql容器,致使被墙了
首先全局关闭防火墙,启动容器,发现报错,不能启动,重启docker,刷新配置,再次重启。
再次查看咱们容器的启动日志,没有异常,刷新两哈 docker ps ,发现咱们的myblog容器一直在线,并无宕掉
而后启动浏览器,进行项目访问测试:
docker build -t 'ninjablog:1.0' . :构建一个名为ninjablog的镜像,版本为1.0,能够缺省版本设置
docker run -d -p 8888:8888 --name myblog ninjablog:建立并运行一个容器,参数不少,详见我给的资料
docker rm 容器Name/Id :根据名字或者id删除该容器
docker rmi 镜像名字/id :根据镜像名字或者id删除镜像
firewall-cmd --state :CentOS7查看当前系统的防火墙状态
firewall-cmd --permanent --zone=public --add-port=3306/tcp :在防火墙开启状态下,开放3306端口,自行修改
docker logs -f myblog :查看myblog容器的运行日志,有版本号配置的话须要补全
systemctl restart docker:重启docker
docker start 容器Name/id :根据名字或者id启动一个容器
docker ps :查看全部的容器,后跟 -a 查看当前正在运行的容器
Dockerfile以前咱们已经编写过了,这里就是 拿来即用便可,把Dockerfile从Linux上拷下来,放到资源文件Resource下便可
复制本项目的pom.xml文件,命名为pom_docker.xml,其余数据不用更改,只是再原来的基础上再加一个插件:
这个插件添在maven打包插件的然后面便可,可酌情修改相关数据
<!--自动构建镜像相关: 依赖docker环境-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker‐maven‐plugin</artifactId>
<version>1.0.0</version>
<!--docker镜像相关的配置信息-->
<configuration>
<!--镜像名,这里用工程名-->
<imageName>${project.artifactId}‐${project.version}</imageName>
<!--Dockerfile文件所在目录-->
<dockerDirectory>${project.basedir}/src/main/resources</dockerDirectory>
<!--TAG,这里用工程版本号-->
<imageTags>
<imageTag>${project.version}</imageTag>
</imageTags>
<imageName>${project.artifactId}:${project.version}</imageName>
<!--构建镜像的配置信息-->
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.artifactId}‐${project.version}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
【提示】:此插件依赖docker环境,因此若是本地没有安装docker环境,建议这样操做一波
在装有docker的机器上,使用git clone 克隆项目
咱们将项目推送到github或者码云上,而后再Linux上吧项目克隆一份便可
而后再经过一个命令,指定打包建立镜像
git 我能用,若是不能用,执行安装环境
jdk环境我相信你们应该有的吧,这里不作过多说明。
这里也是须要maven的环境,我相信你们都没有,简单给一系列命令安装一下
随便找一个安装目录,依次执行下面的命令
yum -y install wget
wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.tar.gz
tar -zxvf apache-maven-3.6.1-bin.tar.gz
修改setting文件,将依赖源改成国内的:而后将仓库等玩意儿也部署上【刚搬家,还没牵宽带,有宽带的不用管】
vi /etc/profile :加入环境变量,路径写本身的解压路径便可
export JAVA_HOME=/usr/local/jdk8/jdk1.8.0_171 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar export PATH=$PATH:$JAVA_HOME/bin
export MAVEN_HOME=/usr/local/apache-maven-3.6.1
export PATH=$MAVEN_HOME/bin:$PATH
source /etc/profile :刷新系统配置
最后测试一下 mvn -v:出现java版本、maven版本相关信息就能够了
mvn ‐f pom_docker.xml clean package ‐DskipTests docker:build
果不其然报错了,我费尽心思,暂时尚未找到解决的办法,目前家里没宽带,流量遭不住,过几天再继续