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 "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 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. 在镜像版本里面就可以看到上传的镜像了

相关推荐
梅见十柒1 小时前
wsl2中kali linux下的docker使用教程(教程总结)
linux·经验分享·docker·云原生
O&REO3 小时前
单机部署kubernetes环境下Overleaf-基于MicroK8s的Overleaf应用部署指南
云原生·容器·kubernetes
运维小文4 小时前
K8S资源限制之LimitRange
云原生·容器·kubernetes·k8s资源限制
登云时刻4 小时前
Kubernetes集群外连接redis集群和使用redis-shake工具迁移数据(二)
redis·容器·kubernetes
小曲曲6 小时前
接口上传视频和oss直传视频到阿里云组件
javascript·阿里云·音视频
为什么每天的风都这么大12 小时前
Vscode/Code-server无网环境安装通义灵码
ide·vscode·阿里云·编辑器·ai编程·code-server
wuxingge13 小时前
k8s1.30.0高可用集群部署
云原生·容器·kubernetes
志凌海纳SmartX14 小时前
趋势洞察|AI 能否带动裸金属 K8s 强势崛起?
云原生·容器·kubernetes
锅总14 小时前
nacos与k8s service健康检查详解
云原生·容器·kubernetes
BUG弄潮儿14 小时前
k8s 集群安装
云原生·容器·kubernetes