赞
踩
开发完成以后,可以通过java -jar xxx.jar 来运行一个jar包。但是生产环境中,这样运行不便于管理。专业运维一般会说用k8s\docker等来运行以保证高可用。
那么,k8s主要解决集群管理的问题,实现高可用。对于单个应用来说,我们直接docker运行就行了。
下面我们以一台centos7服务器来例,讲解一下如何用docker运行一个jar包
按照提示,确认下载,输入y,直到安装完成即可。
如果yum源有问题,无法安装。可以执行尝试如下安装
sudo curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
如果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,使用命令行搜索:docker search jdk
根据搜索结果,在描述列中,有一些介绍。包括是否用ubuntu,jdk8,maven等。寻找自己认为适合的就可以了。如果只是运行jar包,不需要在虚拟内打包,只需要一个包含jdk的就行了。
方案2,通过docker 的在线hub仓进行搜索然后下载。
官网打不开了(https://hub.docker.com/)
可以百度一个新国内镜像打开,比如Dockerhttps://hub-stage.docker.com/
打开以后,输入关键搜索,然后查看 。
根据选择版本,下载镜像即可。docker pull java:8u111-jre
下载完成以后,可以查看:docker images
一条命令运行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 logs jdemo --tail 10 仅查找头部或尾部的消息。
当然,docker logs 还支持按特定时间段查询日志
docker logs --since "2023-11-01T00:00:00" --until "2023-11-21T00:00:00"
我们启动应用时用了-d参数,表示后台启动。如果我们需要进一步对这个容器进行操作,比如安装一些应用或调整参数等,则可以进入这个容器进行操作。
docker exec -it jdemo bash(docker exec -it 容器别名 bash)
当我们通过docker exec进入一个容器以外,就和普通的虚拟机是一样的操作了,用exit退出。
注意:bash是表示启动容器后进入shell命令。有一些主机是bin/bash。
docker stop 容器别名.
docker rm 容器别名
注:当我们docker run时加了--rm参数时,stop以后就自动删除了,就不需要再删除了。
docker system df
显示docker磁盘使用情况docker system prune
删除未使用的数据docker system prune -a
删除所有数据,包括未使用的镜像,而不仅仅是dangling的镜像docker logs -f -t --tail=300 operation-backend
实时输出日志最后300行
当我们自己单应用时,可以这样测试,如果生产环境上需要采用sh脚本的方式,把上面的docker run命令写在一个sh脚本去执行。而不是单个命令。
当然,docker提供了Dockerfile,Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明,可以实现很强大的功能。包括对基础镜像进行修改以后打包成一个新的镜像。专业的运维还会结合docker的私有仓库对每个打包的镜像进行上传,这样可以实现发版的回滚操作。可以参见其他博友的内容Dockerfile详解-CSDN博客
由于docker的内容太多了,本文仅是用于抛砖引玉的作用,更多的内容就不再这篇里讲了,有兴趣的开发可以自行学习docker。当然k8s也很好用,k8s就是结合docker的实现应用的高可用的。
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。