Docker之自定义镜像上传阿里云

news2024/11/17 5:51:12

目录

一、Alpine制作jdk镜像

1. 下载镜像

2. 创建并编辑Dockerfile

3. 执行Dockerfile构建镜像

4. 测试

二、Alpine制作jre镜像 

1. 下载jre

2. 上传gz压缩包,删除无用的文件,并重新压缩

3. 创建并编辑Dockerfile

4. 执行Dockerfile并构建镜像

5. 测试

三、将镜像上传阿里云


一、Alpine制作jdk镜像

alpine Linux简介

   1.Alpine Linux是一个轻型Linux发行版,它不同于通常的Linux发行版,Alpine采用了musl libc 和

     BusyBox以减少系统的体积和运行时的资源消耗。

   2.Alpine Linux提供了自己的包管理工具:apk(注意:ubuntu中是apt-get),我们可以通过https://pkgs.alpinelinux.org/packages 查询包信息

   3.Alpine Docker镜像继承了Alpine Linux发行版的这些优势,相比于其他Linux Docker镜像,它的体积非常小

1. 下载镜像

docker pull alpine:latest

2. 创建并编辑Dockerfile

#1.指定基础镜像,并且必须是第一条指令
FROM alpine:latest
#FROM alpine:3.10

#2.指明该镜像的作者和其电子邮件
MAINTAINER lijie "lijie@qq.com"

#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /lijie_docker/jdk

#4.将一些安装包复制到镜像中,语法:ADD/COPY <src>... <dest>
## ADD与COPY的区别:ADD复制并解压,COPY仅复制
ADD jdk-8u221-linux-x64.tar.gz /lijie_docker/jdk/
## glibc安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中
COPY glibc-2.29-r0.apk /lijie_docker/jdk/
COPY glibc-bin-2.29-r0.apk /lijie_docker/jdk/
COPY glibc-i18n-2.29-r0.apk /lijie_docker/jdk/

#5.更新Alpine的软件源为阿里云,因为从默认官源拉取实在太慢了
RUN echo http://mirrors.aliyun.com/alpine/v3.10/main/ > /etc/apk/repositories && \
    echo http://mirrors.aliyun.com/alpine/v3.10/community/ >> /etc/apk/repositories
RUN apk update && apk upgrade

#6.运行指定的命令
## Alpine linux为了精简本身并没有安装太多的常用软件,apk类似于ubuntu的apt-get,
## 用来安装一些常用软V件,其语法如下:apk add bash wget curl git make vim docker
## wget是linux下的ftp/http传输工具,没安装会报错“/bin/sh:   wget: not found”,网上例子少安装wget
## ca-certificates证书服务,是安装glibc前置依赖
RUN apk --no-cache add ca-certificates wget \
    && wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub \
    && apk add glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk \
    && rm -rf /var/cache/apk/* glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk

#7.配置环境变量
ENV JAVA_HOME=/lijie_docker/jdk/jdk1.8.0_221
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH

#容器启动时需要执行的命令
#CMD ["java","-version"]

3. 执行Dockerfile构建镜像

docker build -f MyjdkDockerfile -t jdk8:v2.0 .

4. 测试

docker run -it --name mj1 镜像ID

java -version

二、Alpine制作jre镜像 

1. 下载jre

下载地址是https://www.java.com/en/download/manual.jsp

最终下载的资料为:/jre-8u221-linux-x64.tar.gz

2. 上传gz压缩包,删除无用的文件,并重新压缩

#解压

tar -zxvf jre-8u221-linux-x64.tar.gz

#查看jre大小

du -sh jre1.8.0_221/

#进入jre目录

cd jre1.8.0_221/

#执行瘦身命令

#删除文本文件
rm -rf COPYRIGHT LICENSE README release THIRDPARTYLICENSEREADME-JAVAFX.txtTHIRDPARTYLICENSEREADME.txt Welcome.html \
#删除其他无用文件
rm -rf lib/plugin.jar \
lib/ext/jfxrt.jar \
bin/javaws \
lib/javaws.jar \
lib/desktop \
plugin \
lib/deploy* \
lib/*javafx* \
lib/*jfx* \
lib/amd64/libdecora_sse.so \
lib/amd64/libprism_*.so \
lib/amd64/libfxplugins.so \
lib/amd64/libglass.so \
lib/amd64/libgstreamer-lite.so \
lib/amd64/libjavafx*.so \
lib/amd64/libjfx*.so

#返回上级目录,删除原来的jre压缩包,再重新压缩

cd ../

rm -rf jre-8u221-linux-x64.tar.gz

tar -zcvf jre1.8.0_221.tar.gz jre1.8.0_221

3. 创建并编辑Dockerfile

vim MyjdkDockerfile2

内容如下:

#1.指定基础镜像,并且必须是第一条指令
FROM alpine:latest
#FROM alpine:3.10

#2.指明该镜像的作者和其电子邮件
MAINTAINER lijie "lijie@qq.com"

#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /lijie_docker/jdk

#4.将一些安装包复制到镜像中,语法:ADD/COPY <src>... <dest>
## ADD与COPY的区别:ADD复制并解压,COPY仅复制
## 注意~~~上传的瘦身后的jre
ADD jre1.8.0_221.tar.gz /lijie_docker/jdk/
## glibc安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中
COPY glibc-2.29-r0.apk /lijie_docker/jdk/
COPY glibc-bin-2.29-r0.apk /lijie_docker/jdk/
COPY glibc-i18n-2.29-r0.apk /lijie_docker/jdk/

#5.更新Alpine的软件源为阿里云,因为从默认官源拉取实在太慢了
RUN echo http://mirrors.aliyun.com/alpine/v3.10/main/ > /etc/apk/repositories && \
    echo http://mirrors.aliyun.com/alpine/v3.10/community/ >> /etc/apk/repositories
RUN apk update && apk upgrade

#6.运行指定的命令
## Alpine linux为了精简本身并没有安装太多的常用软件,apk类似于ubuntu的apt-get,
## 用来安装一些常用软V件,其语法如下:apk add bash wget curl git make vim docker
## wget是linux下的ftp/http传输工具,没安装会报错“/bin/sh:   wget: not found”,网上例子少安装wget
## ca-certificates证书服务,是安装glibc前置依赖
RUN apk --no-cache add ca-certificates wget \
    && wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub \
    && apk add glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk \
    && rm -rf /var/cache/apk/* glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk

#7.配置环境变量
## 注意~~~没有jdk啦,直接指向jre
ENV JAVA_HOME=/lijie_docker/jdk/jre1.8.0_221
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH

#容器启动时需要执行的命令
#CMD ["java","-version"]

4. 执行Dockerfile并构建镜像

docker build -f MyjdkDockerfile2 -t jdk8:v3.0 .

5. 测试

docker run -it --name mj2 镜像ID

java -version

三、将镜像上传阿里云

 #进入阿里网站

开放云原生应用-云原生(Cloud Native)-云原生介绍 - 阿里云

#搜索“容器镜像服务”

#创建企业版实例

#登录容器镜像服务控制台

#创建个人实例

#设置登录密码

#创建命名空间

#选择代码源,进行账号绑定

#进入Codeup

#点击新建库

#创建完成后,回到首页,点击右上角的小头像,选择个人设置

#选择个人访问令牌,点击创建访问令牌

#输入名称,选择过期时间,作用范围全部勾选上

#复制密码

#再返回代码源,绑定账号,名称要与令牌名称一致,输入刚刚复制的令牌密码

#点击镜像仓库,选择命名空间,再创建镜像仓库

#输入仓库名称,选择仓库类型

#创建镜像仓库

#创建完成后,根据操作指南进行操作

#回到连接工具操作,先登录阿里账号,输入密码

#将本地镜像打个标签

#推送本地镜像到阿里云

#在镜像版本里面就可以看到上传的镜像了

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

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

相关文章

【电商干货】5分钟了解电商数据API测试完整流程,建议收藏!可获取免费测试key!

电商API是什么&#xff1f; API是application programming interface&#xff08;应用程序接口&#xff09;的简称&#xff0c;是一些预先定义的函数。目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力&#xff0c;而又无需访问源码&#xff0c;或理解内部…

CentOS安装GUI图形界面

CentOS安装图形界面 CentOS minimal环境安装图形界面。 列出所有可用的Environment Groups yum group list yum groupinfo "GNOME Desktop"选择GNOME Desktop软件包组进行安装 yum groupinstall -y GNOME Desktop1 如果要通过GUI配置网络需要安装Server with GU…

删除有序数组中的重复项Ⅱ

问题 给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 说明…

有哪些视频媒体?邀请视频媒体报道活动的好处

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 视频媒体在当今的媒体生态中占据了重要的地位。以下是一些主要的视频媒体类型&#xff1a; 电视台&#xff1a;如中央电视台、各省级卫视台、地方电视台等&#xff0c;他们拥有专业的视…

vue2后台管理系统demo,包含增删查改、模糊搜索、分页

因一直敲小程序&#xff0c;vue不熟练&#xff0c;自己练手项目&#xff0c;就包含增删查改以及模糊搜索分页 一、页面简单但功能齐全 二、数据是mock模拟 三、启动步骤 1、 json-server --watch data.json 启动mock数据 2、npm i 下载依赖 3、npm run serve 四、github地址…

PSO-CNN-LSTM多输入时序预测|粒子群算法优化的卷积-长短期神经网络时序预测(Matlab)——附代码+数据

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 四、完整程序数据分享下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台…

Flutter(四):SingleChildScrollView、GridView

SingleChildScrollView、GridView 遇到的问题 以下代码会报错: class GridViewPage extends StatefulWidget {const GridViewPage({super.key});overrideState<GridViewPage> createState() > _GridViewPage(); }class _GridViewPage extends State<GridViewPage&g…

go并发模式之----阻塞/屏障模式

常见模式之一&#xff1a;阻塞/屏障模式 定义 顾名思义&#xff0c;就是阻塞等待所有goroutine&#xff0c;直到所有goroutine完成&#xff0c;聚合所有结果 使用场景 多个网络请求&#xff0c;聚合结果 大任务拆分成多个子任务&#xff0c;聚合结果 示例 package main ​…

两台电脑异地怎么共享文件?

在现代社会中&#xff0c;无论是个人用户还是企事业单位&#xff0c;都经常面临着跨地域的文件共享需求。由于各种限制和条件的限制&#xff0c;如网络环境、设备限制等&#xff0c;可能导致文件共享变得非常困难。本文将介绍一款名为【天联】的组网产品&#xff0c;通过它可以…

mysql快速生成1000万的测试数据

创建存储过程 DELIMITER //CREATE PROCEDURE generate_data() BEGINDECLARE i INT DEFAULT 1;-- 创建表CREATE TABLE IF NOT EXISTS test_table (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255),age INT,email VARCHAR(255));-- 插入1000万行数据WHILE i < 10000000…

Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验(前导)

ACM9238 高速双通道ADC模块自助服务手册AD9238 Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验&#xff08;一&#xff09;-CSDN博客 一、AD9238 模块在各方面参数性能上与AD9226保持一致。但是在设计上优化了信号调理电路&#xff0c;将单端信号先转成差分信号&#xff0c…

新闻稿软文投放推广发布需要注意什么

在全球化的背景下&#xff0c;各国之间的联系与互动变得越来越频繁。无论是经济、文化还是科技领域&#xff0c;各国之间的交流和合作都在不断加深。而在这个信息爆炸的互联网时代&#xff0c;人们获取信息的主要途径也逐渐转向了网络。 在这种情况下&#xff0c;软文推广成为…

node 之 解决下包速度慢的问题

1.为什么下包速度慢 在使用 npm 下包的时候,默认从国外的https://registry.npmis.org/ 服务器进行下载&#xff0c;此时&#xff0c;网络数据的传输需要经过漫长的海底光缆&#xff0c;因此下包速度会很慢。 2.淘宝npm 镜像服务器 淘宝在国内搭建了一个服务器&#xff0c;专门把…

Unity之ConversaDialogueSystem 对话插件使用

一、插件下载或购买 官方购买地址&#xff1a;Conversa Dialogue System | 可视化脚本 | Unity Asset Store 百度网盘地址&#xff1a;提取码&#xff1a;syq1 此插件没有官方案例&#xff0c;插件作者也明确回复说后期不会出教程&#xff0c;所以此教程根据插件demo案例进行学…

QT C++实践|超详细数据库的连接和增删改查操作|附源码

0&#xff1a;前言 &#x1faa7; 什么情况需要数据库? 1 大规模的数据需要处理&#xff08;比如上千上万的数据量&#xff09;2 需要把数据信息存储起来&#xff0c;无论是本地还是服务上&#xff0c;而不是断电后数据信息就消失了。 如果不是上面的原因化&#xff0c;一般…

计算机网络-典型网络组网架构

前面基本网络知识已经能够满足中小企业的需要了&#xff0c;今天来看下一些基本网络组网架构。 首先网络是分层架构&#xff0c;从接入层到汇聚层再到核心层&#xff0c;然后接入运营商出口。内部包括有线网络、无线网络&#xff0c;出口一般可以使用路由器或者防火墙进行安全防…

人才测评工具 找准需求才能测出效果

怎么挖掘人才&#xff1f;怎么利用人才&#xff1f; 让每个员工发挥出最大的优势&#xff1f; 让每个员工奋斗在最适合的岗位&#xff1f; 每个HRer都考虑过&#xff0c;每个HR也都有自己独特的见解。 1、找准测评目的 我们都希望测评是全面的&#xff0c;360度的。要是仔…

有多少成年人学英语,全靠八卦和腹肌?

昨个儿&#xff0c;“知识大航海”群里针对老龄化问题讨论的非常激烈。 我挺喜欢这种氛围的&#xff0c;只要大家不将争论上升到地域歧视人身攻击就可以。 很多事情没有绝对的对与错&#xff0c;经过计论&#xff0c;能够开悟心智&#xff0c;这未尝不是一件好事呀。 最后&…

“平民化”非结构数据处理

在全球信息产业高速发展的背景下&#xff0c;IDC预测&#xff0c;2018 到 2025 年之间&#xff0c;全球产生的数据量将会从 33 ZB 增长到 175 ZB&#xff0c; 复合增长率27%&#xff0c;其中超过 80%的数据都会是处理难度较大的非结构化数据&#xff0c;如文档、文本、图形、图…

32-树-在每个树行中找最大值

这是树的第32篇算法&#xff0c;力扣链接。 给定一棵二叉树的根节点 root &#xff0c;请找出该二叉树中每一层的最大值。 示例1&#xff1a; 输入: root [1,3,2,5,3,null,9] 输出: [1,3,9] 层级遍历似乎天生适合解这道题&#xff1a; func largestValues(root *TreeNode) []…