Docker-自定义镜像上传阿里云

目录

一、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文件

Docker-自定义镜像上传阿里云_第1张图片

2.编写 Dockerfile 文件

Docker-自定义镜像上传阿里云_第2张图片

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

RROM 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"]

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

      docker build -t jdk8:v1.0 .

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

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

Docker-自定义镜像上传阿里云_第3张图片

4.查看镜像

      docker images

Docker-自定义镜像上传阿里云_第4张图片

5.创建并启动容器

      docker run -it jdk8:v1.0 /bin/bash

6.检查是否有问题

      java -version  (javac)

Docker-自定义镜像上传阿里云_第5张图片

 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安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中 也就是操作了第一步

Docker-自定义镜像上传阿里云_第6张图片

2.3步骤

   2.3.1.下载镜像

   docker pull alpine:latest

   2.3.2.创建并编辑dockerfile

   touch Dockerfile

   vi Dockerfile

   dockerfile内容

Docker-自定义镜像上传阿里云_第7张图片

#1.指定基础镜像,并且必须是第一条指令 (若下一步出现问题 可尝试切换至第一行 版本原因)

#FROM alpine:latest

FROM alpine:3.10

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

MAINTAINER xyz "[email protected]"

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

WORKDIR /javaxl_docker/jdk

#4.将一些安装包复制到镜像中,语法:ADD/COPY ...

## 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 .

Docker-自定义镜像上传阿里云_第8张图片

 

 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

Docker-自定义镜像上传阿里云_第9张图片

   注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,并删除无用的文件,并重新压缩

Docker-自定义镜像上传阿里云_第10张图片

      解压

      tar -zxvf jre-8u221-linux-x64.tar.gz

 Docker-自定义镜像上传阿里云_第11张图片

      查看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

Docker-自定义镜像上传阿里云_第12张图片

 返回上级目录,重新打包jre

      cd ../

      tar -zcvf jre1.8.0_221.tar.gz jre1.8.0_221

Docker-自定义镜像上传阿里云_第13张图片

 打包完成后 这就是最少内存的一个jre运行环境 之后就可以直接使用此压缩包制作镜像

 将之前用于创建jdk2.0版本的镜像的Dockerfile文件进行复制 并删除Dockerfile 重新创建 用于制作jre镜像

Docker-自定义镜像上传阿里云_第14张图片

3.创建并编辑dockerfile

        与创造jdk镜像不同就在此文件内容

      注1:dockerfile内容如下

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

#FROM alpine:latest

FROM alpine:3.10

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

MAINTAINER xyz "[email protected]"

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

WORKDIR /javaxl_docker/jdk

#4.将一些安装包复制到镜像中,语法:ADD/COPY ...

## 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 .

Docker-自定义镜像上传阿里云_第15张图片

Docker-自定义镜像上传阿里云_第16张图片

   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.登陆账户

 注:搜索“容器镜像服务”

Docker-自定义镜像上传阿里云_第17张图片

 3.配置Docker加速器

Docker-自定义镜像上传阿里云_第18张图片

 2.复制路径 进行访问Docker-自定义镜像上传阿里云_第19张图片

3.访问页面 点击新建代码库

Docker-自定义镜像上传阿里云_第20张图片

 4.输入代码库名称即可Docker-自定义镜像上传阿里云_第21张图片

 5.个人设置Docker-自定义镜像上传阿里云_第22张图片

 6.创建访问令牌

Docker-自定义镜像上传阿里云_第23张图片

 7.拷贝令牌

 8.放置我们刚刚创建的代码库中

 Docker-自定义镜像上传阿里云_第24张图片

 绑定成功啦Docker-自定义镜像上传阿里云_第25张图片

4.创建镜像仓库的命名空间

   例如:javaxl

5.创建镜像仓库(创建镜像仓库时要绑定一个代码托管网站,例如:github)

Docker-自定义镜像上传阿里云_第26张图片

 进行CodeUp绑定 

Docker-自定义镜像上传阿里云_第27张图片Docker-自定义镜像上传阿里云_第28张图片

现在进行下一步,把本地的镜像推送到阿里云中来。 

push(推)镜像

   将镜像推送到Registry

   1.登录到阿里云的doker仓库,--username为阿里云的用户名,另外,密码为开通镜像

docker login --username=aliyun5376531218 registry.cn-hangzhou.aliyuncs.com

服务时设置的密码,忘记密码可以点击菜单:“容器镜像服务”->“默认实例”-->“访问凭证”进行修改 Docker-自定义镜像上传阿里云_第29张图片

 2、为本地镜像添加tag

选择你要上传的镜像id 可以自己编写版本号

 docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/javaxl/alpine_jre:[镜像版本号]

 ​​​Docker-自定义镜像上传阿里云_第30张图片

 推送的是此版本的jdk 推送时命名版本为v6.0Docker-自定义镜像上传阿里云_第31张图片

Docker-自定义镜像上传阿里云_第32张图片

  然后返回到我们的阿里云查看是否上传成功:

Docker-自定义镜像上传阿里云_第33张图片

 接下来就是给大家分享如何从阿里云上拉取我们已上传的镜像,为了方便稍后的演示,我会把所有jdk的镜像都清理干净

Docker-自定义镜像上传阿里云_第34张图片

pull(拉)镜像

我们拉取另一个仓库中的此镜像

Docker-自定义镜像上传阿里云_第35张图片

1.同样的先登录到阿里云的doker仓库

docker login --username=aliyun5376531218 registry.cn-hangzhou.aliyuncs.com

2.从Registry中拉取镜像

docker pull registry.cn-hangzhou.aliyuncs.com/ljj123/ljj:[镜像版本号]

Docker-自定义镜像上传阿里云_第36张图片

 拉取成功!!!

Docker-自定义镜像上传阿里云_第37张图片

 进入容器查看环境 

Docker-自定义镜像上传阿里云_第38张图片

 本期文章到此结束 我们下期见!

你可能感兴趣的:(docker,阿里云,java)