(环境准备:VMware 14,Centos7,Xshell5,)
docker部署 spring boot项目大致结构, 在虚拟机上面使用docker创建一个沙箱里面相当于一个小系统,然后把java项目发布在这个沙箱里面,将沙箱端口映射到服务器对应端口,外部通过访问服务器该端口来访问沙箱里面的项目
docker官网
本文使用自定义jdk1.8镜像,也可以使用docker官网提供的镜像 使用docker search jdk 或者官网即可查到提供的jdk.
输入docker version 查看docker信息
输入docker info 查看国内仓库是否添加成功
在Dockerfile里面添加如下内容
#依赖的环境 FROM centos:7 #作者 MAINTAINER "violet" #切换工作目录,然后会在该目录下执行命令 WORKDIR /usr RUN mkdir -p /usr/docker/java #ADD 是相对路径jar,把java添加到容器中 ADD jdk-8u251-linux-x64.tar.gz /usr/docker/java #环境配置 注意: 这里的jdk1.8.0_251的路径与 jdk-8u251版本要进行对应的修改 ENV JAVA_HOME /usr/docker/java/jdk1.8.0_251 ENV JRE_HOME $JAVA_HOME/jre ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH ENV PATH $JAVA_HOME/bin:$PATH上传指定的jdk1.8到服务器,项目结构如下图
配置结构展示:
#创建spring boot 镜像 注意有点 制作的镜像名字为 sys-java Dockerfile和jar在同一个目录下,并且使用该命令 docker build -t sys-java . # --name sys-java 容器名字 #-d 后台运行 # -v /docker/java/logs:/usr/logs 解析为将容器路径/usr/logs映射到/docker/java/logs 映射后应该在容器的/docker/java/logs看到服务器日志 # -p 12000:12000 镜像端口12000映射到为12000(springboot启动的端口为12000) #sys-java 是运行的镜像名字 docker run --name sys-java -d -v /docker/java/logs:/usr/logs -p 12000:12000 sys-java #可以在-d后面可添加--restart=always或者docker container update --restart=always 容器名字 docker启动时自启动改jar包运行成功
#查询sys-java的日志 docker logs -f sys-java #查看本机映射日志 cd /docker/java/logs到这里就部署完了,接下来添加一个shell脚本一键安装部署(如果出现 “Permission denied” 在启动docker run 添加 --privileged=true (该问题是权限不足) )
创建一个sys-java.sh(可在windows可在服务器)
大致意思是: 查看服务器是否有服务名的端口运行 如果有关闭docker容器运行并且删除容器和镜像 重新书写dockerfile 打包发布
#!/bin/bash SERVER_NAME=sys-java #容器id CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}') if [ -n "$CID" ]; then docker stop $SERVER_NAME fi images=$(docker images "$SERVER_NAME" | awk '{print $1}') if [ -n "$images" ]; then docker rm $SERVER_NAME docker rmi $SERVER_NAME fi # echo "$images" cat > Dockerfile << EOF FROM jdk1.8 MAINTAINER "violet" LABEL description="描述" VOLUME /tmp RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo "Asia/Shanghai" > /etc/timezone COPY sys-0.0.1-SNAPSHOT.jar app.jar EXPOSE 12000 CMD java -jar -XX:+PrintGC -XX:+PrintGCDateStamps app.jar EOF docker build -t $SERVER_NAME . docker run --name $SERVER_NAME -d -v /docker/java/logs:/usr/logs -p 12000:12000 $SERVER_NAME echo "$SERVER_NAME容器创建完成"**项目结构 : **
运行./sys-java.sh出现提示权限不足时,执行 chmod +x sys-java.sh 然后运行重新运行