前言
利用Dockerfile发布springboot项目有两种方式,原理都是一样的,我们可以在idea中连接docker直接发布,详情可在b站搜索相关视频,Dockerfile参考如下图所示,在这里我们说的是怎么直接手动在服务器上进行打包容器。
表明启动类
在自己的springboot项目中找到maven配置文件pom.xml,
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.demo.itcabinet.cabinet.CabinetServiceApplication</mainClass>
</configuration>
</plugin>
</plugins>
</build>
这里要注意的是<bulid><plugins>等标签是不允许同时存在两个的,需要找到相应的层级,主要把<mainclass>标签加入配置文件即可
利用maven生成jar文件
点击右侧的maven,然后再依次点击clean和package,会生成一个黄色的target文件夹。我们需要复制后缀为.jar的这个文件出来
编写Dockerfile文件,并创建镜像
使用云基础镜像(容易报错)
新建无格式文本(新建一个txt,删去后缀),命名为Dockerfile,注意大小写不要错误,粘贴如下代码:
# 基础镜像使用Java
FROM java:8
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为app.jar
ADD sql-father-backend-0.0.1-SNAPSHOT.jar app.jar
# 运行jar包
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
到Dockerfile当前目录下,使用命令:
# cabinet 镜像名称
# 此处没有标明版本号,会自动将TAG设置为latest
# 注意不要遗漏 .
docker build -t cabinet .
注意:
这个Dockerfile使用的基础镜像是可以使用云镜像java:8,但是很有可能会失败,可以尝试java:11,java:11.0.06等,但也很有可能失败,出现不存在景象或者没有登录之类的的报错
使用本地镜像(推荐)
创建本地Java8镜像的教程
1、利用自己的方式下载一个linux-jdk到服务器,或者自己本机下载后使用Xftp 7等ftp工具上传,我下载的是jdk-8u192-linux-x64.tar.gz
2、将jdk和一个新建的Dockerfile放置在同一文件夹内,注意文件夹内不要存在其他任何文件
3、编写Dockerfile文件如下,根据注释对文件进行修改,主要是更改编写人和jdk名称:
# 设置docker的运行环境
FROM centos:7
# 编写人
MAINTAINER liu
ENV MYPATH /usr/local
WORKDIR $MYPATH
# 安装vim编辑器
RUN yum -y install vim
# 安装ifconfig命令查看网络IP
RUN yum -y install net-tools
# 安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
# 将宿主机的文件拷贝到容器的具体目录中。这里使用ADD,拷贝后自动解压,如果不需要解压,可以使用COPY
ADD jdk-8u192-linux-x64.tar.gz /usr/local/java/
# 配置jdk环境
ENV JAVA_HOME /usr/local/java/jdk.8.0_192
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
EXPOSE 80
CMD echo $MYPATHc
CMD echo "success---------ok"
CMD /bin/bash
4、保存后,在当前目录下使用如下命令
# java8 镜像名称
# 1.5 镜像TAG/版本
# 注意不要遗漏 .
docker build -t java8:1.5 .
5、查看本地镜像库
docker images
可以看到如下信息,本地基础镜像创建成功!
回到之前项目文件目录,编写Dockerfile文件
# 基础镜像使用Java
FROM java8:1.5
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为app.jar
ADD sql-father-backend-0.0.1-SNAPSHOT.jar app.jar
# 运行jar包
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
到Dockerfile当前目录下,使用命令:
# cabinet 镜像名称
# 此处没有标明版本号,会自动将TAG设置为latest
# 注意不要遗漏 .
docker build -t cabinet .
查看本地镜像库
docker images
发现镜像已存在
根据镜像生成容器
# 将cabinet运行为p_demo1容器
# 映射为8080
# 注意本机防火墙与云服务商安全组的开放
docker run -p 8080:8080 --name p_demo1 -d cabinet
注意:
如果docker ps发现有个容器一会就没了,使用docker logs p_demo1查看名为p_demo1容器的日志