目录
制作 jdk 1.0 镜像 ——Docker
1.创建文件夹上传jdk的安装包,和在同级目录下编写Dockerfile文件
2.编写 Dockerfile 文件
3.执行Dockerfile文件,初次依赖镜像的时候会下载相应镜像
优化制作jdk镜像(缩小内存大小)——使用alpine
1、下载alpine镜像
2、创建并编辑Dockerfile
4、执行dockerfile创建镜像
5.创建容器并启动容器且进入容器
制作jdk镜像的思路:
1、新建一个文件Dockerfile
2、在Dockerfile添加制作jdk镜像的命令
3、指定基础镜像 centos:7
4、 在centos7中添加jdk的安装包
5、 解压安装包
6、配置path
7、java -version
制作 jdk 1.0 镜像 ——Docker
案例:使用Docker 制作jdk1.0版本的镜像
工具:jdk1.0版本、docker
查看所有的jdk
docker search jdk
1.创建文件夹上传jdk的安装包,和在同级目录下编写Dockerfile文件
2.编写 Dockerfile 文件
#1.指定基础镜像,并且必须是第一条指令
FROM 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"]
cat Dockerfile【查看Dockerfile 详情内容】
pwd【查看当前目录】
3.执行Dockerfile文件,初次依赖镜像的时候会下载相应镜像
docker build -t jdk8:v1.0 .【注意后面有个英文符号点“.”】
注1:-t jdk8:v1.0 给新构建的镜像取名为 jdk8, 并设定版本为 v1.0
注2:注意最后有个点,代表使用当前路径的 Dockerfile 进行构建
继续检查一下是否有该镜像
docker images
下载成功!
根据该镜像ID创建容器并启动该容器且进入该容器
docker run -it 2e1674d622d6 /bin/bash
查看jdk是否配置成功:
java -version
OK,成功,我们自己制作的镜像就配置好了java环境,而拉取别的镜像时,若没有以上配置java环境步骤,是没有java运行环境的。
优化制作jdk镜像(缩小内存大小)——使用alpine
案例:现在制作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
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
步骤:
1、下载alpine镜像
docker pull alpine:latest
glib安装包如果从网络下载速度实在是太慢了,所以先下载复制到镜像中 ,所以我已经下好了glib安装包就是使用alpine需要用的一些依赖文件,我使用的是2.29版本的。
然后直接添加进去
添加jre和jdk的安装压缩包
OK,添加成功。
2、创建并编辑Dockerfile
touch Dockerfile
vi Dockerfile
【注意:因为创建jdk1.0版本的时候也使用了这个文件名称,所以为了不重复我重新建了一个文件mydocker2->Dockerfile;jdk1.0是mydocker->Dockerfile】
注1:Dockerfile内容:
#1.指定基础镜像,并且必须是第一条指令
FROM alpine:latest
#FROM alpine:3.10#2.指明该镜像的作者和其电子邮件
MAINTAINER xyz "chenchen@qq.com"#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /chenchen_docker/jdk#4.将一些安装包复制到镜像中,语法:ADD/COPY <src>... <dest>
## ADD与COPY的区别:ADD复制并解压,COPY仅复制
ADD jdk-8u221-linux-x64.tar.gz /chenchen_docker/jdk/
## glibc安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中
COPY glibc-2.29-r0.apk /chenchen_docker/jdk/
COPY glibc-bin-2.29-r0.apk /chenchen_docker/jdk/
COPY glibc-i18n-2.29-r0.apk /chenchen_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=/chenchen_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"]
4、执行dockerfile创建镜像
docker build -t jdk8:v2.0 .
【注意:这里用的是-t不是-f,-f是可以自定义名称】
ok,成功!
#5.创建容器并启动容器且进入容器
docker run -it 容器ID /bin/sh
【docker exec -it 容器ID /bin/sh(使用exec代表着这个容器是一件创建好了)】
java -version【测试】
注:最后是sh而非bash
也可直接 启动并进入容器
OK,成功!
由此可见使用docker创建jdk8:1.0版本的镜像和使用alpine创建的jdk8:2.0版本的镜像之间大小的区别: