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

相关推荐
丶213613 分钟前
【Nginx】在 Docker 上安装 Nginx 的详细指南
运维·nginx·docker
codelife32127 分钟前
在Docker容器中执行命令
容器
petaexpress35 分钟前
常用的k8s容器网络模式有哪些?
网络·容器·kubernetes
m0_741768857 小时前
使用docker的小例子
运维·docker·容器
最新小梦10 小时前
Docker日志管理
运维·docker·容器
ZHOU西口11 小时前
微服务实战系列之玩转Docker(十五)
nginx·docker·微服务·云原生·swarm·docker swarm·dockerui
lgbisha12 小时前
828华为云征文|华为云Flexus X实例docker部署最新Appsmith社区版,搭建自己的低代码平台
低代码·docker·华为云
记得开心一点嘛12 小时前
在Linux系统上使用Docker部署javaweb项目
linux·运维·docker
Persistence is gold14 小时前
cassandra指定配置文件的docker启动方法
运维·docker·容器
C语言扫地僧15 小时前
Docker 镜像制作(Dockerfile)
linux·服务器·docker·容器