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

目录

[一. Alpine制作jdk镜像](#一. Alpine制作jdk镜像)

[1.1 alpine Linux 简介](#1.1 alpine Linux 简介)

[1.2 基于alpine制作jdk8镜像](#1.2 基于alpine制作jdk8镜像)

[1.2.1 下载镜像](#1.2.1 下载镜像)

[1.2.2 创建并编辑Dockerfile](#1.2.2 创建并编辑Dockerfile)

[1.2.3 上传文件](#1.2.3 上传文件)

[1.2.4 执行Dockerfile构建镜像](#1.2.4 执行Dockerfile构建镜像)

[1.2.5 测试](#1.2.5 测试)

[二. Alpine制作jre镜像](#二. Alpine制作jre镜像)

[2.1 首先下载jre或者上传](#2.1 首先下载jre或者上传)

[2.2 解压](#2.2 解压)

[2.3 测试](#2.3 测试)

[2.4 返回上级目录,重新打包jre](#2.4 返回上级目录,重新打包jre)

[2.5 创建并编辑Dockerfile](#2.5 创建并编辑Dockerfile)

[2.6 执行dockerfile创建镜像](#2.6 执行dockerfile创建镜像)

[2.7 测试](#2.7 测试)

[三. 镜像上传阿里云及下载](#三. 镜像上传阿里云及下载)

[3.1 前期准备](#3.1 前期准备)

[3.2 push (推) 镜像](#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 "[email protected]"

#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 "[email protected]"

#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 images
 
docker run -it --name mj2 容器iD
 
java -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. 在镜像版本里面就可以看到上传的镜像了

相关推荐
晨埃LUO定27 分钟前
【k8s系列4】工具介绍
云原生·容器·kubernetes
神洛华29 分钟前
Docker概念详解
运维·docker·容器
007php00732 分钟前
Docker Compose 安装Elasticsearch8和kibana和mysql8和redis5 并重置密码的经验与总结
大数据·运维·elasticsearch·搜索引擎·docker·容器·jenkins
掉头发的王富贵1 小时前
从零开始玩转 Kubernetes:一站式入门指南,带你快速掌握 K8s的核心组件
后端·容器·kubernetes
Connie14512 小时前
K8s使用LIRA插件更新安全组交互流程
安全·容器·kubernetes
gzgenius2 小时前
警惕阿里云中的yum update操作不当导致:/sbin/init被清空导致Linux无法正常启动
linux·服务器·阿里云
XINVRY-FPGA2 小时前
XC7K410T‑2FFG900I 赛灵思XilinxFPGA Kintex‑7
嵌入式硬件·安全·阿里云·ai·fpga开发·云计算·fpga
假客套2 小时前
2025 活体识别+人脸认证工具类【阿里云api,需要先申请试用】
阿里云·人脸识别·活体检测·java工具类
Ares-Wang3 小时前
kubernetes》》k8s》》Endpoint
java·容器·kubernetes
egoist20234 小时前
【C++指南】哈希驱动的封装:如何让unordered_map/set飞得更快更稳?【上】
数据结构·c++·算法·容器·哈希算法·散列表·c++11