docker部署springboot

tech2023-06-17  113

docker环境部署spring boot项目(自制jdk镜像1.8)

(环境准备:VMware 14,Centos7,Xshell5,)

docker部署 spring boot项目大致结构, 在虚拟机上面使用docker创建一个沙箱里面相当于一个小系统,然后把java项目发布在这个沙箱里面,将沙箱端口映射到服务器对应端口,外部通过访问服务器该端口来访问沙箱里面的项目

​ docker官网

本文使用自定义jdk1.8镜像,也可以使用docker官网提供的镜像 使用docker search jdk 或者官网即可查到提供的jdk.

1.docker环境安装

1.1docer安装(执行)
yum update # 安装Docker( 参数-y 默认安装时 自动选择Y) yum -y install docker #启动docker service docker start #要求服务器重启自动启动docker 可输入该命令systemctl enable docker 实现

输入docker version 查看docker信息

1.2配置docker的国内仓库
#Docker配置国内仓库(这里使用网易云),添加如下配置 vi /etc/docker/daemon.json { "registry-mirrors": ["http://hub-mirror.c.163.com"] } #重启Docker service服务 systemctl restart docker.service

输入docker info 查看国内仓库是否添加成功

2.docker安装指定版本的jdk1.8镜像

2.1配置准备(写入Dockerfile(类似于脚本文件)和上传指定的jdk1.8)
#创建一个文件夹放**Dockerfile和指定jdk mkdir -p /usr/docker/java1.8 #切换到该路径 cd /usr/docker/java1.8 #创建一个Dockerfile文件 vi Dockerfile

在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到服务器,项目结构如下图

2.2打包jdk镜像(在上图的路径执行如下命令)
#打包镜像 注意有后缀 . 这个点的意思使用当前目录下面的Dockerfile制作镜像 docker build -t jdk1.8 .

#查看镜像 docker images

2.3测试基于镜像创建容器jdk1.8,环境是否正常
#运行该容器 docker run -it --name=jdk1.8 jdk1.8 /bin/bash #然后输入java -version 你会发现前面的localhost换成了一段密文,这是当前docker容器的id。 出现java版本说明容器没有问题 #退出容器(在容器输入exit) exit

3. 部署spring boot项目

3.上传项目和准备Dockerfile
#创建文件夹 mkdir -p /usr/docker/sys #编写该项目的Dockerfile vi Dockerfile #基于刚刚创建的jdk版本,这里使用的自己创建jdk1.8镜像 FROM jdk1.8 #作者 MAINTAINER “violet” #该dockerfile的描述 LABEL description=“描述” #服务器时间,根据条件条件 RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo “Asia/Shanghai” > /etc/timezone #sys-0.0.1-SNAPSHOT.jar 改名为 app.jar COPY sys-0.0.1-SNAPSHOT.jar app.jar #镜像端口 EXPOSE 12000 #cmd命令 CMD java -jar -XX:+PrintGC -XX:+PrintGCDateStamps app.jar #ENTRYPOINT ["java","-jar","-XX:+PrintGC","-XX:+PrintGCDateStamps","app.jar"] CMD可替换为

配置结构展示:

#创建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 (该问题是权限不足) )

4.shell脚本安装

创建一个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 然后运行重新运行

最新回复(0)