Docker自定义镜像上传阿里云
目录
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),我们可以通过Alpine Linux 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)在本地创建一个目录,并将构建所需要的软件包放入目录,如下图所示:
所用文件下载地址
天翼云盘 珍藏美好生活 家庭云|网盘|文件备份|资源分享(访问码:uoa5)
注: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. 上传阿里云镜像仓库
阿里云镜像仓库简介:
阿里云默认实例版(免费版):命名空间:3个, 单命名空间下私有仓库数200个,单命名空间下公开仓库总数1000个,镜像版本总数不限制,构建规则总数5个,构建任务并发3个,同步任务并发3个,不支持交付链。
1) 登录阿里云账户
2) 控制台 -> 容器镜像服务 -> 创建命名空间(建议组织,个人,公司的名字) -> 创建仓库(选择本地仓库)
点击进入 个人实例
注意在
Docker自定义镜像上传阿里云相关推荐
- 自定义镜像上传阿里云(图文教程 附带思维导图)
自定义镜像上传阿里云 alpine Linux简介 思维导图 使用Dockerfile基于alpine制作JDK8镜像 使用Dockerfile基于alpine制作最小JRE基础镜像 将Docker镜 ...
- docker之自定义镜像上传阿里云
alpine制作jdk镜像 alpine Linux简介 1.Alpine Linux是一个轻型Linux发行版,它不同于通常的Linux发行版,Alpine采用了musl libc 和 BusyBo ...
- Docker 之 自定义镜像上传阿里云
alpine制作jdk镜像 alpine Linux简介 1.Alpine Linux是一个轻型Linux发行版,它不同于通常的Linux发行版,Alpine采用了musl libc 和 BusyBo ...
- 自定义镜像上传阿里云
alpine制作jdk镜像 alpine Linux简介 1.Alpine Linux是一个轻型Linux发行版,它不同于通常的Linux发行版(centos.Ubuntu),Alpine采用了mus ...
- docker镜像上传阿里云仓库
推送至阿里云镜像: 1.首先在阿里云上选择容器镜像服务,创建命名空间以及镜像仓库 2. docker login --username=zhangshitongsky@163.com registry ...
- (私有云)客户给的VMware镜像磁盘如何制作成自定义镜像上传至openstack镜像服务器供客户使用
(私有云)客户给的VMware镜像磁盘如何制作成自定义镜像上传至openstack镜像服务器供客户使用 目录 1.准备工作 2.修改域xml配置文件以及是否缩容 3.在镜像更新服务器上启动这个自定义镜 ...
- ESP8266获取传感器数值,上传阿里云
#include <DHT.h> #include<ESP8266WiFi.h> #include <PubSubClient.h> #include <Wi ...
- java利用iText写pdf并上传阿里云OSS并下载
iText是用于生成pdf的一个类库,通过它可以生成pdf或者将XML , HTML转换城pdf模版:阿里云的oss对象存储存储的类型比较多了,可以存储音频 图片 pdf excel 等资源,oss本 ...
- 生成Excel表格并上传阿里云存储
1.程序内部生成Excel表格 1.1 表头和数据分离 //表头存储格式 List<String[]> headerGoodsOrderListString[] h1 = new Stri ...
最新文章
- 算法设计思想(4)— 分治法
- 可构建AI的“AI”诞生:几分之一秒内,就能预测新网络的参数
- Netbackup 添加策略_报NFS.Skipping
- mysql时间变成季度_Mysql 时间操作(当天, 昨天,7 天,30 天, 半年, 全年, 季度)
- JSON数据解析:Gson(谷歌)和fastjson(阿里巴巴)的异同点
- haddler处理队列 netty_如何实现延迟队列
- 汇总Web前端开发工程师需要注意的一些开发规范
- Storage API简介和存储限制与逐出策略
- i++ 和 ++i 效率的分析以及自定义类型的自增/自减运算符重载实例
- 立志10天学会C++基础应用—day02 代码清晰易懂 涉及数据结构算法的知识 写完了~我也麻了
- 飞鸽传书举一个小例子
- java常见经典知识点汇总
- 暴雪插件占用服务器,暴雪为部分高负载、高排队的服务器开启免费转服服务 解决负载过高问题...
- 关于max(X,Y),min(X,Y)
- qt msvc编译中文乱码解决
- python查询注册表子项是否存在并操作
- 深度原理与框架-图像超分辨重构-tensorlayer
- PuTTY/PuttyGen介绍
- 20201022-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises19
- 经典的java角色扮演,盘点2010年十大经典角色扮演类游戏合集