制作用于启动springboot项目的Java基础镜像
对于小公司来说,自动化部署有时候并不能灵活应对不通外网的服务器部署,
但是离线安装部署就能应对各种客户的各种网络状态的服务器
离线部署,需要我们在本地制作好基础镜像,然后把镜像保存至本地磁盘,以备后续使用U盘等工具进行传输到服务器
在官网下载jre程序包
官网地址:https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html
此地址可以下载1.8版本的JDK或者JRE,因为我们要制作Java的运行环境,所以我们需要下载JRE
我们下载对应X86架构服务器jre-8u341-linux-x64.tar.gz二进制包
或者对应arm架构的jdk-8u341-linux-aarch64.tar.gz二进制包,然后使用jdk里面的jre进行操作,
在oracle没找到arm架构的jre包
我们以X86架构服务器jre-8u341-linux-x64.tar.gz二进制包为例子
把下载好的jre-8u341-linux-x64.tar.gz上传至服务器并解压
解压命令
tar zxvf jre-8u341-linux-x64.tar.gz
删减不必要文件,这样能让镜像包的体积小一些
删除之前看下解压出来的文件公有多大
进入到解压好的jre文件夹
cd jre1.8.0_341
执行查看文件占用磁盘大小的命令
du -h ./
可以看到占用了251M
执行完下面的删除命令再次查看,占用了116M,删除掉的东西还是挺多的
rm -rf COPYRIGHT LICENSE README release THIRDPARTYLICENSEREADME-JAVAFX.txt THIRDPARTYLICENSEREADME.txt Welcome.html
rm -rf lib/plugin.jar \
lib/ext/jfxrt.jar \
bin/javaws \
lib/javaws.jar \
lib/desktop \
plugin \
lib/deploy* \
lib/*javafx* \
lib/*jfx* \
lib/amd64/libdecora_sse.so \
lib/amd64/libprism_*.so \
lib/amd64/libfxplugins.so \
lib/amd64/libglass.so \
lib/amd64/libgstreamer-lite.so \
lib/amd64/libjavafx*.so \
lib/amd64/libjfx*.so
rm -rf COPYRIGHT LICENSE README release THIRDPARTYLICENSEREADME-JAVAFX.txt THIRDPARTYLICENSEREADME.txt Welcome.html
rm -rf lib/plugin.jar \
lib/ext/jfxrt.jar \
bin/javaws \
lib/javaws.jar \
lib/desktop \
plugin \
lib/deploy* \
lib/*javafx* \
lib/*jfx* \
lib/aarch64/libdecora_sse.so \
lib/aarch64/libprism_*.so \
lib/aarch64/libfxplugins.so \
lib/aarch64/libglass.so \
lib/aarch64/libgstreamer-lite.so \
lib/aarch64/libjavafx*.so \
lib/aarch64/libjfx*.so
把删减后的jre文件重新打包
tar zcvf jre1.8.0_341.tar.gz jre1.8.0_341
先指定要压缩成的文件名jre1.8.0_341.tar.gz,再指定要被压缩的文件夹jre1.8.0_341
压缩完文件是45M
创建构建基础镜像的配置文件
vi Dockerfile
使用vi命令创建配置文件并进入文件下入一下内容
此时需要按 i 键进入编辑模式,然后把一下内容贴进去
FROM centos:7
LABEL maintainer="jre1.8.0_341"
ENV LANG en_US.UTF-8
ENV JAVA_HOME="/usr/local/jre"
ENV CLASSPATH="$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar"
ENV PATH="$PATH:$JAVA_HOME/bin"
ENV TIME_ZONE="Asia/Shanghai"
ARG JAVA_VERSION=jre1.8.0_341
ADD jre1.8.0_341.tar.gz /usr/local/
RUN set -x \
&& ln -snf /usr/share/zoneinfo/$TIME_ZONE /etc/localtime && echo '$TIME_ZONE' > /etc/timezone
CMD ["sh","-c","/data/start.sh"]
构建镜像
docker build -t jre1.8.0_341 .
等待成功的提示即可
这个镜像是把时区设置到了中国的东八区的,所以不怕程序获取当前时间时或者打印日志时的时间不对
CMD ["sh","-c","/data/start.sh"]
这一条命令是为部署jar包项目准备的,意思是使用此镜像启动的容器在成功启动后会执行容器内/data目录内的start.sh文件
我们只需要把jar包的启动命令 java -jar springboot.jar
写入到start.sh文件内,然后把start.sh文件挂载到容器内的data目录即可
保存镜像至本地磁盘
打包命令:
docker save -o 文件名.tar 镜像名称
我们打包
docker save -o jre1.8.0_341.tar jre1.8.0_341
文件会保存到你执行此命令的目录内
在服务器导入我们打包好的镜像
把jre1.8.0_341.tar镜像包传到指定服务器
导入命令:
docker load -i jre1.8.0_341.tar
docker images 查看是否导入成功
使用制作好的jre1.8.0_341镜像部署springboot项目
1.我们打包的jre1.8.0_341镜像里面有Java环境
2.spring boot打包的jar程序只要有java环境就能启动
我们只需要使用jre1.8.0_341镜像把我们打包好的jar包启动起来让调用者可以访问接口就行了
开始组织项目目录:
找到服务器的数据盘,一般情况下会把大容量数据盘挂载到 /data 目录
cd /data 进入到数据盘目录
mkdir project 创建存放所有微服务的目录
cd project 进入到创建好的目录
mkdir xian-sys xian-biz xian-gateway 创建各个微服务文件夹,
这里创建了sys、biz、gateway三个微服务的文件夹,其中的xian-前缀还是很有用的,可以模糊匹配去批量修改文件
我们以sys服务为例,组织微服务内的文件配置
cd xian-sys 进入到sys服务的文件夹
创建启动脚本
vi start.sh
使用vi命令直接创建启动脚本文件,并写入一下内容
cd /data
exec java -jar -Xms256m -Xmx256m -Dfile.encoding=UTF-8 xian-sys-1.0.1.jar
脚本的含义:依据上面打包的镜像,进入到镜像内的 /data 目录,然后执行启动jar包的命令,
其中exec命令是为了让注册中心可以感知到服务的掉线和上线
创建完启动脚本,还需要把jar包和与jar配套的application.yml配置文件传到此目录
到这里 xian-sys 这个文件夹就有了三个文件:
application.yml
start.sh
xian-sys-1.0.1.jar
接下来我们就可以启动sys服务了,启动命令如下:
执行启动服务的命令前需要把start.sh文件设置为可执行文件,命令如下:
chmod +x start.sh
批量把所有微服务的start.sh都设置为可执行文件,命令如下:
chmod +x xian-*/start.sh
当然,批处理的命令要搞对目录层级
docker run --name xian-sys -p 8080:8080 --restart always \
-v $PWD:/data \
-v /data/project/logs:/log \
-d jre1.8.0_341
配置好自己的配置文件执行此命令即可启动微服务,其中的--restart always参数很有必要,
要是服务器重启了,微服务也会跟着重启,不用手动启动了
一些相关的运维命令
#查看该微服务打印的最新100行日志,如果服务运行时间很久了就适合用这个命令查看日志了
docker logs --tail 100 xian-sys
#重启微服务,重新部署替换过jar后执行重启
docker restart xian-sys
#停止微服务
docker stop xian-sys
#启动已停止的微服务
docker start xian-sys
使用dubbo的微服务启动命令
docker run --name xian-sys --restart=always -p 8080:8080 \
-v $PWD:/data \
-e DUBBO_IP_TO_REGISTRY=192.168.1.100 -e DUBBO_PORT_TO_REGISTRY=20880 -p 20880:20880 \
-v /data/project/logs:/syzhlog \
-d jre1.8.0_281