分别使用Alpine、Docker制作jdk镜像

目录

制作 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

分别使用Alpine、Docker制作jdk镜像_第1张图片

1.创建文件夹上传jdk的安装包,和在同级目录下编写Dockerfile文件

2.编写 Dockerfile 文件

#1.指定基础镜像,并且必须是第一条指令

FROM centos:7

#2.指明该镜像的作者和其电子邮件

MAINTAINER zs "[email protected]"

#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录

WORKDIR /javaxl_docker/jdk

#4.一个复制命令,把jdk安装文件复制到镜像中,语法:ADD ... ,注意: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"]

分别使用Alpine、Docker制作jdk镜像_第2张图片

 cat Dockerfile【查看Dockerfile 详情内容】

分别使用Alpine、Docker制作jdk镜像_第3张图片

 pwd【查看当前目录】

3.执行Dockerfile文件,初次依赖镜像的时候会下载相应镜像

docker build -t jdk8:v1.0 .【注意后面有个英文符号点“.”】

注1:-t  jdk8:v1.0  给新构建的镜像取名为 jdk8, 并设定版本为 v1.0

注2:注意最后有个点,代表使用当前路径的 Dockerfile 进行构建

分别使用Alpine、Docker制作jdk镜像_第4张图片

继续检查一下是否有该镜像

docker  images

分别使用Alpine、Docker制作jdk镜像_第5张图片

下载成功! 

根据该镜像ID创建容器并启动该容器且进入该容器

docker run -it 2e1674d622d6 /bin/bash

查看jdk是否配置成功:

java -version

分别使用Alpine、Docker制作jdk镜像_第6张图片

 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版本的。

然后直接添加进去 

分别使用Alpine、Docker制作jdk镜像_第7张图片

添加jre和jdk的安装压缩包 

分别使用Alpine、Docker制作jdk镜像_第8张图片

分别使用Alpine、Docker制作jdk镜像_第9张图片

 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 "[email protected]"

#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /chenchen_docker/jdk

#4.将一些安装包复制到镜像中,语法:ADD/COPY ...
## 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"]

分别使用Alpine、Docker制作jdk镜像_第10张图片

4、执行dockerfile创建镜像

docker build -t jdk8:v2.0 .

【注意:这里用的是-t不是-f,-f是可以自定义名称】

分别使用Alpine、Docker制作jdk镜像_第11张图片

 分别使用Alpine、Docker制作jdk镜像_第12张图片

ok,成功! 

 #5.创建容器并启动容器且进入容器  

 docker run -it 容器ID /bin/sh 

【docker exec -it 容器ID /bin/sh(使用exec代表着这个容器是一件创建好了)】

 java -version【测试】

分别使用Alpine、Docker制作jdk镜像_第13张图片

注:最后是sh而非bash

   也可直接 启动并进入容器

 OK,成功!

由此可见使用docker创建jdk8:1.0版本的镜像和使用alpine创建的jdk8:2.0版本的镜像之间大小的区别:

分别使用Alpine、Docker制作jdk镜像_第14张图片 好啦,那么如何优化镜像这一环节的知识点就介绍到这里结束啦~

本期内容分享到此结束,我们下期再见!

你可能感兴趣的:(Docker,linux,运维,服务器)