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

news2024/11/26 14:29:11

目录

一.jdkv.1.0的制作

启动虚拟机,进入centos

创建文件夹上传jdk的安装包,和在同级目录下编写Dockerfile文件

 执行Dockerfile文件,初次依赖镜像的时候会下载相应镜像​​​​​​​

二.jdk2.0的制作

三.jdk3.0的制作

四.将制作好的镜像上传阿里云


一.jdkv.1.0的制作

启动虚拟机,进入centos

 查看jdk的镜像 此时是没有的 所以我们需要自己制作

创建文件夹上传jdk的安装包,和在同级目录下编写Dockerfile文件

 编写Dockerfile文件

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

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

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

#4.一个复制命令,把jdk安装文件复制到镜像中,语法:ADD <src>... <dest>,注意:jdk*.tar.gz使用的是相对路径
ADD jdk-8u221-linux-x64.tar.gz /javaxc_docker/jdk/

#5.配置环境变量
ENV JAVA_HOME=/javaxc_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"]

 

 上传安装包

 

 查看是否上传成功

 执行Dockerfile文件,初次依赖镜像的时候会下载相应镜像

 docker build -t jdk8:v1.0 .

 查看是否构建成功

查看镜像

docker images

 创建并启动容器

docker run -it j容器id或者容器名称 /bin/bash

 检查是否有jdk的环境

java -version

二.jdk2.0的制作

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镜像,它的体积非常小

     对比常用的、没有压缩过的基础镜像(查看当前的:latest标签):

     Alpine - 4.8MB

     centos - 124.8 MB

     Debian - 125.1MB

     Centos - 196MB

   4.建议使用Alpine Linux 3.10.0版本,这也是 v3.10 稳定系列的首个版本

     alpine:3.10

下载镜像

docker pull alpine:latest

 创建并编辑dockerfile

vi Dockerfile

 注:dockerfile内容

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

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

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

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

执行dockerfile创建镜像

docker build -t jdk8:v2.0 .

创建并启动容器

docker create -it jdk8:v2.0    

docker start 容器ID

进入容器  

docker exec -it 容器ID /bin/sh

   注1:最后是sh而非bash

   也可直接 启动并进入容器

 docker run -it --name myjdk 容器ID

测试jdk

java -version

   注1:docker exec -it 容器ID /bin/sh 默认使用当前帐号(即root)登入,通过whoami命令可以查看当前用户名,

        还可以通过如下命令切换到其它帐号

        docker exec -it --user root <容器ID> /bin/sh  

       

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

        大家可以自己下来,创建一个容器试一下

   注3:最后制作完成后的镜像大小为400M左右

三.jdk3.0的制作

首先下载jre,

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

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

使用jre的安装包

 #解压

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

      #查看jre大小(瘦身前229M)

      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

 

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

      cd ../

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

将之前的v2.0的版本备份 再重新写Dockerfile

创建并编辑dockerfile

      注1:dockerfile内容如下

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

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

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

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

 执行dockerfile创建镜像

docker build -t jdk8:v3.0 .

如果出现以下问题:

 只需要修改指定的基础镜像

 再执行创建镜像

查看一下

四.将制作好的镜像上传阿里云

进入阿里云的官网:

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

登录或者注册

 创个人实例

 

 

 绑定第一个账号

 

 

 

 🆗 返回之前 上传

 上传成功

 

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

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

相关文章

一文解读机密容器的崛起和发展

在 2022 云栖大会龙蜥峰会云原生专场上&#xff0c;来自阿里云操作系统技术专家冯世舫和Intel 系统软件工程部高级研发经理朱江云分享了《机密容器的崛起和发展》技术演讲&#xff0c;以下为本次演讲内容&#xff1a; 机密容器是 CNCF 的 一个 Sandbox 项目&#xff0c;用于解…

第一章 linux的发展

第一章 linux的发展一、操作系统的出现二、linux的出现三、linux的发展一、操作系统的出现 大部分先进产品的出现必定是为了军事服务的&#xff0c;起初的大型计算机也同样是为了军事服务的&#xff0c;而操作计算机的人也不是程序员&#xff0c;而是科学家。二战时期&#xf…

DVWA靶场中SQL注入

DVWA靶场中SQL注入1.DVWA靶场中SQL注入1.1.SQL Injection1.1.1.Low级别1.1.2.Medium级别1.1.3.High级别1.2.SQL Injection(Blind)1.2.1.方式1.2.2.Low级别1.2.3.Medium级别1.2.4.High级别1.DVWA靶场中SQL注入 1.1.SQL Injection 1.1.1.Low级别 1&#xff09;判断注入类型当输…

高中数理化杂志高中数理化杂志社高中数理化编辑部2022年第21期目录

高考全关注《高中数理化》投稿&#xff1a;cn7kantougao163.com 直线与圆的方程高考热点赏析 廖永福; 1-4 一道课本例题到一道高考试题的衍变之路 高磊; 4-8 圆的多种定义形式在解题中的应用 李光彬;邵建凤; 9-10 从2021年全国新高考Ⅰ卷第21题说起 王菊;张琥;…

碳交易机制下考虑需求响应的综合能源系统优化运行(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

接口测试(五)—— PyMySQL增删改查、数据库工具类封装

目录 数据库操作应用场景 一、PyMySQL操作数据库 1、安装PyMySQL 2、PyMySQL操作步骤 3、事务的概念 4、PyMySQL连接数据库 4.1 建立连接方法 4.2 入门案例 5、PyMySQL操作数据库 5.1 SQL 语法 5.2 数据库查询 5.3 案例&#xff08;查询&#xff09; 5.4 数据库UI…

代码随想录训练营第七天

专题&#xff1a;哈希表 题目&#xff1a;四数相加 题目简单&#xff1a;把四个数组分成两队&#xff0c;然后用map&#xff0c;保存前两个数组的元素之和&#xff0c;&#xff08;key,val&#xff09;key保存的是前两个数组的元素之和的数值&#xff0c;val保存的是数值对应…

PDF设置密码保护的两种方法

PDF文件可以根据需要&#xff0c;设置两种密码来保护文件。 需要保护文件内容&#xff0c;不想PDF被随意打开&#xff0c;我们可以设置打开密码&#xff0c;这样只有输入正确的密码才能打开文件。 在编辑器中打开PDF后&#xff0c;找到菜单中【保护】选项下的【密码加密】&am…

SpringCloud01

1.认识微服务 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢&#xff1f; 1.0.学习目标 了解微服务架构的优缺点 1.1.单体架构 单体架构&#xff1a;将业务的所有功能集…

33-98-spark-核心编程-RDD算子和任务阶段等

33-spark-核心编程-RDD&#xff1a; 1、RDD的创建&#xff0c;4中方式。分别是从内存中创建&#xff0c;从文件中创建&#xff0c;从其他RDD创建和new RDD&#xff0c;后两者不常用。 创建&#xff1a;big-data-study\Spark-demo\src\main\java\spark\core\com\zh\rdd\builde…

PTA-基础编程题目集(函数题)

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【[PTA刷题训练营]】 目录6-1 简单输出整数6-2 多项式求值&#xff08;重点掌握&#xff09;6-3 简单求和6-4 求自定类型元素的平均6-5 求…

医院陪诊小程序怎么开发-医院陪诊小程序源码功能

目前医院陪诊新型行业已经占据了很大的市场所在&#xff0c;我们去医院看病找医生挂号帮忙取药有时候去外地人生地不熟的 自己转半天摸索不过来浪费时间 而且有时候一个人需要陪同比较放心&#xff0c;所以呢衍生出来了 热门的陪诊师 如何开发&#xff1f; 开发无非就是几种 …

如何为 Longhorn 扩展对象存储能力

作者&#xff1a; 王海龙&#xff0c;Rancher 中国社区技术经理&#xff0c;Linux Foundation APAC Evangelist&#xff0c;负责 Rancher 中国技术社区的维护和运营。拥有 8 年的云计算领域经验&#xff0c;经历了 OpenStack 到 Kubernetes 的技术变革&#xff0c;无论底层操作…

软件包管理器RPM与yum

1、RPM安装软件包 安装单个rpm软件包 下载JDK8u221的rpm软件包 链接&#xff1a;https://pan.baidu.com/s/1fYKNNM02GBh-cOUuajkBIg 提取码&#xff1a;yg53 上传JDK8u221的rpm软件包到虚拟机/opt目录 命令&#xff1a;rpm -ivh jdk-8u221-linux-x64.rpm 查看JDK版本 命令&a…

C语言split分割字符串

C语言split分割字符串。 //以下解法的前提是&#xff0c;先把所有环变成1.无环路&#xff0c;2.一个环没有扣住3个及以上的其他环 voidmain(){ intarray[16]{0}; //init,array[1]xxx;根据输入初始化数组&#xff0c;如1-2&#xff0c;则&#xff0c;array[1]2,... intHash…

在线人事管理系统

开发工具(eclipse/idea/vscode等)&#xff1a;idea 数据库(sqlite/mysql/sqlserver等)&#xff1a;mysql 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a;本系统按功能分为以下几个模块: “简易云”是这个系统的名字 &#xff08;1&#xff09;登录页面&#xff1a;实…

【HMS Core】华为统一扫码服务ScanKit如何获取具体条码的类型?

1、问题描述 项目中接入了华为的统一扫码服务SDK&#xff0c;识别过程正常&#xff0c;但是目前有个需求&#xff0c;需要在扫码完成之后根据条码的具体类型处理接下来的业务。 问题是&#xff1a;识别完条形码后&#xff0c;如何拿到具体的条形码和二维码类型&#xff0c;比…

从零搭建本地pypi镜像源1:快速体验

前言&#xff1a; 许多公司&#xff0c;出于数据安全与知识产权的原因&#xff0c;在公司内部搭建局域网进行算法开发。配置一个本地的pypi镜像源对工程开发十分重要。搭建本地pypi镜像源的工具有多种&#xff0c;本文主要介绍pip2pi方法。 第一步&#xff1a;新建项目&#…

间接采购品类多,机械制造企业如何破局制胜优化间采管理?

受贸易政策和能源结构转型等宏观因素的叠加影响&#xff0c;当前机械制造业的市场环境正在迅速变化。过去几十年来&#xff0c;全球经济的有利形势迅速逆转&#xff0c;复杂的国际形势也影响了区域乃至全球贸易平衡。在国内&#xff0c;疫情频发、产业升级、能源转型、“双碳”…

10个提高生产力的 Linux 命令与技巧,用完直接起飞

文章目录一、前言二、使用tab键进行补全2.1 使用Tab键补全命令2.2 使用Tab键补全路径2.3 使用Tab键补全参数三、切换回上一个工作目录四、返回用户主目录五、搜索您使用过的命令六、移至行首或行尾七、快速删除八、使用 less读取文件九、格式化输出结语一、前言 在本文中&…