当前位置: 首页 > 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两个用户。在…...

手把手教你魔改YOLOv8:从CSPPC到SPPELAN的实战调优(新手友好版)

1. 为什么需要魔改YOLOv8&#xff1f; 目标检测是计算机视觉领域最基础也最实用的技术之一&#xff0c;而YOLOv8作为当前最流行的实时检测框架&#xff0c;凭借其出色的速度和精度平衡&#xff0c;已经成为工业界和学术界的首选。但在实际项目中&#xff0c;我们经常会遇到一些…...

Guohua Diffusion 数据库集成方案:MySQL管理生成任务与作品元数据

Guohua Diffusion 数据库集成方案&#xff1a;MySQL管理生成任务与作品元数据 如果你用过Guohua Diffusion这类图像生成工具&#xff0c;可能会遇到一个头疼的问题&#xff1a;生成的图片越来越多&#xff0c;管理起来越来越乱。今天想找上周生成的那张“赛博朋克风格的城市夜…...

智能记账本:OpenClaw+Qwen3.5-9B自动归类信用卡消费邮件

智能记账本&#xff1a;OpenClawQwen3.5-9B自动归类信用卡消费邮件 1. 为什么需要自动化记账工具 每次收到银行消费短信时&#xff0c;我都会陷入两难&#xff1a;手动记账太繁琐&#xff0c;不记账又会导致月度消费分析失真。传统记账软件需要手动输入金额和分类&#xff0c…...

OpenClaw技能市场指南:Qwen3.5-4B-Claude适配的20个实用模块

OpenClaw技能市场指南&#xff1a;Qwen3.5-4B-Claude适配的20个实用模块 1. 为什么需要关注技能市场&#xff1f; 第一次接触OpenClaw时&#xff0c;我以为它只是个能执行简单命令的自动化工具。直到在ClawHub技能市场里发现"会议纪要生成器"模块&#xff0c;才意识…...

喜马拉雅FM专辑下载器:离线收听与个人音频管理的实用方案

喜马拉雅FM专辑下载器&#xff1a;离线收听与个人音频管理的实用方案 【免费下载链接】xmly-downloader-qt5 喜马拉雅FM专辑下载器. 支持VIP与付费专辑. 使用GoQt5编写(Not Qt Binding). 项目地址: https://gitcode.com/gh_mirrors/xm/xmly-downloader-qt5 如果您经常收…...

3分钟轻松获取无水印抖音视频:DouYinBot全能解析工具使用指南

3分钟轻松获取无水印抖音视频&#xff1a;DouYinBot全能解析工具使用指南 【免费下载链接】DouYinBot 抖音无水印下载 项目地址: https://gitcode.com/gh_mirrors/do/DouYinBot 在短视频创作的浪潮中&#xff0c;每个创作者都曾遇到这样的困扰&#xff1a;精心挑选的抖音…...

OpenClaw日志分析进阶:百川2-13B-4bits量化模型自动错误诊断

OpenClaw日志分析进阶&#xff1a;百川2-13B-4bits量化模型自动错误诊断 1. 为什么需要自动化日志分析 深夜两点&#xff0c;我的手机突然震动起来——服务器又报警了。强撑着睡意打开终端&#xff0c;面对满屏的报错日志&#xff0c;那种无力感相信每个运维人都深有体会。传…...

别再只仿真了!手把手教你用LabVIEW+USRP-2920搭建真实无线通信链路(BPSK/QPSK调制实战)

从仿真到实战&#xff1a;LabVIEW与USRP-2920构建无线通信链路的完整指南 在通信工程领域&#xff0c;仿真与硬件实现之间往往存在一道难以逾越的鸿沟。许多工程师能够熟练使用MATLAB或LabVIEW进行通信系统仿真&#xff0c;但当面对USRP-2920这样的射频硬件时&#xff0c;却常常…...

Vue3 的 JSX 函数组件,每次更新都会重新运行吗?

我用最直白、最无歧义、100%准确的方式&#xff0c;只回答你这一个问题&#xff1a; ✅ 最终答案&#xff08;背它&#xff09; 在 Vue3 中&#xff1a; 你写的 JSX 函数组件&#xff0c;整个函数 只会在组件初始化时运行 1 次&#xff01; 更新时&#xff0c;整个函数 不会重新…...

基于comsol的三相电力变压器电磁场与电路耦合计算的电压电流及磁通密度分布分析

comsol三相电力变压器电磁场和电路耦合计算&#xff0c;可以得到变压器高低压绕组电压电流分布以及变压器磁通密度分布三相电力变压器建模这事儿&#xff0c;说难不难说简单也不简单。前两天用COMSOL折腾了个带电路耦合的模型&#xff0c;顺手把绕组电流分布和铁芯磁通都摸清楚…...