centos8安装docker运行java文件

news2024/11/24 17:06:11

本文由个人总结,如需转载使用请标明原著及原文地址

这里是基于我前一篇搭的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

访问不到可能是宿主机端口没开,自己开下 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/385554.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

惠普战66pro如何选购内存条?一篇文章讲解清楚

笔记本:惠普 ZHAN66 PRO CPU:Intel Core™ i-8565U CPU 1.80GHz 内存条:Samsung PS: 如果有需要更换硬盘的可以看我之前发的文章,博主进行了长时间的测试。 硬盘选购长测评 文章目录前言一、内存是什么?二、如何操作呢…

错误:EfficientDet网络出现“No boxes to NMS“并且mAP:0.0的解决方案

近日,在使用谷歌新推出来的一个网络EfficientDet进行目标检测训练自己的数据集的时候,出现了如下错误: 其中项目开源地址是:https://github.com/toandaominh1997/EfficientDet.Pytorch 上面截图中的1和2代表我的类别名称。读者可…

【计算机二级python】综合题题目

计算机二级python真题 文章目录计算机二级python真题一、八十天环游世界二、八十天环游世界 问题一二、八十天环游世界 问题二一、八十天环游世界 附件中保存1个文本文件,分别对应2个问题‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬…

315线上知识竞赛答题活动方案及模板分享

315线上知识竞赛答题活动方案及模板分享在315国际消费者权益日来临之际, 很多单位推出有奖知识竞答, 希望大家在了解专业知识的同时, 还可以拿到自己喜欢的奖品!这是消费者委员会和监管局联合举办的“315消费知识在线有奖竞答”活…

Springboot怎么集成Thymeleaf模板引擎?

Thymeleaf介绍Thymeleaf,是一个XML/XHTML/HTML模板引擎,开源的java库,可以用于SpingMVC项目中,用于代替JSP、FreeMarker或者其他的模板引擎;页面与数据分离,提高了开发效率,让代码重用更容易。S…

【JavaScript速成之路】JavaScript流程控制

📃个人主页:「小杨」的csdn博客 🔥系列专栏:【JavaScript速成之路】 🐳希望大家多多支持🥰一起进步呀! 文章目录前言1,流程控制2,分支结构2.1,if语句2.2&…

时机将至,名创优品或将再掀起一波消费热浪

北京时间2月28日,名创优品发布2023财年中报,财报显示,2023财年第二季度营收规模有所收窄,但净利润、毛利率、门店数量均实现了不错的增长,总体表现可圈可点。 (资料来源:富途牛牛) …

PIC单片机的快速代码生成和调试过程

1.相关工具说明:MCC ...................................Pic的代码模板软原始安装包:mcc-installer-5.2.2-windows.exeMPLAB X IDE ........................... 集成开发环境原始安装包:MPLABX-v6.00-windows-installer.exe编译环境&#x…

自动驾驶目标检测项目实战——基于深度学习框架yolov的交通标志检测

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

八股总结(一)C++语法、内存管理、新标准、STL

layout: post title: 八股总结(一)C语法、内存管理、新标准、STL description: 八股总结(一)C语法、内存管理、新标准、STL tag: C 文章目录基础语法语言特性面向对象的三大特性?C中新增了string,它与C语言…

Acwing---843. n-皇后问题

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

数据库调优策略

1.数据库调优的措施 1.1.调优的目标 尽可能节省系统资源,以便系统可以提供更大负荷的服务。(吞吐量更大)合理的结构设计和参数调整,以提高用户操作 响应的速度。(响应速度更快)减少系统的瓶颈,提高MySQL数据库整体的性能 1.2.如何定位调优…

Qt 绘制图表 - Qt Charts版

一、前言 自从 Qt 发布以来,给广大跨平台界面研发人员带来了无数的福利。但是Qt自己却一直没有提供自带的图表库,这就使得 QWT、QCustomPlot 等第三方图表库有了巨大的生存空间,为了降低开发成本,大家都涌向了这些第三方库。这种…

appium的安装详解

安装appium 爬虫手机APP需要实现自动化,所以要使用appnium来实现点击,输入,滑动等操作。由于appnium的安装较为繁琐,所以特意整理一篇文章来展示安装的详细过程过程中。 安装appnium共有3个步骤 安装 Android SDK安装 JDK安装 …

W800系列|ST-LINK|STM32最小版|HEX文件|CKLINK|DebugServer|学习(3):自制cklink调试工具

硬件准备 1.stm32最小系统板:stm32c8t6 2.stlink下载器:stlink v2版本 软件安装: 1、STM32 ST-LINK Utility(官网下载) 2、csky IDE: 剑池CDK集成开发环境V2.18.2 https://occ.t-head.cn/community/download?id…

链接投票二维码制作制作投票链接视频选举投票制作

关于微信投票,我们现在用的最多的就是小程序投票,今天的网络投票,在这里会教大家如何用“活动星投票”小程序来进行投票。我们现在要以“信赖挚友”为主题进行一次投票活动,我们可以在在微信小程序搜索,“活动星投票”…

activiti整合springBoot其他操作

如果单纯使用activiti进行流程的自动控制,是可以实现的。但是通常我们都需要结合自定义的表,便于在流程执行中更加清晰的看到每一个流程实例节点的具体信息。关联自定义表与activiti表才能完成真正的业务 BusinessKey关联 // 定义businessKey Test pub…

【UML+OOPC嵌入式C语言开发】使用C语言实现一个面向对象语言才能够实现的类

文章目录简述OOPC开发环境知识讲解函数示例类的实现示例接口实现示例(前面两部分有点无聊,如果大家没兴趣看可以直接从知识讲解开始看) 简述OOPC oopc,是一种轻量级的面向对象的C语言编程框架, LW_OOPC是Light-Weight …

学习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…

从上海分时电价机制调整看转供电用户电能计费

安科瑞 耿敏花2022年12月16日,上海市发改委发布《关于进一步完善我市分时电价机制有关事项的通知》(沪发改价管〔2022〕50号)。通知明确上海分时电价机制,一般工商业及其他两部制、大工业两部制用电夏季(7、8、9月)和冬季&#xf…