目的:

  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的容量是非常小的

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

   基于alpine制作JDK8镜像

  1.下载镜像

docker pull alpine:latest

  

2.创建并编辑dockerfile

   touch Dockerfile

   vi Dockerfile 

Dockerfile文件中添加一下命令:

#.指定基础镜像,并且必须是第一条指令
FROM alpine:latest
#FROM alpine:3.10 #.指明该镜像的作者和其电子邮件
MAINTAINER xxx "xxx@qq.com" #.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /javaxh_docker/jdk #.将一些安装包复制到镜像中,语法:ADD/COPY <src>... <dest>
## ADD与COPY的区别:ADD复制并解压,COPY仅复制
ADD jdk-8u221-linux-x64.tar.gz /javaxh_docker/jdk/
## glibc安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中
COPY glibc-2.29-r0.apk /javaxh_docker/jdk/
COPY glibc-bin-2.29-r0.apk /javaxh_docker/jdk/
COPY glibc-i18n-2.29-r0.apk /javaxh_docker/jdk/ #.更新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”,网上例子少安装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=/javaxh_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"]

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

3.执行dockerfile创建镜像

docker build -t jdk8:v2. .

4.创建并启动容器

docker run -it --name myjdk02 75a22c55fe98

5.测试jdk版本号

java -version


Alpine制作jre镜像(瘦身)

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

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

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

#删除文本文件
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

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

rm -f jre-Bu221-linux-x64.tar.gz

tar -zcvf  jre1..0_221.tar.gz jre1..0_221/

输入vi Dockerfile 修改Dockerfile文件

#.指定基础镜像,并且必须是第一条指令
FROM alpine:latest
#FROM alpine:3.10 #.指明该镜像的作者和其电子邮件
MAINTAINER xyz "xyz@qq.com" #.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /javaxh_docker/jdk #.将一些安装包复制到镜像中,语法:ADD/COPY <src>... <dest>
## ADD与COPY的区别:ADD复制并解压,COPY仅复制
## 注意~~~上传的瘦身后的jre
ADD jre1..0_221.tar.gz /javaxh_docker/jdk/
## glibc安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中
COPY glibc-2.29-r0.apk /javaxh_docker/jdk/
COPY glibc-bin-2.29-r0.apk /javaxh_docker/jdk/
COPY glibc-i18n-2.29-r0.apk /javaxh_docker/jdk/ #.更新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”,网上例子少安装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=/javaxh_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"]

4.执行dockerfile创建镜像

docker build -t jdk8:v3. .


Docker镜像上传至阿里云

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

配置Docker加速器

搜索“容器镜像服务”

创建镜像仓库的命名空间

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

  • push(推)镜像

#将镜像推送到Registry

1.登录阿里云账号

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

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


2.为本地镜像添加tag

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

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

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

成功:

  • pull(拉)镜像

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

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

2.从Registry中拉取镜像

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. 阿里云服务器25端口禁用之如何使用Java发邮件(解决25端口禁用问题)

    通常我们在本地使用Java发送邮件,通常是没有问题的,但是部署到服务器的话,就可能遇到问题.当然了,这与运营商也有关系.比如我之前在咖啡主机上购买虚拟机,然后将个人网站部署上去,通常是没有问题的,没有 ...

  2. PowerDesigner应用02 逆向工程之导出PDM文件前过滤元数据(表、视图、存储过程等)

    在上一篇文章<PowerDesigner应用01 逆向工程之配置数据源并导出PDM文件>步骤二中导出了目标数据库对应的PDM文件, 该文件中展示出了所有表的信息与关系. 某些业务场景下只需 ...

  3. [Gamma阶段]第四次Scrum Meeting

    Scrum Meeting博客目录 [Gamma阶段]第四次Scrum Meeting 基本信息 名称 时间 地点 时长 第四次Scrum Meeting 19/05/30 大运村寝室6楼 35min ...

  4. windows 10环境下安装Tensorflow-gpu

    网上有很多教程,特别是简写上的写的都还算比较详细.但我自己还是遇到了几个坑,希望对深度学习有兴趣的同学遇到跟我一样的坑,希望这份记录能帮助到你. 问题一:要不要使用Anaconda? 我看极客时间上的 ...

  5. 解决启动redis出现的creating server tcp listening socket *:6379: listen: unknown error

    今天运行redis服务端时候出现这个问题: D:\php\software\redis>redis-server.exe [] Dec ::00.797 # Warning: no config ...

  6. 异常值检验实战3_NBA球员表现稳定性分析

     机器学习_深度学习_入门经典(博主永久免费教学视频系列) https://study.163.com/course/courseMain.htm?courseId=1006390023&sh ...

  7. Mockito 的用法

    本文为博主原创,转载请注明出处: Mockito 是一个基于MIT协议的开源java测试框架. Mockito区别于其他模拟框架的地方主要是允许开发者在没有建立“预期”时验证被测系统的行为.对于moc ...

  8. kotlin基础 字符串模板

    ${变量名} var tmp="字符串模板” print("今天学习${tmp}这个知识点")

  9. 使用gevent包实现concurrent.futures.executor 相同的公有方法。组成鸭子类

    类名不同,但公有方法的名字和提供的基本功能大致相同,但两个类没有共同继承的祖先或者抽象类 接口来规定他,叫鸭子类. 使并发核心池能够在 threadpoolexetor和geventpoolexecu ...

  10. PMP模拟错题总结

    本打算15天完成第二轮复习的,结果项目太忙,拖成了25天.第二轮主要以小绿书为主,就是如下这本 怎么说呢,题目偏向于考ITTO的内容,情景题比较少.可以使用“管理圈”APP作为补充 1.敏感性分析的结 ...