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
注 1:dockerfile 内容
- #1. 指定基础镜像, 并且必须是第一条指令
- FROM alpine:latest
- #FROM alpine:3.10
- #2. 指明该镜像的作者和其电子邮件
- MAINTAINER xyz "[email protected]"
- #3. 在构建镜像时, 指定镜像的工作目录, 之后的命令都是基于此工作目录, 如果不存在, 则会创建目录
- WORKDIR /jt_docker/jdk
- #4. 将一些安装包复制到镜像中, 语法: ADD/COPY <src>... <dest>
- ## ADD 与 COPY 的区别: ADD 复制并解压, COPY 仅复制
- ADD jdk-8u221-Linux-x64.tar.gz /jt_docker/jdk/
- ## glibc 安装包如果从网络下载速度实在是太慢了, 先提前下载复制到镜像中
- COPY glibc-2.29-r0.apk /jt_docker/jdk/
- COPY glibc-bin-2.29-r0.apk /jt_docker/jdk/
- COPY glibc-I18N-2.29-r0.apk /jt_docker/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=/jt_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"]
- #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: 最后制作完成后的镜像大小为 400M 左右
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
- #3. 创建并编辑 dockerfile
注 1:dockerfile 内容如下
- #1. 指定基础镜像, 并且必须是第一条指令
- FROM alpine:latest
- #FROM alpine:3.10
- #2. 指明该镜像的作者和其电子邮件
- MAINTAINER xyz "[email protected]"
- #3. 在构建镜像时, 指定镜像的工作目录, 之后的命令都是基于此工作目录, 如果不存在, 则会创建目录
- WORKDIR /jt_docker/jdk
- #4. 将一些安装包复制到镜像中, 语法: ADD/COPY <src>... <dest>
- ## ADD 与 COPY 的区别: ADD 复制并解压, COPY 仅复制
- ## 注意~~~ 上传的瘦身后的 jre
- ADD jre1.8.0_221.tar.gz /jt_docker/jdk/
- ## glibc 安装包如果从网络下载速度实在是太慢了, 先提前下载复制到镜像中
- COPY glibc-2.29-r0.apk /jt_docker/jdk/
- COPY glibc-bin-2.29-r0.apk /jt_docker/jdk/
- COPY glibc-I18N-2.29-r0.apk /jt_docker/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=/jt_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.0 .
- #5. 创建并启动容器
- docker create -it jdk8:v3.0
docker start 容器 ID
#6. 进入容器
docker exec -it 容器 ID /bin/sh
- #7. 测试 jdk
- java -version
注 1:openjdk:8-jdk-alpine 这个镜像就和我们自己创建的镜像是一样, 只不过 JDK 瘦身过了, 体积更小.
另外, openjdk 和 jdk 也是有一定区别的, 大家可以看下资料 "14 OpenJDK 与 JDK 的区别分析 - 简书. mht" 了解一下
注 2:Alpine 制作 JDK8 镜像是有时区问题的, 可以使用时区查看命令看一下
三个版本的 jdk 镜像结果如下:
V1.0:centos7+jdk1.8 制作而成
V2.0:alpine3.10+jdk1.8 制作而成
V3.0:alpine3.10+jre1.8 + 瘦身命令制作而成
Docker 镜像上传至阿里云
将 Docker 镜像上传至阿里云(或从阿云下载镜像)
- ## 前期准备
- #1. 注册阿里云账户
阿里云官方网站链接: https://dev.aliyun.com/
- #2. 登陆账户
- #3. 配置 Docker 加速器
注: 搜索 "容器镜像服务"
#4. 创建镜像仓库的命名空间
例如: jtx
#5. 创建镜像仓库(创建镜像仓库时要绑定一个代码托管网站, 例如: GitHub)
例如: image-test
- ## push(推)镜像
- ## 将镜像推送到 Registry
- #1. 登录到阿里云的 doker 仓库,--username 为阿里云的用户名, 另外, 密码为开通镜像
服务时设置的密码,
- # 忘记密码可以点击菜单:"容器镜像服务"->"默认实例"-->"访问凭证" 进行修改
- docker login --username=jt registry.cn-shenzhen.aliyuncs.com
- #2. 为本地镜像添加 tag
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/jtx/alpine_jre:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/jtx/alpine_jre:[镜像版本号]
- # 从 Registry 中拉取镜像
- docker pull registry.cn-hangzhou.aliyuncs.com/jtx/alpine_jre:v1.0
来源: http://www.bubuko.com/infodetail-3338411.html