Docker之Alpine制作镜像且上传至阿里云
目的:
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制作镜像且上传至阿里云的更多相关文章
- Docker 容器更新,打包,上传到阿里云
上几章讲了镜像的拉取和运行. 这次来尝试如何将已经运行的容器打包,封装成镜像,并且上传到阿里云上,为了别的地方下载和使用更加的方便. 首先,进入镜像,如果不清楚地,可以看下上一章. [root@VM_ ...
- 构建一个java环境的centos系统镜像并上传到阿里云镜像仓库
编辑dockerfile 文件 FROM centos MAINTAINER zhaoweifeng ENV LANG en_US.UTF-8 RUN /bin/cp /usr/share/zonei ...
- 前端(react)上传到阿里云OSS存储 实例
需求背景 由于现有的后台管理系统,上传的视频越来越大,加上上传视频较慢,后端小哥提出直接从前端上传视频或者其他文件到阿里云OSS存储. 阿里云OSS 阿里云OSS文档介绍,这里不做过多赘述 安装 原本 ...
- Wordpress上传到阿里云服务器
Wordpress上传到阿里云服务器 登录服务器 https://account.aliyun.com/login/login.htm 绑定域名 获取FTP信息.数据库信息 在本地修改wordpres ...
- Windows环境下用C#编程将文件上传至阿里云OSS笔记
Windows环境下用C#编程将文件上传至阿里云OSS笔记 本系列文章由ex_net(张建波)编写,转载请注明出处. http://blog.csdn.net/ex_net/article/detai ...
- JavaScript进阶(九)JS实现本地文件上传至阿里云服务器
JS实现本地文件上传至阿里云服务器 前言 在前面的博客< JavaScript进阶(八)JS实现图片预览并导入服务器功能>(点击查看详情)中,实现了JS将本地图片文件预览并上传至阿里云服务 ...
- OSS文件上传到阿里云
<script src="http://gosspublic.alicdn.com/aliyun-oss-sdk-4.4.4.min.js"></script&g ...
- Java下载https文件上传到阿里云oss服务器
Java下载https文件上传到阿里云oss服务器 今天做了一个从Https链接中下载音频并且上传到OSS服务器,记录一下希望大家也少走弯路. 一共两个类: 1 .实现自己的证书信任管理器类 /** ...
- Linux本地数据上传到阿里云OSS
这篇文章主要是介绍如何将服务器本地的数据上传到阿里云OSS的指定bucket中,最重要的参考文档是数据迁移单机部署.我第一次上传数据到OSS上时,步骤要比前面的链接中介绍的要麻烦,ossimport工 ...
随机推荐
- 寄存器,移位寄存器的电路原理以及verilog代码实现
寄存器:用以存放二进制代码的电路,下图为由维特阻塞D触发器组成的4位数码寄存器: 逻辑功能分析: 1.异步端CR置0时,输出置0: 2.同步并行置数:D0~D3为4个输入代码,当CP上升沿到达时,D0 ...
- 线程池ScheduledThreadPoolExecutor
Java中调度线程池ScheduledThreadPoolExecutor原理探究 一. 前言 前面讲解过Java中线程池ThreadPoolExecutor原理探究,ThreadPoolExecut ...
- Java重启后不能打开的一些解决方法
点开环境变量设置,重新确定一下(据说是win10的原因) 将环境变量中path与CLASSPATH中的%JAVA_HOME%改为JAVA_HOME的值.参考https://blog.csdn.net/ ...
- mysql左连接查询结果不准确
现有四张表 表(1)res_resource_catalog 表(2)res_catalog_classify 表(3)res_resource_classify 表(4)res_resource_m ...
- win10安装ubuntu双系统遇到的问题
安装过程学习了几个博客 Ubuntu 16.04与Win10双系统双硬盘安装图解:https://www.cnblogs.com/coxiseed/p/9945202.html?tdsourcetag ...
- [转]初识NuGet - 概念, 安装和使用
1. NuGet是什么? NuGet is a Visual Studio 2010 extension that makes it easy to add, remove, and update l ...
- linux 下nc 命令的使用
linux 下nc 命令的使用 https://blog.51cto.com/samyubw/555247
- IM (二):数据通信协议的选择
https://www.jianshu.com/p/e9c2b7c48c34 http://www.52im.net/thread-283-1-1.html https://github.com/Ja ...
- 【C++】C++中explicity关键字的使用
读者可以尝试预言一下这段代码的输出: #include <iostream> using namespace std; class Complex { private: double re ...
- 端口镜像——配置原理篇
镜像是指将经过指定端口(镜像端口)或者指定VLAN(镜像VLAN)的报文复制一份到另一个指定端口(观察端口),然后转发到网络监控设备,供网络管理员进行网络监控与故障管理. 看官们可以通过下面的这张图了 ...