目的:

  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. gethostname、gethostbyname

    gethostname():返回本地主机的标准主机名 原型: #include<unistd.h> int gethostname(char *name, size_t len); 参数说 ...

  2. shell 获取字符串的长度

    awk 方式 bogon:conf macname$ echo "abcde" | awk '{print length($0)}' 利用${#str}来获取字符串的长度 bogo ...

  3. [已解决] Python logging 重复打印日志信息

    问题描述 问题代码如下: def get_logger(logger_name): """得到日志对象""" logger = loggin ...

  4. 2018-2019-2 20175211 实验四《Android程序设计》实验报告

    目录 一.实验内容及步骤 1.Android Studio的安装测试 2.Activity测试 3.UI测试 4.布局测试 5.事件处理测试 二.问题及解决方法 三.代码托管 四.实验心得体会 一.实 ...

  5. sql server 使用链接服务器远程查询

    --PKselect * from sys.key_constraints where object_id = OBJECT_ID('TB')--FKselect * from sys.foreign ...

  6. bind named.conf 的理解

    [root@46 /]#yum -y install bind bind-chroot bind-libs bind-utils caching-nameserver目录说明/var/named/ch ...

  7. 11 JavaScript Utility Libraries you Should Know in 2019

    11 Useful Javascript utility libraries to speed your development.

  8. TP 控制器和模型里面order 写法不同

      控制器: Db::table('think_user')->where('status=1')->order('id desc')->limit(5)->select(); ...

  9. python dlib学习(五):比对人脸

    前言在前面的博客中介绍了,如何使用dlib标定人脸(python dlib学习(一):人脸检测),提取68个特征点(python dlib学习(二):人脸特征点标定).这次要在这两个工作的基础之上,将 ...

  10. matlab学习笔记13_1 函数返回值

    一起来学matlab-matlab学习笔记13函数 13_1 函数返回值 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 https://blog.csdn.net/qq_36556 ...