使用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文件中的配置来构建镜像-IMAGE;2、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仓库源里,有 11、12、13....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 国内无法访问了,大部分镜像无法下载,准备逐步构建自己的镜像库。【转载aliyun官方-容器镜像服务 ACR】Docker常见问题 阿里云容器镜像服务ACR(Alibaba Cloud Container Registry)是面…...

编程语言学习笔记-架构师和工程师的区别,PHP架构师之路
🏆作者简介,黑夜开发者,全栈领域新星创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责…...

Streamlit 讲解专栏(十):数据可视化-图表绘制详解(上)
文章目录 1 前言2 st.line_chart:绘制线状图3 st.area_chart:绘制面积图4 st.bar_chart:绘制柱状图5 st.pyplot:绘制自定义图表6 结语 1 前言 在数据可视化的世界中,绘制清晰、易于理解的图表是非常关键的。Streamlit…...

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

Unity制作一个简单的登入注册页面
1.创建Canvas组件 首先我们创建一个Canvas画布,我们再在Canvas画布底下创建一个空物体,取名为Resgister。把空物体的锚点设置为全屏撑开。 2.我们在Resgister空物体底下创建一个Image组件,改名为bg。我们也把它 的锚点设置为全屏撑开状态。接…...

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

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

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

C++ Primer Plus 第6版 读书笔记(10) 第十章 类与对象
第十章 类与对象 在面向对象编程中,类和对象是两个重要的概念。 类(Class)是一种用户自定义的数据类型,用于封装数据和操作。它是对象的模板或蓝图,描述了对象的属性(成员变量)和行为…...

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

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

Redis实现共享Session
Redis实现共享Session 分布式系统中,sessiong共享有很多的解决方案,其中托管到缓存中应该是最常用的方案之一。 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报文(一)
本节内容开始,我们正式学习TCP协议中具体的一些原理。首先,最重要的内容仍然是这个协议的封装结构和首部格式,因为这里面牵扯到一些环环相扣的知识点,例如ACK、SYN等等,如果这些内容不能很好的理解,那么后续…...

【JavaScript】使用js实现滑块验证码功能与浏览器打印
滑块验证码 效果图: 实现思路: 根据滑块的最左侧点跟最右侧点, 是否在规定的距离内【页面最左侧为原点】,来判断是否通过 html代码: <!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:贪吃蛇
贪吃蛇 一实现贪吃蛇:1.绘制网格:1.绘制蛇:3.控制蛇的默认移动向右:4.控制蛇的移动方向:5.生成食物6.判断蛇吃到食物并且长大。7.判断游戏结束:8.重置函数: 二整体代码: 一实现贪吃蛇…...

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

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

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

OpenCV-Python中的图像处理-GrabCut算法交互式前景提取
OpenCV-Python中的图像处理-GrabCut算法交互式前景提取 Python-OpenCV中的图像处理-GrabCut算法交互式前景提取 Python-OpenCV中的图像处理-GrabCut算法交互式前景提取 cv2.grabCut(img: Mat, mask: typing.Optional[Mat], rect, bgdModel, fgdModel, iterCount, mode…) img…...

leetcode原题 后继者:找出二叉搜索树中指定节点的“下一个”节点
题目: 设计一个算法,找出二叉搜索树中指定节点的“下一个”节点(也即中序后继)。 如果指定节点没有对应的“下一个”节点,则返回null。 示例: 输入: root [2,1,3], p 1 2 / \ 1 3 输出: 2 解题思路…...

pyqt5 QlineEdit 如何设置只能输入数字
在 PyQt(Python中的一个GUI库)中,可以使用QLineEdit小部件的setValidator()方法来限制用户输入的内容。要让QLineEdit只能输入数字,你可以使用QIntValidator或QDoubleValidator。下面是一个示例代码,展示如何设置只能输…...

ubuntu中安装python
最简单方便的是 apt 使用第三方的 ppa 源,然后直接 apt 安装 python3.9 安装 software-properties-common 获取add-apt-repository命令:apt install -y software-properties-common添加第三方的 ppa 源:add-apt-repository ppa:deadsnakes/p…...

LeetCode150道面试经典题-- 快乐数(简单)
1.题目 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1&am…...

科研论文配图----第一章笔记
第一章笔记 科研论文的绘制基础 科研论文配图的分类与构成 根据呈现方式,科研论文配图可分为线性图、灰度图、照片彩图和综合配图 4 种类型。 其中,线性图是主要和常用的配图类型,也是本书重点介绍的配图类型。 科研论文配图的格式和尺寸 格…...

OpenHarmony Meetup 广州站 OpenHarmony正当时—技术开源
招募令 OpenHarmony Meetup 广州站 火热招募中,等待激情四射的开发者,线下参与OpenHarmonyMeetup线下交流 展示前沿技术、探讨未来可能、让你了解更多专属OpenHarmony的魅力 线下参与,先到先得,仅限20个名额! 报名截止时间8月23日…...

如何使用PHP Smarty模板实现静态页面生成
首先,你需要从Smarty官网下载这个神奇的文件。然后,你需要在你的PHP文件中引入Smarty类。就像这样: require_once(Smarty.class.php);现在,我们要创建一个Smarty实例。这就像打开一个新的文件,只不过这个文件是可以和…...

【 Cocos Creator 项目实战】益智游戏《2048》(附带完整源码工程)
本文乃Siliphen原创,转载请注明出处 目录 游戏介绍 概述 游戏整体流程 游戏框架设计 主要流程控制类 本文项目的代码组织结构 构建游戏世界 数字方块 地图 触摸手势识别 防触摸抖动 判断用户输入的方向 地图 任意大小的地图 初始化地图大小 地图绘制…...

剑指Offer68-II.二叉树的最近公共祖先 C++
1、题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以…...