目录
一、Docker制作jdk镜像
jdkv.1.0的制作
步骤
二,alpine制作jdk镜像
2.1 alpine Linux简介
2.2 基于alpine制作JDK8镜像
前期准备
2.3步骤
2.3.1.下载镜像
2.3.2.创建并编辑dockerfile
2.3.3.执行dockerfile创建镜像
2.3.4.创建并启动容器(可略)
2.3.5.进入容器(执行红色)
三、Alpine制作jre镜像
1.首先下载jre
2.rz上传至centos,并删除无用的文件,并重新压缩
3.创建并编辑dockerfile
4.执行dockerfile创建镜像
5.创建并启动容器
6.进入容器
7.测试jdk
四,Docker镜像上传至阿里云
前期准备
1.注册阿里云账户
2.登陆账户
3.配置Docker加速器
4.创建镜像仓库的命名空间
5.创建镜像仓库(创建镜像仓库时要绑定一个代码托管网站,例如:github)
push(推)镜像
将镜像推送到Registry
1.登录到阿里云的doker仓库,--username为阿里云的用户名,另外,密码为开通镜像
2、为本地镜像添加tag
pull(拉)镜像
1.同样的先登录到阿里云的doker仓库
2.从Registry中拉取镜像
一、Docker制作jdk镜像
jdkv.1.0的制作
步骤
0.启动虚拟机,进入centos
1.创建文件夹上传jdk的安装包,和在同级目录下编写Dockerfile文件
2.编写 Dockerfile 文件
#1.指定基础镜像,并且必须是第一条指令
RROM centos:7
#2.指明该镜像的作者和其电子邮件
MAINTAINER zs "zs@qq.com"
#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /javaxl_docker/jdk
#4.一个复制命令,把jdk安装文件复制到镜像中,语法:ADD <src>... <dest>,注意:jdk*.tar.gz使用的是相对路径
ADD jdk-8u221-linux-x64.tar.gz /javaxl_docker/jdk/
#5.配置环境变量
ENV JAVA_HOME=/javaxl_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:v1.0 .
注1:-t jdk8:v1.0 给新构建的镜像取名为 jdk8, 并设定版本为 v1.0
注2:注意最后有个点,代表使用当前路径的 Dockerfile 进行构建
4.查看镜像
docker images
5.创建并启动容器
docker run -it jdk8:v1.0 /bin/bash
6.检查是否有问题
java -version (javac)
dockerfile实践经验
1. 精简镜像用途:尽量让每个镜像的用途都比较集中单一,避免构造大而复杂、多功能的镜像
2. 选用合适的基础镜像:容器的核心是应用,选择过大的父镜像(如Ubuntu系统镜像)会造成最终生成应用镜像的膝肿,
推荐选用瘦身过的应用镜像或者较为小巧的系统镜像(alpine)
二,alpine制作jdk镜像
2.1 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
2.2 基于alpine制作JDK8镜像
案例:现在制作jdk2.0版本,方便直观查看前面jdk1.0版本和jdk2.0版本的区别。
工具:jdk2.0版本、alpine
目标:我希望我的jdk首先是具有java运行环境,其次大小要变小,减小我们的内存开销硬盘开销。
问:那么应该如何去缩小大小,去舍弃那些没用的文件呢?
答:在我们跑项目的时候,跑的项目是已经由.java文件编译而成的.class文件了,而.java文件是由javac命令(源于jdk)生成,.class文件是由java命令(源于jre)编译成的,所以跑项目的时候只需要留jre文件就可以了。【jre指的是运行环境,jdk包含开发环境(编译环境)又包含运行环境,但是跑项目只需要运行环境】可想而知jdk的大小是比jre的大小要大的。
结论:优化的两个点:①不适用centos7(功能太多较本周)使用alpine②使用jre不使用jdk
前期准备
将前一次的Dockerfile文件备份然后将其删掉
glibc安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中 也就是操作了第一步
2.3步骤
2.3.1.下载镜像
docker pull alpine:latest
2.3.2.创建并编辑dockerfile
touch Dockerfile
vi Dockerfile
dockerfile内容
#1.指定基础镜像,并且必须是第一条指令 (若下一步出现问题 可尝试切换至第一行 版本原因) #FROM alpine:latest FROM alpine:3.10 #2.指明该镜像的作者和其电子邮件 MAINTAINER xyz "xyz@qq.com" #3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录 WORKDIR /javaxl_docker/jdk #4.将一些安装包复制到镜像中,语法:ADD/COPY <src>... <dest> ## ADD与COPY的区别:ADD复制并解压,COPY仅复制 ADD jdk-8u221-linux-x64.tar.gz /javaxl_docker/jdk/ ## glibc安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中 COPY glibc-2.29-r0.apk /javaxl_docker/jdk/ COPY glibc-bin-2.29-r0.apk /javaxl_docker/jdk/ COPY glibc-i18n-2.29-r0.apk /javaxl_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.运行指定的命令 #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=/javaxl_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"] |
2.3.3.执行dockerfile创建镜像
docker build -t jdk8:v2.0 .
2.3.4.创建并启动容器(可略)
docker create -it jdk8:v2.0
docker start 容器ID
2.3.5.进入容器(执行红色)
docker exec -it 容器ID /bin/sh
注1:最后是sh而非bash
也可直接 启动并进入容器
docker run -it --name myjdk 容器ID
或 docker run -it --name 别名 镜像ID /bin/sh命令
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.jsphttps://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
打包完成后 这就是最少内存的一个jre运行环境 之后就可以直接使用此压缩包制作镜像
将之前用于创建jdk2.0版本的镜像的Dockerfile文件进行复制 并删除Dockerfile 重新创建 用于制作jre镜像
3.创建并编辑dockerfile
与创造jdk镜像不同就在此文件内容
注1:dockerfile内容如下
#1.指定基础镜像,并且必须是第一条指令 #FROM alpine:latest FROM alpine:3.10 #2.指明该镜像的作者和其电子邮件 MAINTAINER xyz "xyz@qq.com" #3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录 WORKDIR /javaxl_docker/jdk #4.将一些安装包复制到镜像中,语法:ADD/COPY <src>... <dest> ## ADD与COPY的区别:ADD复制并解压,COPY仅复制 ## 注意~~~上传的瘦身后的jre ADD jre1.8.0_221.tar.gz /javaxl_docker/jdk/ ## glibc安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中 COPY glibc-2.29-r0.apk /javaxl_docker/jdk/ COPY glibc-bin-2.29-r0.apk /javaxl_docker/jdk/ COPY glibc-i18n-2.29-r0.apk /javaxl_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=/javaxl_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
或 docker run -it --name 别名 镜像ID /bin/sh命令
7.测试jdk
java -version
注1:openjdk:8-jdk-alpine这个镜像就和我们自己创建的镜像是一样,只不过JDK瘦身过
四,Docker镜像上传至阿里云
将Docker镜像上传至阿里云(或从阿云下载镜像)
前期准备
1.注册阿里云账户
阿里云官方网站链接:开放云原生应用-云原生(Cloud Native)-云原生介绍 - 阿里云云原生(Cloud Native)技术帮助企业在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。 在阿里云容器服务ACK 可以帮助您快速构建并高效管理 云原生应用,帮助企业更快交付、降低未知风险、拓展业务边界。https://dev.aliyun.com
2.登陆账户
注:搜索“容器镜像服务”
3.配置Docker加速器
2.复制路径 进行访问
3.访问页面 点击新建代码库
4.输入代码库名称即可
5.个人设置
6.创建访问令牌
7.拷贝令牌
8.放置我们刚刚创建的代码库中
绑定成功啦
4.创建镜像仓库的命名空间
例如:javaxl
5.创建镜像仓库(创建镜像仓库时要绑定一个代码托管网站,例如:github)
进行CodeUp绑定
现在进行下一步,把本地的镜像推送到阿里云中来。
push(推)镜像
将镜像推送到Registry
1.登录到阿里云的doker仓库,--username为阿里云的用户名,另外,密码为开通镜像
docker login --username=aliyun5376531218 registry.cn-hangzhou.aliyuncs.com
服务时设置的密码,忘记密码可以点击菜单:“容器镜像服务”->“默认实例”-->“访问凭证”进行修改
2、为本地镜像添加tag
选择你要上传的镜像id 可以自己编写版本号
docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/javaxl/alpine_jre:[镜像版本号]
推送的是此版本的jdk 推送时命名版本为v6.0
然后返回到我们的阿里云查看是否上传成功:
接下来就是给大家分享如何从阿里云上拉取我们已上传的镜像,为了方便稍后的演示,我会把所有jdk的镜像都清理干净
pull(拉)镜像
我们拉取另一个仓库中的此镜像
1.同样的先登录到阿里云的doker仓库
docker login --username=aliyun5376531218 registry.cn-hangzhou.aliyuncs.com
2.从Registry中拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/ljj123/ljj:[镜像版本号]
拉取成功!!!
进入容器查看环境
本期文章到此结束 我们下期见!