docker自定义镜像与上传

news/2024/4/15 5:40:56/文章来源:https://blog.csdn.net/weixin_72997875/article/details/136413007
  1. 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

 基于alpine制作JDK8镜像

#1.下载镜像

   docker pull alpine:latest

 2.创建并编辑dockerfile
 

touch Dockerfile 创建vi 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仅复制

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"]

3.执行dockerfile创建镜像

docker build -t jdk8:v2.0 .

4.创建并启动容器

docker create -it jdk8:v2.0 创建    docker start 容器ID 启动

 5.进入容器

docker exec -it 容器ID /bin/sh 

 注1:最后是sh而非bash

   也可直接 启动并进入容器

 docker run -it --name myjdk 容器ID

 

  #6.测试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左右

 Alpine制作jre镜像

Docker容器之最小JRE基础镜像

#1.首先下载jre,

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

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

   #2.rz上传至centos,并删除无用的文件,并重新压缩

      #解压

      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

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

      cd ../

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

3.创建并编辑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"]

4.执行dockerfile创建镜像

      docker build -t jdk8:v3.0 .

   #5.创建并启动容器

      docker create -it jdk8:v3.0    

      docker start 容器ID

 #6.进入容器   

      docker exec -it 容器ID /bin/sh

 #7.测试jdk

      java -version

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

        另外,openjdk和jdk也是有一定区别的,大家可以看下资料“14 OpenJDK与JDK的区别分析 - 简书.mht”了解一下

注2:Alpine制作JDK8镜像是有时区问题的,可以使用时区查看命令看一下

    三个版本的jdk镜像结果如下:

V1.0:centos7+jdk1.8制作而成

V2.0:alpine3.10+jdk1.8制作而成

V3.0:alpine3.10+jre1.8+瘦身命令制作而成

Docker镜像上传至阿里云

将Docker镜像上传至阿里云(或从阿云下载镜像)

   ## 前期准备

   #1.注册阿里云账户

   阿里云官方网站链接:https://dev.aliyun.com

   #2.登陆账户

   #3.配置Docker加速器

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

   #4.创建镜像仓库的命名空间

   例如:javaxl

   #5.创建镜像仓库(创建镜像仓库时要绑定一个代码托管网站,例如:github)

   例如:image-test

   ## push(推)镜像

   ##将镜像推送到Registry

   #1.登录到阿里云的doker仓库,--username为阿里云的用户名,另外,密码为开通镜像服务时设置的密码,

   #  忘记密码可以点击菜单:“容器镜像服务”->“默认实例”-->“访问凭证”进行修改

   docker login --username=javaxl registry.cn-shenzhen.aliyuncs.com

   #2.为本地镜像添加tag

   docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/javaxl/alpine_jre:[镜像版本号]

   #3.推送镜像(jdk8-alpine:1.0)

   docker push registry.cn-shenzhen.aliyuncs.com/javaxl/alpine_jre:[镜像版本号]

实例:

docker tag 238f4a774e9b registry.cn-shenzhen.aliyuncs.com/javaxl/alpine_jre:v1.0

docker push registry.cn-shenzhen.aliyuncs.com/javaxl/alpine_jre:v1.0

   ## pull(拉)镜像

   #1.登录到阿里云的doker仓库

   docker login --username=javaxl registry.cn-shenzhen.aliyuncs.com

   #从Registry中拉取镜像

   docker pull registry.cn-shenzhen.aliyuncs.com/javaxl/alpine_jre:[镜像版本号]

   注1:仓库(Repository )是集中存放镜像的地方,又分公共仓库和私有仓库

        有时候容易把仓库与注册服务器(register)混淆 实际上注册服务器是存放仓库的具体服务器,每个注册服务器上可以有多个仓库,而每个仓库下面可以有多个镜像

 

 

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

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

相关文章

【nowcoder】NC248 左叶子之和

NC248 左叶子之和 计算给定二叉树的左叶子之和。 树上叶子节点指没有后继节点的节点&#xff0c;左叶子指连向父节点的左侧的叶子节点。 int sumOfLeftLeaves(struct TreeNode* root ) {if (root ! NULL) {int sum 0;if (root->left ! NULL && root->left->…

可观测性十大场景 | 关于保险行业开门红期间应用性能的端到端全栈可观测

【场景概述】 保险行业的“开门红”是每年10月份到次年2月份的业绩冲刺期&#xff0c;各大保险公司纷纷推出独具特色的理财产品&#xff0c;吸引广大客户的目光&#xff0c;以期在新年伊始便赢得“开门红”的吉祥兆头。这段时期&#xff0c;保险收入占比接近全年收入的50%&…

【UE 材质 Niagara】爆炸效果

目录 效果 步骤 一、材质部分 二、Niagara部分 效果 步骤 一、材质部分 1. 创建一个材质&#xff0c;这里命名为“M_Burst” 打开“M_Burst”&#xff0c;设置混合模式为半透明&#xff0c;设置着色模型为无光照&#xff0c;勾选双面显示 在材质图表中首先创建扰动效果 其…

CVPR 2024 | Modular Blind Video Quality Assessment:模块化无参视频质量评估

无参视频质量评估 (Blind Video Quality Assessment&#xff0c;BVQA) 在评估和改善各种视频平台并服务用户的观看体验方面发挥着关键作用。当前基于深度学习的模型主要以下采样/局部块采样的形式分析视频内容&#xff0c;而忽视了实际空域分辨率和时域帧率对视频质量的影响&am…

Vue.js+SpringBoot开发天然气工程运维系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统角色分类2.2 核心功能2.2.1 流程 12.2.2 流程 22.3 各角色功能2.3.1 系统管理员功能2.3.2 用户服务部功能2.3.3 分公司&#xff08;施工单位&#xff09;功能2.3.3.1 技术员角色功能2.3.3.2 材料员角色功能 2.3.4 安…

[c++] 模板

c 中的模板通过将类型参数化&#xff0c;可以提高代码的复用性。模板并不能减少代码量&#xff0c;只是从开发者的角度来看&#xff0c;代码量减少了&#xff0c;复用性提高了&#xff1b;从二进制文件的角度看&#xff0c;代码量没有减小。 1 函数模板 当求两个数的和时&…

PowerBI怎么修改数据库密码

第一步&#xff1a;点击转换数据 第二步&#xff1a;点击数据源设置 第三步&#xff1a;点击编辑权限 第四步&#xff1a;点击编辑 第五步&#xff1a;输入正要修改的密码就可以了

分享几种简约大方的ListView外观设计(qml)

一、前言 最近才学到这里&#xff0c;感觉基础的 ListView 很丑&#xff0c;就现学现用弄个几个自认为还行的设计给大家献丑了。如果你觉得还不错&#xff0c;代码就在下面拿去直接用&#xff0c;顺便给我点个赞哈 ~ 感谢感谢 ~ 二、正文 设计1 第一种就是正常的左侧边栏&am…

LabVIEW管道缺陷智能检测系统

LabVIEW管道缺陷智能检测系统 管道作为一种重要的输送手段&#xff0c;其安全运行状态对生产生活至关重要。然而&#xff0c;随着时间的推移和环境的影响&#xff0c;管道可能会出现老化、锈蚀、裂缝等多种缺陷&#xff0c;这些缺陷若不及时发现和处理&#xff0c;将严重威胁到…

QGIS3.34官方版本已经不能支持Win7,如果需要在WIN7上使用,请用微云上我打包的

在网上看到有些网友在WIN7上安装官方发布的QGIS安装&#xff0c;会遇到上述问题&#xff0c;而不能正常运行&#xff01; 我打包的QGIS可以在WIN7上正常运行&#xff0c;这个我专门测试过。 详见&#xff1a; 打包了一个QGIS3.34分享给大家 下载地址&#xff1a;文件分享 软…

算法学习:双指针学习--左右指针

一&#xff1a;课前讲解 在处理数组和链表相关问题时&#xff0c;双指针技巧是经常用到的&#xff0c;双指针技巧主要分为两类&#xff1a;左右指针和快慢指针。 对于单链表来说&#xff0c;大部分技巧都属于快慢指针&#xff0c;在数组中并没有真正意义上的指针&#xff0c;但…

LeetCode # 547. 省份数量

547. 省份数量 题目 有 n 个城市&#xff0c;其中一些彼此相连&#xff0c;另一些没有相连。如果城市 a 与城市 b 直接相连&#xff0c;且城市 b 与城市 c 直接相连&#xff0c;那么城市 a 与城市 c 间接相连。 省份 是一组直接或间接相连的城市&#xff0c;组内不含其他没有…

wsl 安装 ubuntu

文章目录 打开Windows PowerShell查看可安装的ubuntu安装相对应的ubuntu将用户添加到sudoers文件中&#xff0c;并赋予了该用户sudo权限。 打开Windows PowerShell 以管理员的身份运行 查看可安装的ubuntu wsl.exe --list --online安装相对应的ubuntu wsl --install 版本…

Qt for WebAssembly : Application exit (SharedArrayBuffer is not defined)

用Qt开发 WebAssembly&#xff0c;放到nginx里面&#xff0c;用127.0.0.1访问没问题&#xff0c;用局域网IP访问就提示如下&#xff1a; 总结了以下两种解决办法&#xff1a; ①&#xff1a;配置 nginx http 头 [ 支持&#xff1a;WebAssembly Qt (single-threaded) ] ②&#…

汉诺塔问题(C语言)

一&#xff1a;问题 汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff0c;又称河内塔&#xff0c;是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从…

Ubuntu环境配置-LinuxQQ篇

本教程下载Linux QQ的版本是linuxqq_3.0.0-571_amd64.deb 一、下载LinuxQQ 直接使用wget命令下载链接&#xff0c;下载文件 wget https://dldir1.qq.com/qqfile/qq/QQNT/c005c911/linuxqq_3.0.0-571_amd64.deb 二、安装LinuxQQ 当下载完成后&#xff0c;运行命令&#xff1a;…

【计算机网络笔记】1.概论

【计算机网络笔记】1.概论 前言: 计算机网络概论学习过程中,我感觉它就是在问一个问题: 计算机之间如何实现高效通信? 计算机网络的名词解释 重要基本特点 1.连通性 2.资源共享计算机网络的组成 由若干节点node和连接这些节点的链路link组成。节点可以是计算机、集线器、交换…

供应链管理(SCM):界面设计全面扫盲,得供应链者得天下

大家伙&#xff0c;我是大千UI工场&#xff0c;专注UI分享和项目接单&#xff0c;本期带来供应链系统的设计分享&#xff0c;欢迎大家关注、互动交流。 一、什么是SCM SCM系统是供应链管理&#xff08;Supply Chain Management&#xff09;系统的缩写。供应链管理是指协调和管…

openEuler全球生态合作研讨会:共话全球技术创新,共建国际产业生态

2024年2月27日&#xff0c;OpenAtom openEuler&#xff08;简称“openEuler”&#xff09;全球生态合作研讨会在西班牙巴塞罗那成功举办。开放原子开源基金会副秘书长辛晓华先生&#xff0c;开放原子开源基金会开源安全委员会副主席任旭东先生&#xff0c;Eclipse基金会首席会员…

linux安装openGauss数据库

这里写自定义目录标题 linux安装openGauss数据库openGauss 安装与配置传统安装docker安装 linux安装openGauss数据库 openGauss是一款华为开源的关系型数据库管理系统&#xff0c;它具有多核高性能、全链路安全性、智能运维等企业级特性。 openGauss内核早期源自开源数据库Po…