目录

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),我们可以通过https://pkgs.alpinelinux.org/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)在本地创建一个目录,并将构建所需要的软件包放入目录,如下图所示:

注:

  • 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. 上传阿里云镜像仓库


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

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

注:

  • 在创建仓库时那个“代码源”是个什么东东,作用是什么?
    镜像容器服务提供源码仓库的镜像构建功能(如:github,云code等),支持源码修改后自动进行镜像构建,本示例为配置简单选择了本地仓库。

3)在仓库创建成功后,按提示步骤进行操作,将镜像推送到阿里云
第一步:打标签
格式:
sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/lisensir/tinyjdk8:[镜像版本号]
示例:

sudo docker tag 457b3f475453 registry.cn-hangzhou.aliyuncs.com/lisensir/tinyjdk8:v2.0
  • 457b3f475453 为需要上传的镜像ID, [镜像版本号]为需要上传的镜像的版本号

第二步:push
格式:
sudo docker push registry.cn-hangzhou.aliyuncs.com/lisensir/tinyjdk8:[镜像版本号]
示例:

sudo docker push registry.cn-hangzhou.aliyuncs.com/lisensir/tinyjdk8:v2.0

成功后可以在“镜像版本”中看到上传的镜像

4)拉取镜像
格式:
sudo docker pull registry.cn-hangzhou.aliyuncs.com/lisensir/tinyjdk8:[镜像版本号]
示例:

sudo  docker pull registry.cn-hangzhou.aliyuncs.com/lisensir/tinyjdk8:v2.0

5)通过拉取的镜像运行容器(目的是为了测试)

root@ubuntu:/# docker images
REPOSITORY                                            TAG                 IMAGE ID            CREATED             SIZE
lisen/tiny-jdk8                                       v2.0                457b3f475453        About an hour ago   173MB
registry.cn-hangzhou.aliyuncs.com/lisensir/tinyjdk8   v2.0                457b3f475453        About an hour ago   173MBroot@ubuntu:/# docker run -itd --name tinyjdk8 457b3f475453
a7566e8904d681825633e3fe1b7168031e83127d784f24b225367d512746a77d
root@ubuntu:/# docker exec -it a7566 /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 #

成功, over

alpine的介绍与使用相关推荐

  1. Alpine镜像介绍

    Alpine 介绍 基础配置方法 网络配置 安装软件包apk 介绍 Alpine 操作系统是一个面向安全的轻型 Linux 发行版.它不同于通常 Linux 发行版,Alpine 采用了 musl l ...

  2. Alpine的安装、介绍与相关配置

    文章目录 1. Alpine Linux介绍 2. Alpine的优点 3. Alpine国内源 4. 安装Alpine 5. 配置ssh远程登录 6. Alpine linux包管理 7. Alpi ...

  3. Alpine Linux 使用简介

    Alpine Linux使用简介 目录: 一.Alpine简要介绍 二.Alpine本地安装 三.Alpine在Docker下运行 四.Alpine的配置和使用 4.1网络相关文件 4.2更新国内源 ...

  4. docker使用alpine镜像

    alpine介绍 alpine简要介绍 Alpine 的意思是"高山的",比如 Alpine plants高山植物,Alpine skiing高山滑雪.the alpine res ...

  5. Alpine linux 小内存版,Alpine Linux系统-Alpine Linux系统【轻量级Linux】下载v3.11.0 最新版-西西软件下载...

    Alpine Linux系统[轻量级Linux],Alpine Linux其实就是一个清凉版的Linux系统,通过牺牲一些不常用的功能和特性来达到更加轻巧的体积以及更快的响应速度.Alpine Lin ...

  6. openssh 虚拟机linux_Alpine Linux虚拟机安装过程

    Alpine Linux介绍 Alpine Linux就是一个很适合运行在虚拟机或Docker中的Linux系统,它有以下优点: 轻量.没有自带很多软件,安装完虚拟磁盘才150M. 快速.没有图形界面 ...

  7. Alpine介绍与apk的基本使用

    前言 Alpine是一个面向安全的轻量级的Linux发行版,相比与CentOS,ubuntu体积小很多,大约只有5M左右,由于体积小的原因,在很多场景下都会使用它来按需制作一些轻量级镜像,虽然体积小但 ...

  8. Alpine包管理工具apk使用介绍

    Alpine以它的小巧和实用深受总多开发者的喜爱,而提到Alpine的Linux,其包管理工具apk则是在Alpine中使用广泛的一个工具,这篇文章简要介绍一下常见的使用方式. 什么是apk Alpi ...

  9. 使用 alpine 打包镜像注意事项

    Alpine Linux 是一个相当精简的操作系统,而基于它的 Docker 镜像可以仅有数 MB 的尺寸.如果软件基于这样的系统镜像之上构建而得,可以想象新的镜像也是十分小巧的. 由于基于 Alpi ...

最新文章

  1. const常对象成员与常成员函数
  2. 10个 我经常逛的国外技术社区,真的受益匪浅!
  3. loadrunner socket协议问题归纳(5)
  4. 2017年第八届蓝桥杯省赛试题(JavaA组)
  5. 启动maven项目在eclipse中报错 Can‘t find class [×××] for bean with name '××' defined in class path resource
  6. lvm 多个硬盘合成一个_「ECS最佳实践」基于多块云盘构建LVM逻辑卷
  7. python上下文管理关键字_详解 Python 中的 with 与 上下文管理器
  8. 制作Slider组件
  9. 准备创业或刚创业的朋友必读
  10. c++数据结构中 顺序队列的队首队尾_数据结构与算法—队列图文详解
  11. 【排序】剑指offer:数组中重复的数字
  12. 《掌握需求过程》读书笔记3
  13. Spring学习(二)代理模式(静态代理、动态代理)、Spring AOP
  14. 几个病毒代码(c++)
  15. variable selection
  16. python怎么读xlsx_python读取xlsx的方法
  17. 【UE4】使用UMG创建UI,了解内部机制及相应优化方法
  18. 领淘宝优惠券的微信小程序
  19. 数据结构C语言代码实战
  20. 林轩田机器学习技法(Machine Learning Techniques)笔记(一)

热门文章

  1. C++:数组、链表与哈希表
  2. 论文阅读:DEFORMABLE DETR:DEFORMABLE DETR: DEFORMABLE TRANSFORMERSFOR END-TO-END OBJECT DETECTION
  3. 个性篮球队名_你的篮球个性是什么
  4. jquery实现下拉框
  5. android9是最新版本,Android9.0正式版发布,你的手机升级到主流Android8.0系
  6. Markdown使用学习笔记(第一次,拉的很,别骂了,别骂了)
  7. Gradle学习之Android-DSL AppExtension篇
  8. BZOJ 1251 序列终结者 Splay
  9. 遥感图像预处理与土地利用动态监测
  10. 牛顿迭代法是一种速度很快的迭代方法,但是它需要预先求得导函数。若用差商代替导数,可得下列弦截法