SpringBoot入门学习笔记-19-docker部署jar包

开发完成以后,可以通过java -jar xxx.jar 来运行一个jar包。但是生产环境中,这样运行不便于管理。专业运维一般会说用k8s\docker等来运行以保证高可用。

那么,k8s主要解决集群管理的问题,实现高可用。对于单个应用来说,我们直接docker运行就行了。

下面我们以一台centos7服务器来例,讲解一下如何用docker运行一个jar包

一、docker安装

1、安装。执行命令:yum install docker

按照提示,确认下载,输入y,直到安装完成即可。

如果yum源有问题,无法安装。可以执行尝试如下安装

sudo curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

2、docker启动与运行验证

执行以下的命令:  # 这是注释,执行# 之前的命令
sudo systemctl start docker  # 启动
sudo systemctl enable docker  # 设自启动
sudo docker ps -a  # 查看容器
执行上面的语句没有报错,则表示成功。

二、运行docker容器

如果docker没有基础的话,可能需要去补一下docker的基础。这里简单的做一下说明。

docker是一个容器,可以简单的理解为一个简单的万能虚拟机,它里面啥都可以装。

里面有什么内容,由image决定,一个image就是一个虚拟机的软件环境。image是别人提包并提供下载的镜像包,需要下载自己的docker容器里面作为一个基础镜像供运行。

docker运行基于image镜像运行后,会生成一个container。image和container的关系就像类和实例的。一个image可以在docker中运行生成多个container,所有的数据都保存在每个container中。

假设我们已经有打包好一个jar包,先上传到服务器上。

我们传统的方式是直接用安装java 的jdk,然后java -jar  server1.jar来执行。我们现在改为用docker来运行。

1、下载合适的image。

方式1,使用命令行搜索:docker search jdk

根据搜索结果,在描述列中,有一些介绍。包括是否用ubuntu,jdk8,maven等。寻找自己认为适合的就可以了。如果只是运行jar包,不需要在虚拟内打包,只需要一个包含jdk的就行了。

方案2,通过docker 的在线hub仓进行搜索然后下载。

官网打不开了(https://hub.docker.com/)

 可以百度一个新国内镜像打开,比如Dockericon-default.png?t=N7T8https://hub-stage.docker.com/

打开以后,输入关键搜索,然后查看 。

根据选择版本,下载镜像即可。docker pull java:8u111-jre

下载完成以后,可以查看:docker images

2、运行jar。

一条命令运行jar。先看效果:

命令:docker run -itd -p 9092:9091 -v /opt/docker-file/java/:/tmp/java/ --rm --privileged=true --name jdemo java:8u111-jre java -jar /tmp/java/server1.jar 

命令说明:

 docker run表示docker容器去启动一个应用。其他常用还有docker exec

-itd 其实是 -i -t -d的组合,表示以后台方式启动一个应用后并执行一条命令。

-p 9092:9091 表示将docker里面的应用9091端口映射到宿主机9092端口上。

--rm 表示这个容器一旦停止以后就自动删除。

-v /opt/docker-file/java:/tmp/java/ 表示将宿主机的/opt/docker-file/java文件夹下面的所有的文件映射到docker容器内的目录/tmp/java文件夹下。这里只有一个server1.jar包。所以会在宿主机生成一个/tmp/java/server1.jar文件。

--privileged=true  表示加了一个特别的权限,这样在docker里可以访问。因为原因是CentOS7中的安全模块selinux把权限禁掉了。如果是非centos7可以不用加这个参数。

--name jdemo 表示给这个容器取一个别名为jdemo,后面可以用这个别名来操作。

java:8u111-jre  这是docker 的image名称,就是我们pull下来的名称。

java -jar /tmp/java/server1.jar  这个是我们容器的启动命令。用来启动我们的应用。

上面的-开头的和--开头的都是参数,非必须的。docker run简单的结构是这样:

docker run image-name cmd

其他参数视况增加。如果没有需要启动的命令,cmd也可以也不加。一般都需要加别名的--name.

三、docker容器的其他常用操作
 

1、查看日志 docker logs 别名

docker logs jdemo --tail 10  仅查找头部或尾部的消息。

当然,docker logs 还支持按特定时间段查询日志

docker logs --since "2023-11-01T00:00:00" --until "2023-11-21T00:00:00"

2、进入一个容器内部操作

我们启动应用时用了-d参数,表示后台启动。如果我们需要进一步对这个容器进行操作,比如安装一些应用或调整参数等,则可以进入这个容器进行操作。

docker exec -it jdemo bash(docker exec -it 容器别名 bash)

当我们通过docker exec进入一个容器以外,就和普通的虚拟机是一样的操作了,用exit退出。

注意:bash是表示启动容器后进入shell命令。有一些主机是bin/bash。

3、停止容器

docker stop 容器别名. 

4、删除容器

docker rm 容器别名

注:当我们docker run时加了--rm参数时,stop以后就自动删除了,就不需要再删除了。

5、其他

docker system df 显示docker磁盘使用情况
docker system prune 删除未使用的数据
docker system prune -a 删除所有数据,包括未使用的镜像,而不仅仅是dangling的镜像
docker logs -f -t --tail=300 operation-backend 实时输出日志最后300行

四、docker的其他操作。

当我们自己单应用时,可以这样测试,如果生产环境上需要采用sh脚本的方式,把上面的docker run命令写在一个sh脚本去执行。而不是单个命令。

当然,docker提供了Dockerfile,Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明,可以实现很强大的功能。包括对基础镜像进行修改以后打包成一个新的镜像。专业的运维还会结合docker的私有仓库对每个打包的镜像进行上传,这样可以实现发版的回滚操作。可以参见其他博友的内容Dockerfile详解-CSDN博客

由于docker的内容太多了,本文仅是用于抛砖引玉的作用,更多的内容就不再这篇里讲了,有兴趣的开发可以自行学习docker。当然k8s也很好用,k8s就是结合docker的实现应用的高可用的。

  • 23
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值