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

目录

 一. Alpine制作jdk镜像

        1.1 alpine Linux 简介

        1.2 基于alpine制作jdk8镜像

        1.2.1 下载镜像

        1.2.2 创建并编辑Dockerfile

        1.2.3 上传文件

        1.2.4 执行Dockerfile构建镜像

        1.2.5 测试

 二. Alpine制作jre镜像 

        2.1 首先下载jre或者上传

        2.2 解压

        2.3 测试

        2.4 返回上级目录,重新打包jre

        2.5 创建并编辑Dockerfile

        2.6 执行dockerfile创建镜像

        2.7 测试

三. 镜像上传阿里云及下载

        3.1 前期准备

        3.2 push (推) 镜像 


一. Alpine制作jdk镜像

        1.1 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.2 基于alpine制作jdk8镜像

        1.2.1 下载镜像
docker pull alpine:latest

与centos的区别: 

        1.2.2 创建并编辑Dockerfile
#进到data目录
cd /home/javacy/data/#创建文件夹(这一步如果你有,则可以不用创建,直接编辑对应的文件夹即可)
touch myjdkDockerfile1#编辑文件夹
vim myjdkDockerfile1

将以下内容复制进去

#1.指定基础镜像,并且必须是第一条指令
FROM alpine:latest
#FROM alpine:3.10#2.指明该镜像的作者和其电子邮件
MAINTAINER javacy "javacy@qq.com"#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /javacy_docker/jdk#4.将一些安装包复制到镜像中,语法:ADD/COPY <src>... <dest>
## ADD与COPY的区别:ADD复制并解压,COPY仅复制
ADD jdk-8u221-linux-x64.tar.gz /javacy_docker/jdk/
## glibc安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中
COPY glibc-2.29-r0.apk /javacy_docker/jdk/
COPY glibc-bin-2.29-r0.apk /javacy_docker/jdk/
COPY glibc-i18n-2.29-r0.apk /javacy_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=/javacy_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"]

        按 i 键进入到编辑模式,内容写完后,按 esc 键退出编辑模式,并按  :wq 进行保存和退出vim模式 

        1.2.3 上传文件

        我们刚刚在myjdkDockerfile1文件夹中进行编辑的时候,像glibc,jdk1.8.0_221这是软件都是没有的,这时我们需要在别的地方进行一个资源的下载并且将它上传到对应的位置上

上传成功: 

        1.2.4 执行Dockerfile构建镜像

大家如果不是取名叫myjdkDockerfile1的话,记得更改成你的命名

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

 创建成功:

        1.2.5 测试
docker run -it --name mj1 + 容器ID(docker images查出来 是jdk8 v2.0的版本)

成功

 二. Alpine制作jre镜像 

编译环境(写代码)的是class文件,运行文件是jre

        2.1 首先下载jre或者上传

下载地址是https://www.java.com/en/download/manual.jsp,大概是77M

博主所用的资料为:/jre-8u221-linux-x64.tar.gz

        2.2 解压

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

查看jre大小(瘦身前230M)

du -sh jre1.8.0_221

进入jre目录,并执行瘦身命令

cd jre1.8.0_221

执行瘦身命令(命令见资料,瘦身后111M)

\换行 |隔行运行命令

#删除文本文件
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

        2.3 测试

返回上级,再次测试du -sh jre1.8.0_221大小

        2.4 返回上级目录,重新打包jre

删除原来的jre压缩包,再重新压缩

#返回上一级后
cd ../#删除之前220M的
rm -rf jre-8u221-linux-x64.tar.gz#进行压缩
tar -zcvf jre1.8.0_221.tar.gz jre1.8.0_221

        2.5 创建并编辑Dockerfile

vim myjdkdockerfile2
#1.指定基础镜像,并且必须是第一条指令
FROM alpine:latest
#FROM alpine:3.10#2.指明该镜像的作者和其电子邮件
MAINTAINER javacy "javacy@qq.com"#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /javacy_docker/jdk#4.将一些安装包复制到镜像中,语法:ADD/COPY <src>... <dest>
## ADD与COPY的区别:ADD复制并解压,COPY仅复制
## 注意~~~上传的瘦身后的jre
ADD jre1.8.0_221.tar.gz /javacy_docker/jdk/
## glibc安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中
COPY glibc-2.29-r0.apk /javacy_docker/jdk/
COPY glibc-bin-2.29-r0.apk /javacy_docker/jdk/
COPY glibc-i18n-2.29-r0.apk /javacy_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=/javacy_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"]

        2.6 执行dockerfile创建镜像

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

        2.7 测试

查看(里面有id)
docker imagesdocker run -it --name mj2 容器iDjava -version

:openjdk:8-jdk-alpine这个镜像就和我们自己创建的镜像是一样,只不过JDK瘦身过了,体积更小。

三. 镜像上传阿里云及下载

        3.1 前期准备

1. 注册阿里云账号

阿里云官方网站链接:开放云原生应用-云原生(Cloud Native)-云原生介绍 - 阿里云

2. 登录账号

3. 配置 Docker 加速器

注:搜索“容器镜像服务”

4. 创建企业版实例

5. 登录容器镜像服务控制台

6. 创建个人实例

7. 设置登录密码

8. 创建命名空间

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

10. 然后会出现一个小弹窗(进入Codeup),我们复制地址到浏览器中进行操作

11. 点击新建库

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

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

14. 输入名称,选择过期时间,作用范围全部勾选上,确认后点击立即创建

15. 复制密码

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

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

18. 输入仓库名称,选择仓库类型

19. 创建镜像仓库

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

        3.2 push (推) 镜像 

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

注意:一定要跟着自己的操作指南进行操作,每个人填写的信息不同,登录指令也会不一样

2. 将本地镜像打个标签

docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/javacy/images-test:[镜像版本号]

3. 推送本地镜像到阿里云

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

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

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

相关文章

云手机的境外舆情监控应用——助力品牌公关

在当今数字化时代&#xff0c;社交媒体已成为品牌传播和互动的主要平台。随之而来的是海量的信息涌入&#xff0c;品牌需要及时了解并应对海外社交媒体上的舆情变化。本文将介绍如何通过云手机进行境外舆情监控&#xff0c;更好地帮助企业公关及时作出决策。 1. 境外舆情监控与…

Linux——动态库和静态库

目录 前言 一.静态库 1.1生成静态库 1.2 库搜索路径 1.3 静态库优点 1.4 静态库缺点 二.动态库 2.1 生成动态库 2.2 使用动态库 2.3 运行动态库 2.4 动态库的优点 2.5 动态库的缺点 三.链接过程 四.如何创建和管理库 五.总结 前言 Linux系统中的库&#xff08;…

【linux】linux系统调用及文件IO操作

一、系统调用 1、概述 系统调用&#xff1a; 就是操作系统内核 提供给用户可以操作内核 一组函数接口。用户 借助 系统调用 操作内核。比如用户可以通过文件系统相关的调用请求系统打开文件、关闭文件或读写文件&#xff0c;可以通过时钟相关的系统调用获得系统时间或设置定时…

golang关键字channel介绍

Golang 关键字 channel 的用法和原理 Golang 是一门支持并发编程的语言&#xff0c;它提供了一种特殊的类型&#xff1a;channel&#xff0c;用于在不同的 goroutine 之间传递数据&#xff0c;实现同步和通信。channel 是 Go 语言高性能并发编程中的核心数据结构和机制。本文将…

如何创建测试计划?这些要考虑到

以下为作者观点&#xff1a; 创建一个彻底和有效的测试计划对软件测试的成功至关重要。它可以帮助识别过程中可能出现的潜在问题或问题。 什么是测试计划&#xff1f; 测试计划是一份文件&#xff0c;概述了软件测试过程的策略、目标、资源和时间表。测试计划通常包括一些细…

Golang 锁介绍

在并发编程中&#xff0c;锁是一种常用的同步机制&#xff0c;用来保护共享资源的安全访问和修改。Golang 作为一门支持并发的语言&#xff0c;提供了两种主要的锁类型&#xff1a;互斥锁&#xff08;Mutex&#xff09;和读写锁&#xff08;RWMutex&#xff09;。本文将介绍这两…

uniapp 项目 浏览器chrome使用vue devtool 识别不了 in not detect

问题 uniapp的项目&#xff0c;vue2&#xff0c; chrome 分析 添加了运行时&#xff0c;指定模板h5.html 指定的h5.html重置了运行根目录&#xff0c;导致了vue dev tool在运行时&#xff0c;chrome上识别不了。 解决&#xff1a; 方法1&#xff1a; 只能调试的时候,不加sati…

java常用应用程序编程接口(API)——Arrays概述

前言&#xff1a; 学到Arrays了&#xff0c;整理下心得。打好基础&#xff0c;daydayup! Arrays 用来操作数组的一个工具类 Arrays的常见方法 方法名说明public static String toString(类型[] arr)返回数组的内容public static int[ ] copyOfRange(类型[ ] arr,启示索引&…

【操作系统学习笔记】文件管理1.1

【操作系统学习笔记】文件管理1.1 参考书籍: 王道考研 视频地址: Bilibili I/O 设备的基本概念与分类 I/O 设备就是可以将数据输入到计算机&#xff0c;或者可以接收计算机输出数据的外部设备&#xff0c;属于计算机中的硬件设备。UNIX系统将外部设备抽象为一种特殊的文件&a…

2021 年 6 月青少年软编等考 C 语言一级真题解析

目录 T1. 数的输入和输出思路分析 T2. (a / b) c 的值思路分析 T3. 大写字母的判断思路分析 T4. 特殊求和思路分析 T5. 硬币翻转思路分析 T1. 数的输入和输出 输入一个整数和双精度浮点数&#xff0c;先将浮点数保留 2 2 2 位小数输出&#xff0c;然后输出整数。 时间限制&…

SpringMVC框架①

目录 一、SpringMVC概述 1. 什么是MVC 2. 什么是SpringMVC 3. springMVC特点 二、HellWorld 1. 开发环境 2. 创建maven工程 3. 配置web.xml 4. 创建请求控制器 5. 创建springMVC的配置文件 6. 测试HelloWorld 三、RequestMapping注解 1、RequestMapping功能 2、Re…

Android如何实现复制到剪贴板

文章目录 核心代码关于权限举例 在 Android 开发中&#xff0c;可以使用 ClipboardManager 来复制文本到剪贴板。以下是一个简单的示例代码&#xff0c;演示如何将文本复制到剪贴板&#xff1a; 核心代码 // 获取剪贴板管理器 val clipboardManager getSystemService(Contex…

Linux - 安装 maven(详细教程)

目录 一、下载二、安装三、配置环境变量四、镜像资源配置 一、下载 官网&#xff1a;https://maven.apache.org/download.cgi 打开 maven 的官网下载页面&#xff0c;点击 bin.tar.gz 文件链接 即可下载最新版本的 maven 如果想要下载旧版本的 meven&#xff0c;则点击 Maven…

图形系统开发实战课程:进阶篇(上)——9.空间算法(一)

图形开发学院&#xff5c;GraphAnyWhere 课程名称&#xff1a;图形系统开发实战课程&#xff1a;进阶篇(上)课程章节&#xff1a;“图形样式”原文地址&#xff1a;https://www.graphanywhere.com/graph/advanced/2-9.html 第九章 空间算法&#xff08;一&#xff09; \quad 在…

SpringBoot 自定义映射规则resultMap collection一对多

介绍 collection是封装一对多关系的&#xff0c;通常情况下是一个列表&#xff0c;association是一对一&#xff0c;通常情况是一个对象。例如&#xff1a;查询班级下所有的学生&#xff0c;一个班级可以有多个学生&#xff0c;这就是一对多。 案例 有一个学生表&#xff0c…

基于 Redis 的 JWT令牌失效方案

应用场景 当用户登录状态到登出状态时&#xff0c;对应的JWT的令牌需要设置为失效状态&#xff0c;这时可以使用基于 Redis 的黑名单方案来实现JWT令牌失效。 基于 Redis 的黑名单方案 当用户需要登出系统时&#xff0c;将用户携带的Token进行解析&#xff0c;解码出JWT令牌…

Go语言中的时间控制:定时器技术详细指南

Go语言中的时间控制&#xff1a;定时器技术详细指南 引言定时器基础创建和使用time.Timer使用time.Ticker实现周期性任务定时器的内部机制小结 使用time.Timer实现简单的定时任务创建和启动定时器停止和重置定时器定时器的实际应用小结 利用time.Ticker处理重复的定时任务创建和…

这里推荐一款unity3d人物动物控制器详细的等学会再写文章

unity3d Animal Controller 1.4.0a 动物NPC行为控制器 动物控制器&#xff08;AC&#xff09;是一个基于脚本架构的动画框架控制器。它适用于任何动物或人形角色的根运动或原地动画。 人和动物的各种动作都有; 小白必选、 我只是运行乐demo就感觉牛 demo路径&#xff1a;Asset…

Python不换行print在终端中不显示

问题描述 当使用不换行 print 即 print(‘test, end) 后立即关闭标准输出 sys.stdout open(os.devnull, w)则 print 的内容不会显示在正常的终端上&#xff08;例外是 PyCharm 中的终端能够正常显示&#xff09;。 复现问题 复现该问题的简易代码&#xff1a; import sys,…

基于pytorch的手写体识别

一、环境搭建 链接: python与深度学习——基础环境搭建 二、数据集准备 本次实验用的是MINIST数据集&#xff0c;利用MINIST数据集进行卷积神经网络的学习&#xff0c;就类似于学习单片机的点灯实验&#xff0c;学习一门机器语言输出hello world。MINIST数据集&#xff0c;可以…