当前位置: 首页 > news >正文

使用dockerfile手动构建JDK11镜像运行容器并校验

Docker官方维护镜像的公共仓库网站 Docker Hub 国内无法访问了,大部分镜像无法下载,准备逐步构建自己的镜像库。【转载aliyun官方-容器镜像服务 ACR】Docker常见问题

阿里云容器镜像服务ACR(Alibaba Cloud Container Registry)是面向容器镜像、Helm Chart等符合OCI标准的云原生制品安全托管及高效分发平台。ACR企业版支持全球同步加速、大规模和大镜像分发加速、多代码源构建加速等全链路加速能力,与容器服务ACK无缝集成,帮助企业降低交付复杂度,打造云原生应用一站式解决方案。

一、下载Linux下的JDK11包

1.1 下载 jdk-11.0.19_linux-x64_bin.tar.gz

Java SE Development Kit 11.0.19
需要Oracle账号登录后才能下载。
这里放一个其他博主公开的Oracle公共账号和密码

在这里插入图片描述

1.2 上传下载的JDK11包到CentOS中的新建文件夹mydockerfile中

建议:dockerfile文件和jdk包放在同一个文件夹下,这样不用build时用-f参数指定dockerfile的位置。
在这里插入图片描述
这里文件夹的名称写成了mydockfile,应该是mydockerfile,后续已经重命名改正:
在这里插入图片描述

二、编写dockerfile文件并执行docker build命令构建镜像

前提:安装配置好docker,可参考我这篇 基于CentOS7安装配置docker与docker-compose。

2.1 编写并上传dockerfile文件

我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
第一条FROM,指定使用哪个镜像源
RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。
然后,我们使用 dockerfile 文件,通过 docker build 命令来构建一个镜像。

注意:dockerfile文件要写上Linux的系统版本,我这里使用的是CentOS的系统,查询linux系统版本可参考我这篇
查看CentOS版本及系统位数与设置CentOS 7.9 2009 防火墙配置放开端口的命令与过程

dockerfile文件内容:

# 建立一个新的镜像文件,配置模板:新建立的镜像是以centos为基础模板
# 因为jdk必须运行在操作系统之上
#每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
#第一条FROM,指定使用哪个镜像源FROM centos:7.9.2009#维护者 作者 邮箱
MAINTAINER djcking <djc**4*****@qq.com>#RUN 指令告诉docker 在镜像内执行命令,安装了什么
#创建一个新目录来存储jdk文件
RUN  mkdir "/usr/local/java"#将jdk压缩文件复制到镜像中,它将自动解压缩tar文件
ADD jdk-11.0.19_linux-x64_bin.tar.gz   /usr/local/java# 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime# 设置环境变量
ENV JAVA_HOME /usr/local/java/jdk-11.0.19
ENV PATH $JAVA_HOME/bin:$PATH# VOLUME 指定了临时文件目录为/tmp
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp

上传dockerfile文件:
建议:dockerfile文件和jdk包放在同一个文件夹下,这样不用build时用-f参数指定dockerfile的位置。

在这里插入图片描述

2.2 执行docker build命令构建镜像

dockerfile文件、镜像-IMAGE,容器-CONTAINER三者的关系(个人学习理解):

1、docker build命令使用dockerfile文件中的配置来构建镜像-IMAGE2、docker run命令运行构建好的镜像-IMAGE来启动容器-CONTAINER;3、镜像-IMAGE是死的,因为它本质上就是为了生成容器而存在的,容器-CONTAINER是活的,因为最终运行服务时使用的是容器-CONTAINER

构建镜像命令-docker build:

参数说明:
-t :指定要创建的目标镜像名
.Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
//进入存放jdk包与dockerfile的目录mydockerfile
cd mydockerfile//-t 给新构建的镜像取名为java, 并设定版本为11
//注意最后有个点,代表使用当前路径的 Dockerfile 进行构建
//成功执行下面的docker build命令后,docker images 命令中,TAG就是11(镜像标签或者版本),Repository就是java,为镜像仓库源名。
docker build -t java:11 .

在这里插入图片描述
通过上图使用docker images命令 查看创建的jdk镜像已经在列表中存在,IMAGE ID也成功生成了。

docker images 各参数说明:REPOSITORY:表示镜像的仓库源名TAG:镜像的标签或版本IMAGE ID:镜像IDCREATED:镜像创建时间SIZE:镜像大小同一镜像仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 jdk仓库源里,有 111213....20 等多个不同的版本,我们使用 REPOSITORY:TAG 来定义并区分不同的镜像,例如jdk:11,jdk:12,jdk:13,jdk:20等。

三、通过镜像创建启动容器并校验

3.1 通过镜像创建启动容器


//运行该镜像 
//此命令使用镜像java:11,创建并启动容器,执行成功会根据算法返回一个字符串,是CONTAINER ID,即辨别容器的ID。
// --name djcjdk11 代表一个别名。
docker run -id  --name djcjdk11 java:11//docker run 参数说明:
-i:交互式操作-d:后台运行-t:终端。

docker ps命令查看正运行的容器(默认只显示CONTAINER ID的前12位,完整的容器ID有64位,但已经足以区分不同的容器):
在这里插入图片描述

3.2 校验

因为我们创建的 djcjdk11容器是的本源包是 jdk-11.0.19_linux-x64_bin.tar.gz,所以校验即检查JDK的版本。

//docker exec:推荐大家使用 docker exec 命令,因为此命令会退出容器终端,但不会导致容器的停止。
//可以使用NAMES即djcjdk11或者CONTAINER ID的前四位或完整的CONTAINER ID
//以下6个命令任意一个皆可
docker exec -it NAMES  bash 
docker exec -it CONTAINER ID  bash
docker exec -it CONTAINER ID前几位 bash
即
docker exec -it djcjdk11 bash 
docker exec -it 4001866f057c  bash
docker exec -it CONTAINER ID前几位 bash ,如 docker exec -it 4001  bash或者docker exec -it NAMES  /bin/bash 
docker exec -it CONTAINER ID  /bin/bash
docker exec -it CONTAINER ID前几位 /bin/bash
即
docker exec -it djcjdk11 /bin/bash
docker exec -it 4001866f057c /bin/bash
docker exec -it CONTAINER ID前几位 /bin/bash,如 docker exec -it 4001  /bin/bash//检测Java版本  java --version 或java -version
java --version 或java -version

在这里插入图片描述

四、命令截图一览

4.1 命令

//1-进入文件夹
cd /home/mydockerfile//2-构建镜像命令
//-t 给新构建的镜像仓库源取名为java, 并设定版本或者标签为为11  即TAG
docker build -t java:11 .//3-查看imagesdocker images//4-启动运行镜像
//此命令使用镜像java:11,创建并启动容器,执行成功会根据算法返回一个字符串,是CONTAINER ID,即辨别容器的ID。
docker run -id  --name djcjdk11 java:11//5-查看正在运行的容器
docker ps//6-进入容器
//docker exec:推荐大家使用 docker exec 命令,因为此命令会退出容器终端,但不会导致容器的停止。
docker exec -it djcjdk11 bash 
或
docker exec -it 4001 /bin/bash //7-检测Java版本  java --version 或java -version
java --version 或java -version--------其他命令---------//关闭容器 
//这里使用CONTAINER ID的前四位
docker stop 4001//docker logs  CONTAINER ID或者NAMES 可以查看容器内部的标准输出。
//-f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。
//补充:tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。
//tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。docker logs 4001或者 docker logs djcjdk11
docker logs -f 4001或者docker logs -f djcjdk11

镜像和容器更多操作可以参考我这两篇文章:
Docker基本操作之删除容器Container和删除镜像IMAGE
Docker容器基本操作之启动-停止-重启

4.2 截图

在这里插入图片描述
在这里插入图片描述

五、参考资料

Docker 镜像使用
Docker 容器使用
Docker Dockerfile
Docker Compose
Docker 仓库管理
Linux tail 命令
查看CentOS版本及系统位数与设置CentOS 7.9 2009 防火墙配置放开端口的命令与过程
实战:用dockerfile创建镜像实现springboot项目容器化
实战:用docker-compose容器化springboot项目
【Docker】手动构建 OracleJDK11 镜像
【SpringBoot + Docker】编写Dockerfile安装jdk11.0.3,并部署SpringBoot项目
Docker - 安装openjdk11并启动运行
Docker之dockerfile制作jdk镜像
docker 文件编写,和jdk11运行java的Dockerfile文件
Linux rm命令 删除文件夹

相关文章:

使用dockerfile手动构建JDK11镜像运行容器并校验

Docker官方维护镜像的公共仓库网站 Docker Hub 国内无法访问了&#xff0c;大部分镜像无法下载&#xff0c;准备逐步构建自己的镜像库。【转载aliyun官方-容器镜像服务 ACR】Docker常见问题 阿里云容器镜像服务ACR&#xff08;Alibaba Cloud Container Registry&#xff09;是面…...

编程语言学习笔记-架构师和工程师的区别,PHP架构师之路

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责…...

Streamlit 讲解专栏(十):数据可视化-图表绘制详解(上)

文章目录 1 前言2 st.line_chart&#xff1a;绘制线状图3 st.area_chart&#xff1a;绘制面积图4 st.bar_chart&#xff1a;绘制柱状图5 st.pyplot&#xff1a;绘制自定义图表6 结语 1 前言 在数据可视化的世界中&#xff0c;绘制清晰、易于理解的图表是非常关键的。Streamlit…...

其他行业跳槽转入计算机领域简单看法

其他行业跳槽转入计算机领域简单看法 本人选择从以下几个方向谈谈自己的想法和观点。 先看一下总体图&#xff0c;下面会详细分析 如何规划才能实现转码 自我评估和目标设定&#xff1a;首先&#xff0c;你需要评估自己的技能和兴趣&#xff0c;确定你希望在计算机领域从事…...

Unity制作一个简单的登入注册页面

1.创建Canvas组件 首先我们创建一个Canvas画布&#xff0c;我们再在Canvas画布底下创建一个空物体&#xff0c;取名为Resgister。把空物体的锚点设置为全屏撑开。 2.我们在Resgister空物体底下创建一个Image组件&#xff0c;改名为bg。我们也把它 的锚点设置为全屏撑开状态。接…...

常用游戏运营指标DAU、LTV及参考范围

文章目录 前言运营指标指标范围参考值留存指标的意义总结 前言 作为游戏人免不了听到 DAU 、UP值、留存 等名词&#xff0c;并且有些名词听起来还很像&#xff0c;特别是一款上线的游戏&#xff0c;这些游戏运营指标是衡量游戏业务绩效和用户参与度的重要数据&#xff0c;想做…...

标准模板库STL——deque和list

deque概述 deque属于顺序容器&#xff0c;称为双端队列容器 底层数据结构是动态二维数组&#xff0c;从整体上看&#xff0c;deque的内存不连续 初始数组第一维数量为2&#xff0c;必要时进行2倍扩容 每次第一维扩容后&#xff0c;原来数组第二维元素从新数组下标为OldSize/2的…...

分类预测 | MATLAB实现WOA-CNN-BiGRU-Attention数据分类预测

分类预测 | MATLAB实现WOA-CNN-BiGRU-Attention数据分类预测 目录 分类预测 | MATLAB实现WOA-CNN-BiGRU-Attention数据分类预测分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.Matlab实现WOA-CNN-BiGRU-Attention多特征分类预测&#xff0c;多特征输入模型&…...

C++ Primer Plus 第6版 读书笔记(10) 第十章 类与对象

第十章 类与对象 在面向对象编程中&#xff0c;类和对象是两个重要的概念。 类&#xff08;Class&#xff09;是一种用户自定义的数据类型&#xff0c;用于封装数据和操作。它是对象的模板或蓝图&#xff0c;描述了对象的属性&#xff08;成员变量&#xff09;和行为&#xf…...

基于C++ 的OpenCV绘制多边形,多边形多条边用不用的颜色绘制

使用基于C的OpenCV库来绘制多边形&#xff0c;并且为多边形的不同边使用不同的颜色&#xff0c;可以按照以下步骤进行操作&#xff1a; 首先&#xff0c;确保你已经安装了OpenCV库并配置好了你的开发环境。 导入必要的头文件&#xff1a; #include <opencv2/opencv.hpp&g…...

(六)、深度学习框架中的算子

1、深度学习框架算子的基本概念 深度学习框架中的算子&#xff08;operator&#xff09;是指用于执行各种数学运算和操作的函数或类。这些算子通常被用来构建神经网络的各个层和组件&#xff0c;实现数据的传递、转换和计算。 算子是深度学习模型的基本组成单元&#xff0c;它们…...

Redis实现共享Session

Redis实现共享Session 分布式系统中&#xff0c;sessiong共享有很多的解决方案&#xff0c;其中托管到缓存中应该是最常用的方案之一。 1、引入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM…...

网络通信原理UDP协议(第五十课)

UDP协议:用户数据包协议,无连接、不可靠,效率高 字段长度描述Source Port2字节标识哪个应用程序发送(发送进程)。Destination Port2字节标识哪个应用程序接收(接收进程)。Length2字节UDP首部加上UDP数据的字节数,最小为8。Checksum2字节覆盖UDP首部和UDP数据,是可…...

43、TCP报文(一)

本节内容开始&#xff0c;我们正式学习TCP协议中具体的一些原理。首先&#xff0c;最重要的内容仍然是这个协议的封装结构和首部格式&#xff0c;因为这里面牵扯到一些环环相扣的知识点&#xff0c;例如ACK、SYN等等&#xff0c;如果这些内容不能很好的理解&#xff0c;那么后续…...

【JavaScript】使用js实现滑块验证码功能与浏览器打印

滑块验证码 效果图&#xff1a; 实现思路&#xff1a; 根据滑块的最左侧点跟最右侧点&#xff0c; 是否在规定的距离内【页面最左侧为原点】&#xff0c;来判断是否通过 html代码&#xff1a; <!DOCTYPE html> <html><head><title>滑动图片验证码&…...

【使用群晖远程链接drive挂载电脑硬盘】

文章目录 前言1.群晖Synology Drive套件的安装1.1 安装Synology Drive套件1.2 设置Synology Drive套件1.3 局域网内电脑测试和使用 2.使用cpolar远程访问内网Synology Drive2.1 Cpolar云端设置2.2 Cpolar本地设置2.3 测试和使用 3. 结语 前言 群晖作为专业的数据存储中心&…...

easyx图形库基础4:贪吃蛇

贪吃蛇 一实现贪吃蛇&#xff1a;1.绘制网格&#xff1a;1.绘制蛇&#xff1a;3.控制蛇的默认移动向右&#xff1a;4.控制蛇的移动方向&#xff1a;5.生成食物6.判断蛇吃到食物并且长大。7.判断游戏结束&#xff1a;8.重置函数&#xff1a; 二整体代码&#xff1a; 一实现贪吃蛇…...

哈夫曼树(赫夫曼树、最优树)详解

目录 哈夫曼树&#xff08;赫夫曼树、最优树&#xff09;详解 哈夫曼树相关的几个名词 什么是哈夫曼树 构建哈夫曼树的过程 哈弗曼树中结点结构 构建哈弗曼树的算法实现 哈夫曼树&#xff08;赫夫曼树、最优树&#xff09;详解 哈夫曼树相关的几个名词 路径&#xff1a;…...

智慧建筑工地平台,通过信息化技术、物联网、人工智能技术,实现对施工全过程的实时监控、数据分析、智能管理和优化调控

智慧工地是指通过信息化技术、物联网、人工智能技术等手段&#xff0c;对建筑工地进行数字化、智能化、网络化升级&#xff0c;实现对施工全过程的实时监控、数据分析、智能管理和优化调控。智慧工地的建设可以提高工地的安全性、效率性和质量&#xff0c;降低施工成本&#xf…...

Springboot 实践(8)springboot集成Oauth2.0授权包,对接spring security接口

此文之前&#xff0c;项目已经添加了数据库DAO服务接口、资源访问目录、以及数据访问的html页面&#xff0c;同时项目集成了spring security&#xff0c;并替换了登录授权页面&#xff1b;但是&#xff0c;系统用户存储代码之中&#xff0c;而且只注册了admin和user两个用户。在…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...