alpine Linux与基于alpine制作JDK8镜像

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Docker commit 命令 1.下载基础镜像 2.使用此基础镜像创建/启动/进入容器 3.在容器安装自己需要的软件 4.将保存配置完成的容器提交成镜像 语法如下 docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] OPTIONS说明: -a :提交的镜像作者; -c :使用Dockerfile指令来创建镜像; -m :提交时的说明文字; -p :在commit时,将容器暂停。 实例:将容器a404c6c174a2 保存为新的镜像,并添加提交人信息和说明
  1. alpine Linux简介
    1.Alpine Linux是一个轻型Linux发行版,它不同于通常的Linux发行版,Alpine采用了musl libc 和
    BusyBox以减少系统的体积和运行时的资源消耗。
    2.Alpine Linux提供了自己的包管理工具:apk(注意:ubuntu中是apt-get,centos中式yum),我们可以通过https://pkgs.alpinelinux.org/packages 查询包信息
    3.Alpine Docker镜像继承了Alpine Linux发行版的这些优势,相比于其他Linux Docker镜像,它的体积非常小
    对比常用的、没有压缩过的基础镜像(查看当前的:latest标签):
    Alpine - 4.8MB
    Ubuntu - 124.8 MB
    Debian - 125.1MB
    Centos - 196MB
    4.建议使用Alpine Linux 3.10.0版本,这也是 v3.10 稳定系列的首个版本
    alpine:3.10

1 基于alpine制作JDK8镜像
1.1 下载镜像

$ docker pull alpine:latest

1.2 创建并编辑dockerfile

$ touch Dockerfile

$ vi Dockerfile
注1:dockerfile内容见资料/Dockerfile-Alpine.txt

1.3 执行dockerfile创建镜像

$ docker build -t jdk8:v2.0 .

1.4 创建并启动容器

$ docker create -it jdk8:v2.0
$ docker start 容器ID
或者
$ docker run -it -d jdk8:v2.0 /bin/sh

1.5 进入容器

$ docker exec -it 容器ID /bin/sh

注1:最后是sh而非bash

1.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左右

2 Docker容器之最小JRE基础镜像

2.1 首先下载jre,下载地址是https://www.java.com/en/download/manual.jsp,大概是77M

  资料/jre-8u221-linux-x64.tar.gz

2.2 rz上传至ubuntu,并删除无用的文件,并重新压缩

  
  2.2.1 解压

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

  2.2.2 查看jre大小(瘦身前230M)

  $ du -sh jre1.8.0_221

  2.2.3 进入jre目录,并执行瘦身命令

  $ cd jre1.8.0_221

  再次执行瘦身命令2.2.2 (命令见资料,瘦身后111M)
  
  2.2.4 返回上级目录,重新打包jre

  $ cd ..
  $ tar zcvf jre1.8.0_221.tar.gz jre1.8.0_221

2.3 创建并编辑dockerfile

  注1:dockerfile内容见资料/Dockerfile-Alpine-min.txt

2.4 执行dockerfile创建镜像

  $ docker build -t jdk8:v3.0 .

2.5 创建并启动容器

  $ docker create -it jdk8:v3.0    
  $ docker start 容器ID
  或者
  $ docker run -it -d jdk8:v2.0 /bin/sh

2.6 进入容器

  $ docker exec -it 容器ID /bin/sh 

2.7 测试jdk

  $ java -version

注1:openjdk:8-jdk-alpine这个镜像就和我们自己创建的镜像是一样,只不过JDK瘦身过了,体积更小。

    另外,openjdk和jdk也是有一定区别的,大家可以看下资料“14 OpenJDK与JDK的区别分析 - 简书.mht”了解一下

注2:Alpine制作JDK8镜像是有时区问题的,可以使用时区查看命令看一下

    date

3 将Docker镜像上传至阿里云(或从阿云下载镜像)

3.1 前期准备

 3.1.1 注册阿里云账户
 阿里云官方网站链接:https://dev.aliyun.com

 3.1.2 登陆账户
 3.1.3 配置Docker加速器
 3.1.4 创建镜像仓库的命名空间
 例如:xyzxyz

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

 重要的事情说三遍:请将URL改成自己的阿里云的地址~~~请将URL改成自己的阿里云的地址~~~请将URL改成自己的阿里云的地址~~~
 重要的事情说三遍:请将URL改成自己的阿里云的地址~~~请将URL改成自己的阿里云的地址~~~请将URL改成自己的阿里云的地址~~~
 重要的事情说三遍:请将URL改成自己的阿里云的地址~~~请将URL改成自己的阿里云的地址~~~请将URL改成自己的阿里云的地址~~~

3.2 push(推)镜像,将镜像推送到Registry

 3.2.1 登录到阿里云的doker仓库,--username为阿里云的用户名,另外,密码为开通镜像服务时设置的密码,
 注:忘记密码可以点击菜单:“容器镜像服务”->“默认实例”-->“访问凭证”进行修改

 $ docker login --username=yanppp2018 registry.cn-hangzhou.aliyuncs.com

 3.2.2 为本地镜像添加tag

 $ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/xyzxyz/image-test:[镜像版本号]

 3.2.3 推送镜像(jdk8-alpine:1.0)

 $ docker push registry.cn-hangzhou.aliyuncs.com/xyzxyz/image-test:[镜像版本号]

3.3 pull(拉)镜像

 3.3.1 登录到阿里云的doker仓库

 $ sudo docker login --username=yanppp2018 registry.cn-hangzhou.aliyuncs.com

 3.3.2 从Registry中拉取镜像

 $ sudo docker pull registry.cn-hangzhou.aliyuncs.com/xyzxyz/image-test:[镜像版本号]

注1:仓库(Repository )是集中存放镜像的地方,又分公共仓库和私有仓库

    有时候容易把仓库与注册服务器( Regis盯)混淆 实际上注册服务器是存放仓库的具
    体服务器,每个注册服务器上可以有多个仓库,而每个仓库下面可以有多个镜像 
  1. Docker commit 命令
    1.下载基础镜像
    2.使用此基础镜像创建/启动/进入容器
    3.在容器安装自己需要的软件
    4.将保存配置完成的容器提交成镜像

    语法如下
    docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    OPTIONS说明:
    -a :提交的镜像作者;
    -c :使用Dockerfile指令来创建镜像;
    -m :提交时的说明文字;
    -p :在commit时,将容器暂停。
    实例:将容器a404c6c174a2 保存为新的镜像,并添加提交人信息和说明信息

    $ docker commit -a "runoob.com" -m "my apache" a404c6c174a2 mymysql:v1

相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。 &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
2天前
|
NoSQL 关系型数据库 MySQL
Linux安装jdk、mysql、redis
Linux安装jdk、mysql、redis
52 7
|
2月前
|
Linux
linux开机挂载镜像
【10月更文挑战第1天】在 Linux 系统中,开机挂载镜像通常涉及几个关键步骤,包括创建挂载点、编辑配置文件以及重新加载配置
101 0
|
3月前
|
Oracle Java 关系型数据库
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
如果遇到"exec format error"问题,文章建议先检查Linux操作系统是32位还是64位,并确保安装了与系统匹配的JDK版本。如果系统是64位的,但出现了错误,可能是因为下载了错误的JDK版本。文章提供了一个链接,指向Oracle官网上的JDK 17 Linux版本下载页面,并附有截图说明。
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
|
2月前
|
资源调度 JavaScript 前端开发
yarn源|yarn 国内镜像+linux删除大量文件
yarn源|yarn 国内镜像yarn源|yarn 国内镜像+linux删除大量文件
632 0
|
4月前
|
Linux
在Linux中,什么是initrd镜像?
在Linux中,什么是initrd镜像?
|
4月前
|
关系型数据库 Java MySQL
Linux安装JDK1.8 & tomcat & MariaDB(MySQL删减版)
本教程提供了在Linux环境下安装JDK1.8、Tomcat和MariaDB的详细步骤。这三个组件的组合为Java Web开发和部署提供了一个强大的基础。通过遵循这些简单的指导步骤,您可以轻松建立起一个稳定、高效的开发和部署环境。希望这个指导对您的开发工作有所帮助。
247 8
|
4月前
|
消息中间件 Java 中间件
在Linux中,什么是中间件?什么是jdk?
在Linux中,什么是中间件?什么是jdk?
|
4月前
|
存储 安全 Linux
在Linux中,如何进行系统镜像管理?
在Linux中,如何进行系统镜像管理?
|
4月前
|
JavaScript Linux
【Azure App Service for Linux】NodeJS镜像应用启动失败,遇见 RangeError: Incorrect locale information provided
【Azure App Service for Linux】NodeJS镜像应用启动失败,遇见 RangeError: Incorrect locale information provided
|
4月前
|
开发框架 .NET Linux
【Azure 应用服务】 部署到App Service for Linux 服务的Docker 镜像,如何配置监听端口呢?
【Azure 应用服务】 部署到App Service for Linux 服务的Docker 镜像,如何配置监听端口呢?