目录

1. alpine 简介

2. 基于alpine构建jdk8镜像

2.1 Dockerfile

2.2 将构建目录上传到linux中

2.3 执行构建

3. 镜像瘦身

4. 上传阿里云镜像仓库


1. alpine 简介

Alpine Linux是一个轻型Linux发行版,它不同于通常的Linux发行版,Alpine采用了musl libc 和 BusyBox以减少系统的体积和运行时的资源消耗。

Alpine Linux提供了自己的包管理工具:apk(注意:ubuntu中是apt-get,centos中式yum),我们可以通过Alpine Linux packages 查询包信息。

Alpine Docker镜像继承了Alpine Linux发行版的这些优势,相比于其他Linux Docker镜像,它的体积非常小对比常用的、没有压缩过的基础镜像(查看当前的:latest标签)。

Alpine - 4.8MB

Ubuntu - 124.8 MB (现在ubuntu18.04镜像已经压缩到80几M了)

Debian - 125.1MB

Centos - 196MB

关于alpine最新的信息请参看官网

2. 基于alpine构建jdk8镜像

2.1 Dockerfile

1)在本地创建一个目录,并将构建所需要的软件包放入目录,如下图所示:

所用文件下载地址

天翼云盘 珍藏美好生活 家庭云|网盘|文件备份|资源分享(访问码:uoa5)

注:glibc相关的东东是什么?为什么需要?

glibc是GNU发布的libc库(即c语言库),是linux的的最底层api,是linux系统的基石。因为alpine默认是使用musl libc作为底层api(该api优点是小),该musl libc仅能支持openjdk,我们需要安装oracle jdk必须用glibc才行

为什么需要将glibc相关包,及jdk8都先下载好放在目录里呢? 在构建镜像时不能下载吗?

可以在构建时下载,但太慢了,预先将包放在构建目录下要快得多。

上面参照图片中目录名是alpine,是必须叫这个名字吗?

不是,名称随便你命名,但要有意思,这是个好习惯,就像代码要注意可读性一样。

2)Dockerfile内容

# 指定基础镜像,并且必须是第一条指令
FROM alpine:3.10# 维护信息,指明作者和邮件
MAINTAINER lisen "lisen@163.com"# 在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /usr/local/java# 将jdk复制到容器的/usr/local/java目录中,ADD会执行解压,如果是COPY则仅复制
ADD jdk-8u151-linux-x64.tar.gz /usr/local/java# glibc安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中
COPY glibc-i18n-2.30-r0.apk /usr/local/java
COPY glibc-bin-2.30-r0.apk /usr/local/java
COPY glibc-2.30-r0.apk /usr/local/java# 更新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# 运行指定的命令
## 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”
## 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.30-r0.apk glibc-bin-2.30-r0.apk glibc-i18n-2.30-r0.apk &&\rm -rf /var/cache/apk/* glibc-2.30-r0.apk glibc-bin-2.30-r0.apk glibc-i18n-2.30-r0.apk# 设置环境变量
ENV JAVA_HOME=/usr/local/java/jdk1.8.0_151
ENV PATH=$JAVA_HOME/bin:$PATH

2.2 将构建目录上传到linux中

2.3 执行构建

1)登录linux系统

2)来到构建目录下

3)执行构建命令即可

root@ubuntu:/home/lisen/alpine# docker build -t lisen/tiny-jdk8:v1.0 .

注意:

我怎么报错了:"docker build" requires exactly 1 argument.

不要忘了最后的那个点“.” 表示当前目录,这个比较容易被忽略。

我可以在这个目录外执行构建不?

不行,这个目录是构建目录,是构建时的执行上下文

3. 镜像瘦身

瘦身的思路很简单,分为三个步骤:

  • 将jdk换为jre,因为我们在容器中只用运行时环境就可以了,jre体积比jdk小
  • 将jre中可以删除的内容删除,如文档资料等
  • 使用jre重新构建镜像

1)将jre-8u221-linux-x64.tar.gz上传到linux中

2)在linux中执行解压

root@ubuntu:/home/lisen# tar zxf jre-8u221-linux-x64.tar.gz
root@ubuntu:/home/lisen# ls
alpine                       jre1.8.0_221

3)进入jre1.8.0_221目录,进行jre瘦身

#jre瘦身
rm -rf COPYRIGHT LICENSE README release THIRDPARTYLICENSEREADME-JAVAFX.* THIRDPARTYLICENSEREADME.* Welcome.html rm -rf lib/plugin.jar \
lib/ext/jfxrt.jar \
bin/javaws \
lib/javaws.jar \
lib/desktop \
plugin   rm -rf 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

4)将瘦身之后的jre拷入alpine(构建目录)

root@ubuntu:/home/lisen# mv jre1.8.0_221/ alpine

5)进入alpine目录修改Dockerfile文件

6)重新通过Dockerfile重新构建镜像

root@ubuntu:/home/lisen/alpine# docker build -t lisen/tiny-jdk8:v2.0 .

7)通过镜像运行容器,主要为测试镜像

#构建镜像
root@ubuntu:/home/lisen/alpine# docker run -itd --name tinyjdk8-container lisen/tiny-jdk8:v2.0
ed346c332ef0c30459820b6deab14dad2a7655440bd79f6490ed9cade0511430#进入容器
root@ubuntu:/home/lisen/alpine# docker exec -it ed346c /bin/sh
/usr/local/java # java -version
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)
/usr/local/java ##停止所有容器
root@ubuntu:/home/lisen/alpine# docker stop $(docker ps -aq)

4. 上传阿里云镜像仓库

阿里云镜像仓库简介:

阿里云默认实例版(免费版):命名空间:3个, 单命名空间下私有仓库数200个,单命名空间下公开仓库总数1000个,镜像版本总数不限制,构建规则总数5个,构建任务并发3个,同步任务并发3个,不支持交付链。

1) 登录阿里云账户

2) 控制台 -> 容器镜像服务 -> 创建命名空间(建议组织,个人,公司的名字) -> 创建仓库(选择本地仓库)

点击进入 个人实例

注意在

Docker自定义镜像上传阿里云相关推荐

  1. 自定义镜像上传阿里云(图文教程 附带思维导图)

    自定义镜像上传阿里云 alpine Linux简介 思维导图 使用Dockerfile基于alpine制作JDK8镜像 使用Dockerfile基于alpine制作最小JRE基础镜像 将Docker镜 ...

  2. docker之自定义镜像上传阿里云

    alpine制作jdk镜像 alpine Linux简介 1.Alpine Linux是一个轻型Linux发行版,它不同于通常的Linux发行版,Alpine采用了musl libc 和 BusyBo ...

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

    alpine制作jdk镜像 alpine Linux简介 1.Alpine Linux是一个轻型Linux发行版,它不同于通常的Linux发行版,Alpine采用了musl libc 和 BusyBo ...

  4. 自定义镜像上传阿里云

    alpine制作jdk镜像 alpine Linux简介 1.Alpine Linux是一个轻型Linux发行版,它不同于通常的Linux发行版(centos.Ubuntu),Alpine采用了mus ...

  5. docker镜像上传阿里云仓库

    推送至阿里云镜像: 1.首先在阿里云上选择容器镜像服务,创建命名空间以及镜像仓库 2. docker login --username=zhangshitongsky@163.com registry ...

  6. (私有云)客户给的VMware镜像磁盘如何制作成自定义镜像上传至openstack镜像服务器供客户使用

    (私有云)客户给的VMware镜像磁盘如何制作成自定义镜像上传至openstack镜像服务器供客户使用 目录 1.准备工作 2.修改域xml配置文件以及是否缩容 3.在镜像更新服务器上启动这个自定义镜 ...

  7. ESP8266获取传感器数值,上传阿里云

    #include <DHT.h> #include<ESP8266WiFi.h> #include <PubSubClient.h> #include <Wi ...

  8. java利用iText写pdf并上传阿里云OSS并下载

    iText是用于生成pdf的一个类库,通过它可以生成pdf或者将XML , HTML转换城pdf模版:阿里云的oss对象存储存储的类型比较多了,可以存储音频 图片 pdf excel 等资源,oss本 ...

  9. 生成Excel表格并上传阿里云存储

    1.程序内部生成Excel表格 1.1 表头和数据分离 //表头存储格式 List<String[]> headerGoodsOrderListString[] h1 = new Stri ...

最新文章

  1. 算法设计思想(4)— 分治法
  2. 可构建AI的“AI”诞生:几分之一秒内,就能预测新网络的参数
  3. Netbackup 添加策略_报NFS.Skipping
  4. mysql时间变成季度_Mysql 时间操作(当天, 昨天,7 天,30 天, 半年, 全年, 季度)
  5. JSON数据解析:Gson(谷歌)和fastjson(阿里巴巴)的异同点
  6. haddler处理队列 netty_如何实现延迟队列
  7. 汇总Web前端开发工程师需要注意的一些开发规范
  8. Storage API简介和存储限制与逐出策略
  9. i++ 和 ++i 效率的分析以及自定义类型的自增/自减运算符重载实例
  10. 立志10天学会C++基础应用—day02 代码清晰易懂 涉及数据结构算法的知识 写完了~我也麻了
  11. 飞鸽传书举一个小例子
  12. java常见经典知识点汇总
  13. 暴雪插件占用服务器,暴雪为部分高负载、高排队的服务器开启免费转服服务 解决负载过高问题...
  14. 关于max(X,Y),min(X,Y)
  15. qt msvc编译中文乱码解决
  16. python查询注册表子项是否存在并操作
  17. 深度原理与框架-图像超分辨重构-tensorlayer
  18. PuTTY/PuttyGen介绍
  19. 20201022-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises19
  20. 经典的java角色扮演,盘点2010年十大经典角色扮演类游戏合集

热门文章

  1. Python列表(list)的添加元素方法 append、extend、insert-------(超级详细)
  2. 手机耳塞 录音同时外放_如何将Android手机切换为“单声道”(这样就可以戴一副耳塞)
  3. 如何设计宝贝详情页提高转化率?
  4. jenkins部署微服务项目
  5. 祭奠我死去的CET-6
  6. 山水印|竹林野茶:你喝过的茶,都写在了脸上
  7. 转载 禁止ie浏览器打开
  8. 身份证号码验证(转)
  9. 兽耳怎么画?怎样才能画好兽耳?
  10. 如何在Excel中启用宏?