自学内容网 自学内容网

docker之自定义镜像上传至阿里云

1.Alpine介绍

Alpine Linux 是一个轻量级的 Linux 发行版,它很适合用作 Docker 容器的基础镜像。Alpine Linux 的特点是非常小,镜像大小通常只有几十 MB,同时它采用 musl libcBusyBox,这使得它的运行效率更高,且提供了足够的 Linux 工具来完成常见的任务。Alpine Linux 还提供了自己的包管理器 apk,方便用户在容器中安装软件包和库。在使用 Alpine Linux 作为基础镜像时,可以更加简洁和高效地构建需要的应用程序容器。

2.基于alpine制作JDK8镜像

2.1.下载镜像

通过docker pull命令拉取最新版本的alpine镜像文件。

docker pull alpine:latest

2.2.编写Dockerfile

将本地课件中的glibc2.29目录下的所有文件上传至与Dockerfile文件

创建并编辑Dockerfile文件。

# 创建Dockerfile文件
touch Dockerfile
# 编辑Dockerfile文件
vi Dockerfile

重要:将本地课件中的glibc2.29目录下的所有文件上传至与Dockerfile文件一个目录下。

Dockerfile文件内容具体如下:

#1.指定基础镜像,并且必须是第一条指令
FROM alpine:latest
#FROM alpine:3.10
​
#2.指明该镜像的作者和其电子邮件
MAINTAINER zs "zking@qq.com"
​
#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /usr/local/java
​
#4.将一些安装包复制到镜像中,语法:ADD/COPY <src>... <dest>
## ADD与COPY的区别:ADD复制并解压,COPY仅复制
ADD jdk-8u221-linux-x64.tar.gz /usr/local/java/
## glibc安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中
COPY glibc-2.29-r0.apk /usr/local/java/
COPY glibc-bin-2.29-r0.apk /usr/local/java/
COPY glibc-i18n-2.29-r0.apk /usr/local/java/
​
#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=/usr/local/java/jdk1.8.0_221
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH

注意,这里用的是jdk-8u221-linux-x64.tar.gz版本的jdk安装包,如果是其他版本的请注意修改上述配置中的名称。

2.3.创建并启动容器

通过Dockerfile文件创建自定义镜像:

docker build -t jdk8:v2.0 .

基于最新jdk8:v2.0版本的镜像构建容器:

docker run -itd --name tomcat02 jdk8:v2.0

2.4.进入容器并测试

进入容器:

docker exec -it 容器ID /bin/sh 

注意:最后是sh而非bash

测试java的环境配置是否配置成功:

java -version

最后制作完成后的镜像大小为400M左右。

3.最小JRE基础镜像

3.1.下载JRE镜像

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

3.2.JRE瘦身

通过rz命令将本地jre-8u221-linux-x64.tar.gz上传至CentOS7虚拟机中。

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

解压文件:

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

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

du -sh jre1.8.0_221

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

# 1) 进入目录
cd jre1.8.0_221
# 2) 执行瘦身命令
# 删除文本文件
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瘦身后的大小(约111M):

du -sh jre1.8.0_221

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

# 返回上级目录
cd ..
# 重新打包jre
tar zcvf jre1.8.0_221.tar.gz jre1.8.0_221

至此,JRE的压缩包已完成了瘦身任务。

3.3.再次编辑Dockerfile

再次编辑Dockerfile,将文件内容中的jdk配置更换成jre配置:

#1.指定基础镜像,并且必须是第一条指令
FROM alpine:3.10
​
#2.指明该镜像的作者和其电子邮件
MAINTAINER xyz "xyz@qq.com"
​
#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /usr/local/java
​
#4.将一些安装包复制到镜像中,语法:ADD/COPY <src>... <dest>
## ADD与COPY的区别:ADD复制并解压,COPY仅复制
## 注意~~~上传的瘦身后的jre
ADD jre1.8.0_221.tar.gz /usr/local/java/
## glibc安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中
COPY glibc-2.29-r0.apk /usr/local/java/
COPY glibc-bin-2.29-r0.apk /usr/local/java/
COPY glibc-i18n-2.29-r0.apk /usr/local/java/
​
#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=/usr/local/java/jre1.8.0_221
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH

3.4.创建并启动容器

通过Dockerfile文件创建自定义镜像:

docker build -t jdk8:v3.0 .

基于最新jdk8:v2.0版本的镜像构建容器:

docker run -itd --name tomcat03 jdk8:v3.0

此处打包之后是v3.0版本的镜像文件。

3.5.进入容器并测试

进入容器:

docker exec -it 容器ID /bin/sh 

注意:最后是sh而非bash

测试java的环境配置是否配置成功:

java -version

最后制作完成后的最小JRE镜像大小为180M左右。

4.将Docker镜像上传至阿里云

登录到阿里云,阿里云官方网站链接:开放云原生应用-云原生(Cloud Native)-云原生介绍 - 阿里云

4.1.配置代码源

点击个人实例,打开仓库管理,选择代码源。

具体操作自行摸索,简单

4.2.创建命名空间

打开仓库管理,选择命名空间。

4.3.创建镜像仓库

打开仓库管理,选择镜像仓库。首页输入仓库相关信息,然后绑定代码源。

4.4.推送镜像

登录阿里云Docker Registry

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

注意:这里的--username请更换成自己阿里云的账号。

本地镜像打标签,请根据实际镜像信息替换示例中的[ImageId][镜像版本号]参数。:

docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/t272/zking272:[镜像版本号]

注意:这里的[ImageId]为本地镜像的镜像ID,而[镜像版本号]为即将打标签的版本号,用于推送至阿里云仓库进行识别标记。

将镜像推送到Registry

docker push registry.cn-hangzhou.aliyuncs.com/t272/zking272:[镜像版本号]

4.5.拉取镜像

登录阿里云Docker Registry:(如果已经登录过了,此步骤可以省略

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

注意:这里的--username请更换成自己阿里云的账号。

Registry中拉取镜像:

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

剩下的操作就是基于新拉取的镜像进行创建容器等相关测试。

4.6.Docker commit 命令

  • 下载基础镜像

  • 使用此基础镜像创建/启动/进入容器

  • 在容器安装自己需要的软件

  • 将保存配置完成的容器提交成镜像

语法如下:

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

参数说明:

参数说明
-a提交的镜像作者
-c使用Dockerfile指令来创建镜像
-m提交时的说明文字
-p在commit时,将容器暂停

实例:将容器a404c6c174a2 保存为新的镜像,并添加提交人信息和说明信息

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


原文地址:https://blog.csdn.net/m0_67771087/article/details/142411463

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!