docker 部署 springboot 项目

本文详细介绍使用Docker部署SpringBoot项目的两种方法,包括直接基于Java镜像运行项目及使用Dockerfile创建定制镜像的过程。

前言:

        关于 dokcer 的安装已经在上文介绍过,有兴趣的同学可以去了解下。

正文:

        首先大概说一下 docker、镜像、容器的关系。镜像可以理解为是虚拟机,有很多种,比如服务器镜像、java镜像等等。容器可以理解为是基于镜像创建的一个独立的空间,我们的项目就是跑在容器里面的。而 docker 则是来操作镜像和容器的工具。镜像跟容器之间的关系为:一个镜像可以对应多个容器,容器必须依赖于镜像而存在,镜像为容器提供了相应环境。(均为个人理解,有不对的地方还请各位同学指正!)

准备:

        保证服务器安装 docker,腾讯云 CentOS7.6 服务器

部署项目方法一:

1、拉取 java 镜像

docker search java   #这是 docker 命令,意为在 docker hub 上查找关于 java 的镜像

docker pull java:8   #拉取 java:8 镜像,也就是我们运行 springboot 项目所需的环境(因为 
                     springboot 项目内置了 tomcat,所以不需要 tomcat 镜像)

docker images   #查看镜像列表

注:docker rmi 镜像ID或镜像名   #删除镜像(有些镜像通过镜像名删除不了,所以得用镜像ID来删除)

2、将项目打包,然后通过 xftp 工具将 jar 包传到服务器(可以是默认目录,也可以自定义目录,笔者的目录为 /root/project/getapp)

3、通过 docker 命令来创建容器、挂载项目、启动项目


docker run --name getapp -d -p 3301:8081 -v /root/project/getapp/getmusic-0.0.1-
SNAPSHOT.jar:/root/project/getapp/getmusic-0.0.1-SNAPSHOT.jar java:8 nohup java -jar
/root/project/getapp/getmusic-0.0.1-SNAPSHOT.jar &

注:docker run --name getapp:创建一个容器,名称为 getapp
    -d -p:-d 为后台运行容器,-p 为随机端口映射(好像不需要,但也不影响)
    3301:8081:指定容器端口号为3301,8081是你项目端口号
    -v /root/project/getapp/getmusic-0.0.1-SNAPSHOT.jar:/root/project/getapp/getmusic- 
    0.0.1-SNAPSHOT.jar:将你的项目挂在到容器的这个位置(我这里都是项目 jar 包所在的位置)
    java:8:指定容器依赖的镜像为 java:8,也就是之前拉取的
    nohup:后台永远运行
    java -jar /root/project/getapp/getmusic-0.0.1-SNAPSHOT.jar:运行项目
    &:即使服务器死机也运行

4、完成后我们就会看到一个名为 getapp 的容器

docker ps   #查看当前运行的容器列表
注:docker ps -a   #查看所有容器列表
    docker rm -f(容器名或容器ID)   #删除当前运行的容器
    docker rm (容器名或容器ID)   #删除未运行的容器   

 5、检查项目是否正常启动

docker logs (容器名)   #可以通过查看 docker 日志来检查项目是否正常启动 

6、访问项目接口

http://服务器Ip:容器端口号/接口url    #访问接口
比如:http://11.111.111.111:1111/api/student/list

注:笔者使用的是腾讯云CentOS7.6服务器,如果你给实列加了安全组,就得开通 3301(容器端口号)的校验规则,如果没有加安全组好像就不用管。如果你使用的是阿里云,那就得开放 3301(容器端口号)端口号。 

 7、更新服务器:只需要将 jar 包传至相同位置,然后重启 docker 就行

docker restart (容器名)   #重启 docker
注:理论上我们支持一个容器放一个项目

 

部署项目方法二:

1、开始时不需要拉取镜像,只需安装 docker 即可。首先将项目 jar 包传至服务器(笔者这里的位置为 /root/project/getapp),然后进入项目 jar 所在位置,创建 Dockerfile 文件

cd project/getapp   #进入项目所在位置
vim Dockerfile   #创建 Dockerfile 文件并编写以下代码

FROM java:8   #基础镜像
MAINTAINER xgllhuangzi<******@163.com>   #作者
VOLUME /tmp   #指定临时目录为 /tmp
ADD getmusic-0.0.1-SNAPSHOT.jar getapp.jar   #将jar 包添加到容器中并更名为 getapp
RUN bash -c 'touch /getapp.jar'   #操作镜像
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/getapp.jar"]   #运行项目

按 esc 退出编辑,然后 :wq 保存退出

2、创建镜像

docker build -t getappi .   #实际上是以 java:8 镜像为基础创建镜像,
只不过是将镜像与项目绑定在了一起,也就是 Dockerfile 文件中的 FROM java:8 这一句

3、创建容器

docker run --name getapp 3301:8081 -d -p getappi   #解释在方法一中有

4、查看镜像、查看容器是否创建成功,检查项目是否正常启动(具体命令见方法一)

 

注:两种方法的区别:

    1、方法一中,项目是基于镜像的,方法二中,项目是跟镜像绑定在一起的。

    2、方法一中,如果你部署 springboot 项目的话,只需要一个 java:8 镜像就可以了,也就是说不管你部署多少个项目,只需要一个镜像。但是在方法二中,你每部署一个项目,就会创建一个镜像(因为方法二中项目跟镜像是绑定在一起的),而一个镜像大概 600M-700M,这就会浪费服务器资源。

    3、方法而要比方法一标准,也就是通过 Dockerfile 的方式部署更加标准。

 

        所以具体选择哪一种还得视情况而定,如果你服务器贼强的话完全可以选择第二种!(充钱你就会变得更强!)

 

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

红衣女妖仙

行行好,给点吃的吧!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值