目的:

  Alpine制作jdk镜像

  Alpine制作jre镜像(瘦身)

  Docker镜像上传至阿里云


Alpine制作jdk镜像

alpine Linux简介

  Alpine Linux是一个轻型Linux发行版,它不同于通常的Linux发行版,Alpine采用了musl libc 和

BusyBox以减少系统的体积和运行时的资源消耗。

   alpine Linux优点

    1、小巧:基于Musl libc和busybox,和busybox一样小巧,最小的Docker镜像只有5MB;

    2、安全:面向安全的轻量发行版;

    3、简单:提供APK包管理工具,软件的搜索、安装、删除、升级都非常方便。

    4、适合容器使用:由于小巧、功能完备,非常适合作为容器的基础镜像。

 alpine操作系统官网(https://pkgs.alpinelinux.org/packages

下面为官方镜像的容量对比:

  显而易见alpine的容量是非常小的

  1. REPOSITORY TAG IMAGEID VIRTUAL SIZE
  2. alpine latest 4e38e38c8ce0 4.799 MB
  3. debian latest 4d6ce913b130 84.98 MB
  4. ubuntu latest b39b81afc8ca 188.3 MB
  5. centos latest 8efe422e6104 MB

   基于alpine制作JDK8镜像

  1.下载镜像

  1. docker pull alpine:latest

  

2.创建并编辑dockerfile

  1. touch Dockerfile
  2.  
  3. vi Dockerfile

Dockerfile文件中添加一下命令:

  1. #.指定基础镜像,并且必须是第一条指令
  2. FROM alpine:latest
  3. #FROM alpine:3.10
  4.  
  5. #.指明该镜像的作者和其电子邮件
  6. MAINTAINER xxx "xxx@qq.com"
  7.  
  8. #.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
  9. WORKDIR /javaxh_docker/jdk
  10.  
  11. #.将一些安装包复制到镜像中,语法:ADD/COPY <src>... <dest>
  12. ## ADD与COPY的区别:ADD复制并解压,COPY仅复制
  13. ADD jdk-8u221-linux-x64.tar.gz /javaxh_docker/jdk/
  14. ## glibc安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中
  15. COPY glibc-2.29-r0.apk /javaxh_docker/jdk/
  16. COPY glibc-bin-2.29-r0.apk /javaxh_docker/jdk/
  17. COPY glibc-i18n-2.29-r0.apk /javaxh_docker/jdk/
  18.  
  19. #.更新Alpine的软件源为阿里云,因为从默认官源拉取实在太慢了
  20. RUN echo http://mirrors.aliyun.com/alpine/v3.10/main/ > /etc/apk/repositories && \
  21. echo http://mirrors.aliyun.com/alpine/v3.10/community/ >> /etc/apk/repositories
  22. RUN apk update && apk upgrade
  23.  
  24. #.运行指定的命令
  25. ## Alpine linux为了精简本身并没有安装太多的常用软件,apk类似于ubuntu的apt-get,
  26. ## 用来安装一些常用软V件,其语法如下:apk add bash wget curl git make vim docker
  27. ## wget是linux下的ftp/http传输工具,没安装会报错“/bin/sh:   wget: not found”,网上例子少安装wget
  28. ## ca-certificates证书服务,是安装glibc前置依赖
  29. RUN apk --no-cache add ca-certificates wget \
  30. && wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub \
  31. && apk add glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk \
  32. && rm -rf /var/cache/apk/* glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk
  33.  
  34. #7.配置环境变量
  35. ENV JAVA_HOME=/javaxh_docker/jdk/jdk1.8.0_221
  36. ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  37. ENV PATH=$JAVA_HOME/bin:$PATH
  38.  
  39. #容器启动时需要执行的命令
  40. #CMD ["java","-version"]

其中安装glibc前置依赖,有三个文件,我是离线放进jdk文件夹中去的。

3.执行dockerfile创建镜像

  1. docker build -t jdk8:v2. .

4.创建并启动容器

  1. docker run -it --name myjdk02 75a22c55fe98

5.测试jdk版本号

  1. java -version


Alpine制作jre镜像(瘦身)

1.首先下载jre
下载地址是https://www.java.com/en/download/manual.jsp,大概是77M
最终下载的资料为:/jre-8u221-linux-x64.tar.gz
2.rz上传,并删除无用的文件,重新压缩
解压

  1. tar -zxvf jre-8u221-linux-x64.tar.gz

进入jre目录,并执行瘦身命令

  1. #删除文本文件
  2. rm -rf COPYRIGHT LICENSE README release THIRDPARTYLICENSEREADME-JAVAFX.txtTHIRDPARTYLICENSEREADME.txt Welcome.html \
  3. #删除其他无用文件
  4. rm -rf lib/plugin.jar \
  5. lib/ext/jfxrt.jar \
  6. bin/javaws \
  7. lib/javaws.jar \
  8. lib/desktop \
  9. plugin \
  10. lib/deploy* \
  11. lib/*javafx* \
  12. lib/*jfx* \
  13. lib/amd64/libdecora_sse.so \
  14. lib/amd64/libprism_*.so \
  15. lib/amd64/libfxplugins.so \
  16. lib/amd64/libglass.so \
  17. lib/amd64/libgstreamer-lite.so \
  18. lib/amd64/libjavafx*.so \
  19. lib/amd64/libjfx*.so

返回上级目录,删除原有的jre压缩包,重新打包jre

  1. rm -f jre-Bu221-linux-x64.tar.gz
  2.  
  3. tar -zcvf jre1..0_221.tar.gz jre1..0_221/

输入vi Dockerfile 修改Dockerfile文件

  1. #.指定基础镜像,并且必须是第一条指令
  2. FROM alpine:latest
  3. #FROM alpine:3.10
  4.  
  5. #.指明该镜像的作者和其电子邮件
  6. MAINTAINER xyz "xyz@qq.com"
  7.  
  8. #.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
  9. WORKDIR /javaxh_docker/jdk
  10.  
  11. #.将一些安装包复制到镜像中,语法:ADD/COPY <src>... <dest>
  12. ## ADD与COPY的区别:ADD复制并解压,COPY仅复制
  13. ## 注意~~~上传的瘦身后的jre
  14. ADD jre1..0_221.tar.gz /javaxh_docker/jdk/
  15. ## glibc安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中
  16. COPY glibc-2.29-r0.apk /javaxh_docker/jdk/
  17. COPY glibc-bin-2.29-r0.apk /javaxh_docker/jdk/
  18. COPY glibc-i18n-2.29-r0.apk /javaxh_docker/jdk/
  19.  
  20. #.更新Alpine的软件源为阿里云,因为从默认官源拉取实在太慢了
  21. RUN echo http://mirrors.aliyun.com/alpine/v3.10/main/ > /etc/apk/repositories && \
  22. echo http://mirrors.aliyun.com/alpine/v3.10/community/ >> /etc/apk/repositories
  23. RUN apk update && apk upgrade
  24.  
  25. #.运行指定的命令
  26. ## Alpine linux为了精简本身并没有安装太多的常用软件,apk类似于ubuntu的apt-get,
  27. ## 用来安装一些常用软V件,其语法如下:apk add bash wget curl git make vim docker
  28. ## wget是linux下的ftp/http传输工具,没安装会报错“/bin/sh:   wget: not found”,网上例子少安装wget
  29. ## ca-certificates证书服务,是安装glibc前置依赖
  30. RUN apk --no-cache add ca-certificates wget \
  31. && wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub \
  32. && apk add glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk \
  33. && rm -rf /var/cache/apk/* glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk
  34.  
  35. #7.配置环境变量
  36. ## 注意~~~没有jdk啦,直接指向jre
  37. ENV JAVA_HOME=/javaxh_docker/jdk/jre1.8.0_221
  38. ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  39. ENV PATH=$JAVA_HOME/bin:$PATH
  40.  
  41. #容器启动时需要执行的命令
  42. #CMD ["java","-version"]

4.执行dockerfile创建镜像

  1. docker build -t jdk8:v3. .


Docker镜像上传至阿里云

  首先进入阿里云官网去配置Docker配置加速器(https://dev.aliyun.com

配置Docker加速器

搜索“容器镜像服务”

创建镜像仓库的命名空间

创建镜像仓库(创建镜像仓库时要绑定一个代码托管网站,例如:github)

  • push(推)镜像

#将镜像推送到Registry

1.登录阿里云账号

  1. docker login --username=xxx registry.cn-shenzhen.aliyuncs.com

  --username为阿里云的用户名,另外,密码为开通镜像服务时设置的密码

  1.  

2.为本地镜像添加tag

docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/javaxl/alpine_jre:[镜像版本号]

3.推送镜像(jdk8-alpine:1.0)

  1. docker push registry.cn-shenzhen.aliyuncs.com/javaxl/alpine_jre:[镜像版本号]

成功:

  • pull(拉)镜像

1.登录到阿里云的doker仓库

  1. docker login --username=xxxxx registry.cn-shenzhen.aliyuncs.com

2.从Registry中拉取镜像

  1. docker pull registry.cn-shenzhen.aliyuncs.com/shl_java/alpine_jre:[镜像版本号]

谢谢观看!!

Docker之Alpine制作镜像且上传至阿里云的更多相关文章

  1. Docker 容器更新,打包,上传到阿里云

    上几章讲了镜像的拉取和运行. 这次来尝试如何将已经运行的容器打包,封装成镜像,并且上传到阿里云上,为了别的地方下载和使用更加的方便. 首先,进入镜像,如果不清楚地,可以看下上一章. [root@VM_ ...

  2. 构建一个java环境的centos系统镜像并上传到阿里云镜像仓库

    编辑dockerfile 文件 FROM centos MAINTAINER zhaoweifeng ENV LANG en_US.UTF-8 RUN /bin/cp /usr/share/zonei ...

  3. 前端(react)上传到阿里云OSS存储 实例

    需求背景 由于现有的后台管理系统,上传的视频越来越大,加上上传视频较慢,后端小哥提出直接从前端上传视频或者其他文件到阿里云OSS存储. 阿里云OSS 阿里云OSS文档介绍,这里不做过多赘述 安装 原本 ...

  4. Wordpress上传到阿里云服务器

    Wordpress上传到阿里云服务器 登录服务器 https://account.aliyun.com/login/login.htm 绑定域名 获取FTP信息.数据库信息 在本地修改wordpres ...

  5. Windows环境下用C#编程将文件上传至阿里云OSS笔记

    Windows环境下用C#编程将文件上传至阿里云OSS笔记 本系列文章由ex_net(张建波)编写,转载请注明出处. http://blog.csdn.net/ex_net/article/detai ...

  6. JavaScript进阶(九)JS实现本地文件上传至阿里云服务器

    JS实现本地文件上传至阿里云服务器 前言 在前面的博客< JavaScript进阶(八)JS实现图片预览并导入服务器功能>(点击查看详情)中,实现了JS将本地图片文件预览并上传至阿里云服务 ...

  7. OSS文件上传到阿里云

    <script src="http://gosspublic.alicdn.com/aliyun-oss-sdk-4.4.4.min.js"></script&g ...

  8. Java下载https文件上传到阿里云oss服务器

    Java下载https文件上传到阿里云oss服务器 今天做了一个从Https链接中下载音频并且上传到OSS服务器,记录一下希望大家也少走弯路. 一共两个类: 1 .实现自己的证书信任管理器类 /** ...

  9. Linux本地数据上传到阿里云OSS

    这篇文章主要是介绍如何将服务器本地的数据上传到阿里云OSS的指定bucket中,最重要的参考文档是数据迁移单机部署.我第一次上传数据到OSS上时,步骤要比前面的链接中介绍的要麻烦,ossimport工 ...

随机推荐

  1. 寄存器,移位寄存器的电路原理以及verilog代码实现

    寄存器:用以存放二进制代码的电路,下图为由维特阻塞D触发器组成的4位数码寄存器: 逻辑功能分析: 1.异步端CR置0时,输出置0: 2.同步并行置数:D0~D3为4个输入代码,当CP上升沿到达时,D0 ...

  2. 线程池ScheduledThreadPoolExecutor

    Java中调度线程池ScheduledThreadPoolExecutor原理探究 一. 前言 前面讲解过Java中线程池ThreadPoolExecutor原理探究,ThreadPoolExecut ...

  3. Java重启后不能打开的一些解决方法

    点开环境变量设置,重新确定一下(据说是win10的原因) 将环境变量中path与CLASSPATH中的%JAVA_HOME%改为JAVA_HOME的值.参考https://blog.csdn.net/ ...

  4. mysql左连接查询结果不准确

    现有四张表 表(1)res_resource_catalog 表(2)res_catalog_classify 表(3)res_resource_classify 表(4)res_resource_m ...

  5. win10安装ubuntu双系统遇到的问题

    安装过程学习了几个博客 Ubuntu 16.04与Win10双系统双硬盘安装图解:https://www.cnblogs.com/coxiseed/p/9945202.html?tdsourcetag ...

  6. [转]初识NuGet - 概念, 安装和使用

    1. NuGet是什么? NuGet is a Visual Studio 2010 extension that makes it easy to add, remove, and update l ...

  7. linux 下nc 命令的使用

    linux 下nc 命令的使用 https://blog.51cto.com/samyubw/555247

  8. IM (二):数据通信协议的选择

    https://www.jianshu.com/p/e9c2b7c48c34 http://www.52im.net/thread-283-1-1.html https://github.com/Ja ...

  9. 【C++】C++中explicity关键字的使用

    读者可以尝试预言一下这段代码的输出: #include <iostream> using namespace std; class Complex { private: double re ...

  10. 端口镜像——配置原理篇

    镜像是指将经过指定端口(镜像端口)或者指定VLAN(镜像VLAN)的报文复制一份到另一个指定端口(观察端口),然后转发到网络监控设备,供网络管理员进行网络监控与故障管理. 看官们可以通过下面的这张图了 ...