centos8安装docker运行java文件
本文由个人总结,如需转载使用请标明原著及原文地址
这里是基于我前一篇搭的centos8服务器做的,如果yum baseos源或appstream源有问题可以去看看前一篇
https://blog.csdn.net/qq_36911145/article/details/129263830
1.安装docker
1.1配置docker yum源
在 /etc/yum.repos.d目录下创建docker.repo文件,并写入阿里的docker源
cd /etc/yum.repos.d
vi docker.repo
docker.repo文件里写入的内容,这里我用的是8.0版本的所以就用这个地址,不同版本可以到https://mirrors.aliyun.com/docker-ce/linux/centos找自己的版本,这个配置有一定的通用性,其实不用很精确的匹配
[docker]
name=docker-ce
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/8.0/x86_64/stable/
gpgcheck=0
enabled=1
1.2安装docker
yum install docker-ce
输入y继续安装
安装完成后可以用docker -v 命令查看
1.3启动docker
systemctl start docker
1.4设置docker开机自启
systemctl enable --now docker
重启服务器验证docker开机自启是否生效
systemctl status docker
1.5配置docker国内镜像源(可不配)
创建或修改daemon.json文件
vi /etc/docker/daemon.json
可配置多个,我这提供的1.网易 2.中国科技大学 3.docker中国区官方镜像
{"registry-mirrors": ["http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn","https://registry.docker-cn.com"]
}
然后重启docker服务用docker info查看
systemctl restart docker
docker info
2.docker容器使用
2.1查找docker镜像
https://hub.docker.com/
在搜索框内输入你要查找的镜像,我这要跑个简单的java项目,所以搜java的
2.2下载镜像
找到需要的镜像后,复制指令,在服务器上输入,就能下载到对应的镜像
docker pull java:openjdk-8u111-jre-alpine
alpine是linux一个极简的系统,比centos小了不是一点两点,所以我特意去找了个alpine系统的jdk镜像来用,和网上常用的java:8镜像对比,这四舍五入差了一个亿
2.3简单docker容器的创建及启动报错解决
2.3.1 docker run命令
这是正常运行和解决问题的步骤,不想走弯路就按2.3.2->2.3.3->2.3.1的顺序看,但我觉得学习解决问题的思路更重要点
创建并运行容器用到docker run命令下面是常用的一些参数
-i | 以交互模式运行容器,通常与 -t 同时使用 |
-t | 启动容器后,为容器分配一个命令行,通常与 -i 同时使用 |
-d | 守护进程,后台运行该容器 |
--name | 给容器命名,2个“-” |
-p | 端口映射 -p 宿主机端口:容器端口 |
对其他参数感兴趣可以看这https://blog.csdn.net/qq_45547688/article/details/125785419
docker run -itd --name demo1 -p 8091:8091 java:openjdk-8u111-jre-alpine /bin/sh
格式是:docker run 参数 使用的镜像 执行的命令
我这用的是alpine系统所以执行的是/bin/sh如果是centos的镜像应该是/bin/bash
2.3.2 runc报错
docker: Error response from daemon: failed to create shim task: OCI runtime create failed: unable to retrieve OCI runtime error (open /run/containerd/io.containerd.runtime.v2.task/moby/ad47b82ed6d9d6daafb5b079694c2bc5af0fd0f4607711a0b28eb52c3d8cbf0f/log.json: no such file or directory): runc did not terminate successfully: exit status 127: runc: symbol lookup error: runc: undefined symbol: seccomp_api_get
: unknown.
这时报错了,大致意思就是runc出问题了,那我们就来看下runc,输入runc或者runc -v回车
runc
这时报了这个错,通过网上查找,原因是没有安装libseccomp-devel
runc: symbol lookup error: runc: undefined symbol: seccomp_api_get
2.3.3安装libseccomp-devel
yum install libseccomp-devel
一般装完libseccomp-devel就行了,我另一台服务器装libseccomp-devel报了另一个错,说libseccomp版本太低导致libseccomp-devel不能装最新的,那么就给他更新下
如果libseccomp-devel能正常安装,就不用执行这个了
yum update libseccomp
安装完libseccomp-devel用runc -v查看runc的状态
然后用最开始的docker run指令创建并运行容器
docker ps可以查看当前启动的容器,docker ps -a可以查看所有容器,包括新创建和未启动的那些
2.4docker容器的简单使用
docker start 容器名 | 启动docker容器 |
docker stop 容器名 | 停止docker容器 |
docker restart 容器名 | 重启docker容器 |
docker exec -it 容器名 执行命令 | 进入到docker容器内 |
前三个没啥好说的,第四个举个栗子如下,-i 展示容器输入信息STDIN,-t 命令行交互模式,alpine执行/bin/sh,centos执行/bin/bash
docker exec -it demo1 /bin/sh
这个样子就是进到容器内部了,docker容器就是个服务器,你在你宿主机上能做的事里面都能做
玩腻了想出来就输入exit出来
exit
3.运行java文件
3.1使用dockerfile运行java文件
3.1.1创建dockerfile
首先创建个文件夹并进入,用cp命令将要运行的jar包复制过来
接着用vi创建dockerfile文件,并写入内容
mkdir /usr/local/docker-tmp2
cd /usr/local/docker-tmp2
cp /usr/local/docker-tmp/demo1.jar /usr/local/docker-tmp2/demo1.jar
vi demo2.dockerfile
dockerfile里的内容
# 使用的基础镜像
FROM java:openjdk-8u111-jre-alpine
# 将java文件拷进docker容器,第一个路径是宿主机路径,第二个是docker容器内路径,文件最好放在dockerfile同级或子级路径
ADD demo1.jar /usr/local/demo1.jar
# 开放的端口
EXPOSE 8091
# 容器运行后执行的命令,这里用CMD也行
ENTRYPOINT ["java","-jar","/usr/local/demo1.jar"]
3.1.2通过dockerfile创建docker镜像
写好dockerfile文件后用docker build创建docker镜像
-f 指定用于生成镜像的dockerfile文件
-t 给新创建的镜像命名,可以直接是名字,或者加冒号,冒号后加版本号
最后的空格和点(“ .”)一定要加,dockerfile构建镜像时是以docker引擎中展开的构建上下文中的文件,最后的点是指定镜像构建过程中的上下文环境为当前目录,像demo1.jar指的就是当前目录下的demo1.jar
docker build -f demo2.dockerfile -t java-project:1.0 .
3.1.3通过docker镜像创建容器
docker run -itd --name demo3 -p 8091:8091 java-project:1.0 /bin/sh
我的java项目用的是8091端口,这里将容器的8091端口映射到宿主机的8091端口上了,这时就可以通过访问宿主机的8091端口的方式来访问java项目了
访问不到可能是宿主机端口没开,自己开下
3.2麻烦的集聚各种冷门知识的运行java项目方法
这个是我用2.4的方法创建容器后,想怎么用现有容器改造成自启java的容器,研究了很多东西得出来的方法,虽然能用,但是没必要!!!!但是学到了很多docker的知识倒是真的,憨实基础有用,只是为了运行java没必要!!!!!
3.2.1将jar包拷到容器内
继续用2.4创建的容器来运行java
首先把jar包拷进去
方法一:用docker cp命令
docker cp 宿主机文件路径 docker容器名:docker容器路径
如果容器内的目录不存在要先进去创建目录
docker exec -it demo1 /bin/sh
mkdir /usr/local/web
exit
docker cp /usr/local/web/demo1.jar demo1:/usr/local/web/demo1.jar
方法二:找到挂在路径直接传进去
通过docker inspect找到MergedDir目录,这是docker容器在宿主机上存储空间的挂载点,所以在宿主机上的这个目录和docker容器内是互通,传到宿主机这个目录内就等于放到docker容器里了
docker inspect demo1
3.2.2修改容器启动时执行的命令
先关掉docker,不然修改容器配置无效
systemctl stop docker
先要找到docker容器的配置文件,还是用docker inspect,这次找ResolvConfPath,复制到文件夹那层resolv.conf不用
docker inspect demo1
进入到目录中,用vi打开config.v2.json文件
Path | 可执行文件 |
Args | 执行参数 |
Cmd | 启动容器时会执行的命令,如果用户启动容器时候指定了运行的命令,则会覆盖掉CMD指定的命令 |
Entrypoint | 启动容器时会执行的命令,如果用户启动容器时候指定了运行的命令,不会被docker run执行的命令参数覆盖。(追加效果:docker run命令之后的参数,会被当做参数传递给ENTRYPOINT,之后形成新的命令组合) |
这里只是做docker容器启动时自启java项目用Cmd或者Entrypoint都行
我们执行java -jar /usr/local/web/demo1.jar,这里可执行文件是java,-jar和/usr/local/web/demo1.jar是执行java的参数,所以做如下配置,修改完成后保存文件
保存后启动docker服务,然后查看容器配置,这时启动容器后就会自动运行java文件了,可通过映射的端口访问测试
systemctl start docker
docker start demo1
docker inscept demo1
访问不到可能是宿主机端口没开,自己开下
相关文章:

centos8安装docker运行java文件
本文由个人总结,如需转载使用请标明原著及原文地址 这里是基于我前一篇搭的centos8服务器做的,如果yum baseos源或appstream源有问题可以去看看前一篇 https://blog.csdn.net/qq_36911145/article/details/129263830 1.安装docker 1.1配置docker yum…...

Docker容器化部署.net core API
1.为API集成Docker环境。(VS自带,傻瓜式操作) 1.1 点击项目,右键,添加,选择Docker支持 1.2 找到项目根目录中的Dockerfile文件,这是VS刚刚帮我们自动生成的。进入和做如图标红地方修改。 把文…...
springcloud 服务调用feign、熔断hystrix、网关gateway
回归cloud的学习,对于springcloud的架构与原理以及性能的分析我们都在之前的文章里写过:springcloud架构的认识我们之前测试过eureka服务注册功能,它能很好的保存服务之间的通讯关系,是维系微服务通讯网之间的电话本,同…...

《C++ Primer》 第十二章 动态内存
《C Primer》 第十二章 动态内存 动态内存与智能指针 shared_ptr允许多个指针指向同一个对象;unique_ptr则“独占”所指向的对象,weak_ptr指向shared_ptr所管理的对象。这三种类型都定义在memory头文件中。 shared_ptr类:默认初始化的智能…...

多个关键字用or、and、包含、不包含动态拼接为正则表达式和SQL查询条件
目录前言校验思路1、存储方式2、实现图一实现图二实现结果最后前言 不知道大家有没有做过这种需求:在某字符串中,根据多个关键字去判断这串字符串是否满足条件。如下图: 亦或是 如果说要根据图二的关键字去数据库中查询符合条件的数据&a…...

初始Linux操作系统
个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。座右铭:海不辞水,故能成其大;山不辞石,故能成其高。个人主页:小李会科技的…...
【算法数据结构体系篇class12、13】:二叉树
一、判断二叉树是否是完全二叉树/*** 判断二叉树是否是完全二叉树** //判断层序遍历过程如果节点有右子树 没有左子树 那么就不是完全二叉树* //判断层序遍历过程如果遇到第一个节点是没有左或右子树的,也就是只有一个子节点或者没有,那么再往后层序遍历…...

数字IC手撕代码--联发科(总线访问仲裁)
题目描述当A、B两组的信号请求访问某个模块时,为了保证正确的访问,需要对这些信号进行仲裁。请用Verilog实现一个仲裁器,对两组请求信号进行仲后,要求:协议如图所示,请求方发送req(request&…...

白盒测试复习重点
白盒测试白盒测试之逻辑覆盖法逻辑覆盖用例设计方法1.语句覆盖2.判定覆盖(分支覆盖)3.条件覆盖4.判定条件覆盖5.条件组合覆盖6.路径覆盖白盒测试之基本路径测试法基本路径测试方法的步骤1.根据程序流程图画控制流图2.计算圈复杂度3.导出测试用例4.准备测试用例5.例题白盒测试总…...

学习C++这几个网站足矣
文章目录cppreferencecplusplusquick-bench[C 之父的网站](https://www.stroustrup.com/bs_faq.html)C提案[Cpp Core Guidelines](http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines)[C Super-FAQ](https://isocpp.org/faq)[learn c](https://www.learncpp.com/)[A…...
第十四届蓝桥杯模拟赛(第三期)——C语言版
1.找最小数 问题描述: 请找到一个大于 2022 的最小数,这个数转换成十六进制之后,所有的数位(不含前导 0)都为字母(A 到 F)。 请将这个数的十进制形式作为答案提交。 #include <stdio.h> int main(…...
Flutter Button 实例
大家好,我是 17。 在上篇文章 使用 Flutter Button 介绍了如何修改 button 的样式,本文来具体实践一下。 本文列举一些常用的 button 效果,以便在用到的时候方便使用。因为 ElevatedButton 最常用,所以大多以 ElevatedButton 举…...

好玩的docker项目,盒子刷的海思nas,挂载外接硬盘。qb种子
玩法思路(5条消息) 群晖qb下载,tr辅种_屿兮的博客-CSDN博客_群晖辅种qbittorrent简介及设置_哔哩哔哩_bilibiliqb下载器下载Transmission最好用的BT(PT)下载神器/超简单上手教你在NAS轻松部署/告别简陋三步让你升级全中文最新Web界面(BT下载/PT下载/NAS/…...

RabbitMQ的使用
1.初识MQ1.1.同步和异步通讯微服务间通讯有同步和异步两种方式:同步通讯:就像打电话,需要实时响应。异步通讯:就像发邮件,不需要马上回复。两种方式各有优劣,打电话可以立即得到响应,但是你却不…...

Selenium如何隐藏浏览器页面?
Selenium隐藏浏览器页面 背景 在工作,学习中,我们常常会使用selenium来获取网页上的数据,编完完整程序之后,实现真正意义上的自动化获取,此时我们会发现在运行中往往会弹出浏览器页面,在调试过程中&…...

基于Ant DesignPro Vue实现通过SpringBoot后台加载自定义菜单- 前后端分离
基于Ant DesignPro Vue实现通过SpringBoot后台加载自定义菜单- 前后端分离 本文想基于Ant DesignPro Vue构建的前端SpringBoot实现的后端接口服务,实现前后端分离开发和独立运行,业务场景是登录认证,认证成功后返回该用户相应权限范围内可见的…...

Acwing---843. n-皇后问题
n-皇后问题1.题目2.基本思想3.代码实现1.题目 n−皇后问题是指将 n 个皇后放在 nn 的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。 现在给定整数 n,请你输出所有的满足条件的棋子摆法。 …...

彻底搞清楚内存泄漏的原因,如何避免内存泄漏,如何定位内存泄漏
作为C/C开发人员,内存泄漏是最容易遇到的问题之一,这是由C/C语言的特性引起的。C/C语言与其他语言不同,需要开发者去申请和释放内存,即需要开发者去管理内存,如果内存使用不当,就容易造成段错误(segment fa…...

自动驾驶目标检测项目实战——基于深度学习框架yolov的交通标志检测
自动驾驶目标检测项目实战——基于深度学习框架yolov的交通标志检测 目前目标检测算法有很多,流行的就有faster-rnn和yolov,本文使用了几年前的yolov3框架进行训练,效果还是很好,当然也可以使用更高版本的Yolov进行实战。本代码使…...

flink兼容性验证
flink介绍:https://blog.csdn.net/weixin_43563705/article/details/107604693 一、安装启动 安装flink及其依赖 yum install java-1.8.0-openjdk curl tar mkdir -p /usr/local/flink wget https://mirrors.aliyun.com/apache/flink/flink-1.16.1/flink-1.16.1-bi…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...

全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...

10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...