alpine制作jdk镜像

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镜像,它的体积非常小

对比常用的、没有压缩过的基础镜像(查看当前的:latest标签):

Alpine - 4.8MB

centos - 124.8 MB

Debian - 125.1MB

Centos - 196MB

4.建议使用Alpine Linux 3.10.0版本,这也是 v3.10 稳定系列的首个版本

alpine:3.10

基于alpine制作JDK8镜像

1.下载镜像

docker pull alpine:latest

2.创建并编辑dockerfile

touch Dockerfile

vi Dockerfile

docfile内容:

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

3.执行dockerfile创建镜像

docker build -t jdk8:v2.0 .

 4.创建并启动容器

docker create -it jdk8:v2.0

docker start 容器ID

5.进入容器   

docker exec -it 容器ID /bin/sh

注1:最后是sh而非bash

也可直接 启动并进入容器

docker run -it --name myjdk 容器ID

6.测试jdk

java -version

注1:docker exec -it 容器ID /bin/sh 默认使用当前帐号(即root)登入,通过whoami命令可以查看当前用户名,

还可以通过如下命令切换到其它帐号

docker exec -it --user root <容器ID> /bin/sh

注2:openjdk:8-jdk-alpine这个镜像就和我们自己创建的镜像是一样,只不过JDK瘦身过了,体积更小

注3:最后制作完成后的镜像大小为458M左右

Alpine制作jre镜像

Docker容器之最小JRE基础镜像

#1.首先下载jre,

下载地址是https://www.java.com/en/download/manual.jsp,大概是77M

最终下载的资料为:/jre-8u221-linux-x64.tar.gz

#2.rz上传至centos,并删除无用的文件,并重新压缩

#解压

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

#返回上级目录,重新打包jre

cd ../

tar -zcvf jre1.8.0_221.tar.gz jre1.8.0_221

.创建并编辑dockerfile

#1.指定基础镜像,并且必须是第一条指令

FROM alpine:latest

#FROM alpine:3.10

#2.指明该镜像的作者和其电子邮件

MAINTAINER lingerqi"q509796@163.com"

#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录

WORKDIR /lingerqi/dockerfile/jdk

#4.将一些安装包复制到镜像中,语法:ADD/COPY <src>... <dest>

## ADD与COPY的区别:ADD复制并解压,COPY仅复制

## 注意~~~上传的瘦身后的jre

ADD jre1.8.0_221.tar.gz /lingerqi/dockerfile/jdk

## glibc安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中

COPY glibc-2.29-r0.apk /lingerqi/dockerfile/jdk/

COPY glibc-bin-2.29-r0.apk /lingerqi/dockerfile/jdk

COPY glibc-i18n-2.29-r0.apk /lingerqi/dockerfile/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=/lingerqi/dockerfile/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"]

执行dockerfile创建镜像

docker build -t jdk8:v3.0 .

创建并启动容器

docker create -it jdk8:v3.0

docker start 容器ID

.进入容器   

docker exec -it 容器ID /bin/sh

测试  

注1:openjdk:8-jdk-alpine这个镜像就和我们自己创建的镜像是一样,只不过JDK瘦身过了,体积更小。

另外,openjdk和jdk也是有一定区别的

注2:Alpine制作JDK8镜像是有时区问题的,可以使用时区查看命令看一下

三个版本的jdk镜像结果如下:

V1.0:centos7+jdk1.8制作而成

V2.0:alpine3.10+jdk1.8制作而成

V3.0:alpine3.10+jre1.8+瘦身命令制作而成

Docker镜像上传至阿里云

配置Docker加速器

创建镜像仓库的命名空间

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

例如:image-test

## push(推)镜像

##将镜像推送到Registry

#1.登录到阿里云的doker仓库,--username为阿里云的用户名,另外,密码为开通镜像服务时设置的密码,

#  忘记密码可以点击菜单:“容器镜像服务”->“默认实例”-->“访问凭证”进行修改

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

#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:[镜像版本号]

实例:

docker tag 238f4a774e9b registry.cn-shenzhen.aliyuncs.com/javaxl/alpine_jre:v1.0

docker push registry.cn-shenzhen.aliyuncs.com/javaxl/alpine_jre:v1.0

## pull(拉)镜像

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

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

#从Registry中拉取镜像

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

alpine制作jdk、jre镜像、自定义镜像上传阿里云的更多相关文章

  1. 百度editor调用【图片上传阿里云】

    百度editor调用简单,但是图片和文件上传阿里云就有点难度了.下面我详细说一下. 百度富文本编辑器下载地址:http://ueditor.baidu.com/website/download.htm ...

  2. 微信小程序中图片上传阿里云Oss

    本人今年6月份毕业,最近刚在上海一家小公司实习,做微信小程序开发.最近工作遇到一个小问题. 微信小程序图片上传阿里云服务器Oss也折腾了蛮久才解决的,所以特意去记录一下. 第一步:配置阿里云地址: 我 ...

  3. base64格式的图片上传阿里云

    base64格式的图片上传阿里云 上传图片的时候,除了普通的图片上传,还有一张图片信息是以base64格式发送到后台的. 后台接受base64格式的图片,上传至阿里云代码:(主要是将base64转化成 ...

  4. Docker之Alpine制作jre镜像(瘦身)+自定义镜像上传阿里云

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

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

    1.alpine制作jdk镜像 2.Alpine制作jre镜像(瘦身) 3.Docker镜像上传至阿里云 alpine制作jdk镜像 alpine Linux简介 1.Alpine Linux是一个轻 ...

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

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

  7. 关于数据上传阿里云MaxCompute调研

    1.背景 当前的数据存储基于mysql库表存储形式,目前已经无法满足愈加增大的数据存储需求,新项目基于Maxcompute数据仓库架构,需要将统计日志上传Maxcompute,本文对Maxcomput ...

  8. PHP批量保存图片到服务器再上传阿里云

    /* * 批量传输产品主图到阿里云 */ public function transferImage(){ $num = 50; $p = isset($this->request->ge ...

  9. 文件上传-阿里云OSS-存储文件

    JS上传文件到阿里云OSS OSS支持流式写入和读出.特别适合视频等大文件的边写边读业务场景. 注意在OSS的控制台:跨域管理中设置允许的方法 <script> var client = ...

随机推荐

  1. .Net Core的API网关Ocelot使用 (一)

    1.什么是API网关 API网关是微服务架构中的唯一入口,它提供一个单独且统一的API入口用于访问内部一个或多个API.它可以具有身份验证,监控,负载均衡,缓存,请求分片与管理,静态响应处理等.API ...

  2. 【原创】003 | 搭上基于SpringBoot事务思想实战专车

    前言 如果这是你第二次看到师长,说明你在觊觎我的美色! 点赞+关注再看,养成习惯 没别的意思,就是需要你的窥屏^_^ 专车介绍 该趟专车是开往基于Spring Boot事务思想实战的专车,在上一篇 搭 ...

  3. 使用正则表达式实现(加减乘除)计算器(C#实现)

    起因:公司领导要求做一款基于行业规范的计算器, 然后需要用户输入一些数据,然后根据用户输入的数据满足某些条件后,再根据用户输入的条件二进行加减乘除运算.;-) 期间因为查找规范等形成数据表的某一列是带 ...

  4. 洛谷 3111 [USACO14DEC]牛慢跑Cow Jog_Sliver 题解

    本蒟蒻又来发题解了, 一道较水的模拟题. 题意不过多解释, 思路如下: 在最开始的时候求出每头牛在t秒的位置(最终位置 然后,如果后一头牛追上了前一头牛,那就无视它, 把它们看成一个整体. else ...

  5. 使用echarts去对数据进行图形分析

    首先导入js包:echarts.min.js <script type="text/javascript" src="js/echarts.min.js" ...

  6. hdu3015,poj1990树状数组

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3015 题意:给定n组数,每组数有值x和值h,求n组数两两的val的总和.将所有x和所有h分别离散化(不 ...

  7. AI Boot Camp 分享之 ML.NET 机器学习指南

    今天在中国七城联动,全球134场的AI BootCamp胜利落幕,广州由卢建晖老师组织,我参与分享了一个主题<ML.NET 机器学习指南和Azure Kinect .NET SDK概要>, ...

  8. elasticsearch搜索QueryStringQueryBuilder时的一些问题记录

    首先看下原始数据 但是 如果使用英文查询的时候又和上面有点区别了,感觉还是分词器的问题

  9. 孟文静浅谈AG百家庄闲技巧,下三路的运用以及三株路的正反打法

    关于三珠路的各种打法,这里我做个详细的讲解,如想了解更多打法可+qq<738不要字4633>或关注VX公众号<孟文静1> 三珠路的打法源于叶汉,叶汉的打法是——三珠路打反 先看 ...

  10. 5G 调制与解调

    调制,就是将原始信号转换为适合在信道中传输的形式的一种过程,在无线通信中,调制一般均指载波调制,而解调则是调制的逆过程,即将原始信号从已调信号中恢复出来. 进行载波调制,主要为实现以下目标: 1)在无 ...