【Docker】镜像的构建与上传下载阿里云

news2025/1/31 3:09:58

🎉🎉欢迎来到我的CSDN主页!🎉🎉

🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚

🌟推荐给大家我的专栏《Docker实战》。🎯🎯

👉点击这里,就可以查看我的主页啦!👇👇

Java方文山的个人主页

🎁如果感觉还不错的话请给我点赞吧!🎁🎁

💖期待你的加入,一起学习,一起进步!💖💖

请添加图片描述

目录

✨前言

一、构建镜像

1.基本结构

2.构建镜像

2.1.初步了解

2.2.镜像运行jdk

二、镜像的优化

三、镜像上传与下载

3.1.上传镜像

①登录阿里云进入控制台搜索容器镜像服务ACR

②实例列表选择自己需要的实例

③设置Registry密码

④设置访问凭证固定密码

⑤在虚拟机中登录Docker

⑥创建命名空间

⑦创建镜像仓库

​编辑⑧推送镜像到阿里云

3.2.下载镜像


 

✨前言

镜像往往都是我们用的别人已经构建好的,但是他们相互之间又没有关联,如果我想要一个镜像就把一系列的事情完成了,那显然是不可能的,所以我们要根据我们自己的需求构建一个属于我们自己的镜像,而且我们可以在任何地方使用它而无需担心配置问题或者依赖项缺失的问题。此外,镜像还可以被用来进行容器化部署,这种方式可以更加高效地利用计算资源,提高应用程序部署和运行的效率。

一、构建镜像

我们构建镜像也是需要一个基础镜像的,作为我们的“地基”,但是这个镜像没有要求限制随便你搞一个都可以,我这里提供两个镜像给大家选择。

  • centos
  • alpine

centos和alpine的区别:

1. 空间大小差异,alpine默认5M左右,centos等都在200M左右。

2. 默认软件包差异,alpine选用busybox,centos等则是bash+coreutils几件套。

3. alpine中,国际化组件被优化掉了。

4. 还有一点,alpine中选用的都是“最简依赖”,这点和archlinux比较像,举个例子, openssh包不会自带pam插件,于是他也就不支持ldap。这点我给alpinelinux官方提过 issue。和php不一样,php可以做成php-pdo,php-dom的包,然后动态加载共享库。 openssh不行,“没带就是没写”。

5. glibc差异,alpine选用musl,centos等选用glibc,其他的倒还好,libc的差异对开发很重 要。

1.基本结构

Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行。 一般的,Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。

部分命令
基础镜像信息FROM
维护者信息MAINTAINER
镜像操作指令
RUN ENV COPY ADD EXPOSE WORKDIR ONBUILD USER
VOLUME
容器启动时执行指令
CMD ENTRYPOINT
我这里还有一个比较具象化的图片方便大家理解

2.构建镜像

2.1.初步了解

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

①上传jdk

②同级目录下创建Dockerfile文件并编辑

FROM centos
MAINTAINER 1409726556@qq.com
WORKDIR /test
COPY spring.jar /test
  • FROM centos:指定基础镜像为 CentOS,即以 CentOS 作为镜像的基础环境。
  • MAINTAINER 1409726556@qq.com:指定维护者的信息,这里是邮箱地址。
  • WORKDIR /test:设置工作目录为 /test,即在容器内部创建并切换到 /test 目录。
  • COPY spring.jar /test:将主机上的 spring.jar 文件复制到容器内的 /test 目录。
编写完成 Dockerfile 之后,可以通过 docker build 命令来创建镜像。
docker build -t spring:v1.0 .
1 -t spring:v1.0 给新构建的镜像取名为spring, 并设定版本为 v1.0
2 :注意最后有个点,代表使用当前路径的 Dockerfile 进行构建

我们可以查看一下看有没有这个镜像

我们再来根据这个镜像构建一个容器看看

完全是可以构建的并且初始目录就是我们所设置的/test

2.2.镜像运行jdk

首先我们要明白jdkjre的区别是什么?jdk可以粗略的理解为编译器调试器,而我们的jre是真正运行我们java文件的,如果我们只需要运行环境就只需要jre即可。

①首先将jre的压缩包放入宿主机的目录下

由于我们需要在Dockerfile文件下进行编辑配置JAVA的环境变量,但是我们不知道该压缩文件解压后叫什么名字,所以我们可以提前在外面解压一遍看看

②编辑Dockerfile文件

FROM centos
MAINTAINER 1409726556@qq.com
WORKDIR /test
COPY spring.jar /test
ADD jre-8u391-linux-x64.tar.gz /test
ENV JAVA_HOME=/test/jre1.8.0_391
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
  • ADD :将我们压缩包复制到该容器目录下并解压
  • ENV:键值对的形式配置我们JAVA的环境变量和我们Windows中的一样

 ③将镜像进行构建

docker build -t spring:v2.0 .

 我们先查看一下我们的jre和jar包有没有在容器中

 ④运行jar包

java -jar spring.jar

但是这里还有一个小问题,我们是需要进到容器里面进行jar包的运行的,我想要构建容器的时候就自动运行怎么办呢?我们可以在Dockerfile文件配置中追加一个CMD命令

  •  CMD:容器启动时需要执行的命令

如果CMD需要运行容器执行多条命令应该怎么描述?

1.使用分号 ; 将多个命令放在一行:

CMD command1 ; command2 ; command3

2.使用换行符 \ 将多个命令分行编写:

CMD command1 \
    command2 \
    command3

直接构建运行一下试试

docker build -t spring:v2.0 .

docker run -it spring:v3.0

 可以看到我刚刚构建镜像直接创建容器就会执行jar,说明我们的指令成功了

二、镜像的优化

 在上面的内容中我们学习了如何构建一个镜像以及镜像运行jar包,现在我们看一下我们的镜像

 可以看到除了我们的普通镜像是250MB另外两个带有jre的都是526MB,这个容量说大不大说小不小,但是我们还有可以优化的空间,刚刚我们不是提到两个基础镜像centosalpine吗?alpine只有5MB现在我们换成它试一下

FROM jeanblanchard/alpine-glibc
MAINTAINER 1409726556@qq.com
WORKDIR /test
COPY spring.jar /test
ADD jre-8u391-linux-x64.tar.gz /test
ENV JAVA_HOME=/test/jre1.8.0_391
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
CMD java -jar spring.jar

然后我们构建和运行一下看下是否正常?

完全没有问题,现在来看一下镜像的容量是多少?

可以看到使用alpine的基础镜像容量明显少了218MB,在项目中一个模块可能要部署五六个容器甚至更多,一个项目那么多模块,这么算下来相当于减少了大量的空间浪费。

最后我们试一下这个jar跑起来在外面能不能访问?

成功访问没有问题

 

三、镜像上传与下载

我们将镜像做好了也只是在本机,如果我们的电脑不在身边或者别人需要使用我们做好的镜像应该怎么办?我们可以将镜像上传到Docker,但是Docker服务在国外还是比较慢的,我们就可以上传到阿里云镜像仓库。

3.1.上传镜像

①登录阿里云进入控制台搜索容器镜像服务ACR

②实例列表选择自己需要的实例

③设置Registry密码

 ④设置访问凭证固定密码

阿里云的 Docker 设置访问凭证固定密码和 Registry 密码是不同的,并且它们也不是同一个密码。

  1. Docker 设置访问凭证固定密码:此功能是指在创建阿里云容器实例时,为了保护 Docker 服务而设置的密码。该密码将用于访问 Docker 服务,用于验证身份并进行相关操作。这个密码是您自己设置的,用于对 Docker 服务进行身份验证,提供访问权限。

  2. Registry 密码:阿里云容器镜像服务(Registry)是用于存储和管理 Docker 镜像的云服务。当您使用阿里云容器镜像服务时,会创建一个 Registry,其中包含您上传的镜像。为了保护镜像的安全,阿里云容器镜像服务需要设置一个密码来对 Registry 进行访问控制。这个密码是阿里云为您自动生成的,用于对 Registry 进行身份验证。

所以,Docker 设置访问凭证固定密码和 Registry 密码是不同的密码。一个用于访问 Docker 服务,另一个用于访问和管理阿里云容器镜像服务中的镜像。

 ⑤在虚拟机中登录Docker

将官方提供给你的命令复制进行修改后进行登录

 ⑥创建命名空间

⑦创建镜像仓库

⑧推送镜像到阿里云

阿里云这边也是会有实例代码告诉你的,直接复制将自定信息修改成自己的即可

首先为我们需要上传的镜像取个别名 

 将目标推送的镜像仓库换成阿里云的镜像仓库

 推送镜像

推送成功我们就可以上阿里云镜像仓库看看了

 

3.2.下载镜像

我们先将该镜像删除在进行下载,也是没有任何问题的

docker rmi registry.cn-hangzhou.aliyuncs.com/java-ar/java-jar:v1.0

 

请添加图片描述

到这里我的分享就结束了,欢迎到评论区探讨交流!!

💖如果觉得有用的话还请点个赞吧 💖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1383361.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STEGNN

STEGNN 摘要 随着智能交通系统(ITS)逐渐融入我们的日常生活,人们普遍认为路网预测是智能交通系统的杀手锏,具有很高的社会和经济效益。然而,目前的解决方案忽视了时空交通数据的异质性,无法捕捉隐藏的时空相关性。本文介绍了 STEGNN:一种用于路网预测的新型时空嵌入图神…

linux主机的免密登录

实现linux主机之间的相互免密登录 在进行远程登录的时,服务器和主机间进行认证阶段分为: 基于口令认证(不安全,易被抓包拦截获取) 客户机连接服务器时,服务器将自己的公钥返回给客户机 客户机会将服务器的…

vue知识-04

计算属性computed 注意: 1、计算属性是基于它们的依赖进行缓存的 2、计算属性只有在它的相关依赖发生改变时才会重新求值 3、计算属性就像Python中的property,可以把方法/函数伪装成属性 4、computed: { ... } 5、计算属性必须要有…

视频号小店发展前景怎样?适合新手入驻吗?

我是电商珠珠 视频号于22年7月发展了属于自己的平台-视频号小店。作为一个发展了才一年的平台来说,很多人都不敢入驻,害怕它很快就会垮掉。 我们团队在22年10月的时候,开始入驻其中。发现它的玩法和抖音小店相比并没有什么两样。 在刚开始…

深度学习工具-如何选择服务器和GPU

深度学习训练通常需要大量的计算。目前,GPU是深度学习最具成本效益的硬件加速器。与CPU相比,GPU更便宜,性能更高,通常超过一个数量级。此外,一台服务器可以支持多个GPU,高端服务器最多支持8个GPU。更典型的…

【GitHub项目推荐--6 个 Github 项目学习 Spring Boot】【转载】

一切都在证明,Spring Boot 已经成为了 Java 程序员必备的技能。并且可以预见的是未来 Spring Boot 的发展还会更好。学习一门技术最好的方式就是理论 实践,学习网理论基础,直接上 Demo 。跑通 Demo ,在探究原理。如果用的非常熟练…

06-微服务OpenFeigh和Sentinel持久化

一、OpenFeign基础应用 1.1 概念 OpenFeign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用OpenFeign,可以做到使用HTTP请求访问远程服务,就像调用本地方法一样的,开发者完全感知不到这是在调用远程方法,更感知不到在访…

第 2 章 数据结构和算法概述

文章目录 2.1 数据结构和算法的关系2.2 看几个实际编程中遇到的问题2.2.1 问题一-字符串替换问题2.2.2 一个五子棋程序2.2.3 约瑟夫(Josephu)问题(丢手帕问题)2.2.4 其它常见算法问题: 2.3 线性结构和非线性结构2.3.1 线性结构2.3.2 非线性结构 2.1 数据结构和算法的关系 数据 …

利用gulp工具对常规web项目进行压缩打包

前言 对于一个常规的web项目,如下项目目录 |- imgs | - img1.png | - img2.png |- js | - user.js | - utils.js |- css | - index.css | - user.css |- html | - user.html |- index.html可以使用各种构建工具(如webpack、gulp、grunt等)来…

Java 解析邮箱中的邮件信息保存入库

我们在工作中常常遇到这样的场景: 获取一些其他平台的业务数据,是通过邮件的方式来进行获取的,其他平台通过发送邮件以Excel附件的形式,传输到公司邮箱服务器;我们接收数据是读取服务器中的相关邮件并进行解析&#xf…

基于SSM的校园心理健康网站的设计与实现(有报告)。Javaee项目。ssm项目。

演示视频: 基于SSM的校园心理健康网站的设计与实现(有报告)。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,…

扫雷游戏棋盘的打印,判断输赢,深度分析

少年们,大家好,我是博主那一脸阳光,我来分享扫雷的打印和判断输赢,代码如何编写,如何使用,深度理解扫雷的游戏。 数据结构的分析和理论 我上次介绍棋盘的初始化,但是如果不打印出来&#xff0…

二进制与十六进制,二进制与八进制之间的相互转换技巧

目录 1.二进制转换为八进制 2.八进制转换为二进制 3.二进制转换为十六进制 4.十六进制转换为二进制 1.二进制转换为八进制 转换为8进制 第一步:以小数点为分界线,整数部分自右向左,小数部分自左向右每3位取成1位: 整数部分…

P1563 [NOIP2016 提高组] 玩具谜题————C++

目录 [NOIP2016 提高组] 玩具谜题题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示 解题思路Code运行结果 [NOIP2016 提高组] 玩具谜题 题目背景 NOIP2016 提高组 D1T1 题目描述 小南有一套可爱的玩具小人,它…

GUI编程(函数解析以及使用)

1.介绍 AWT(Abstract Window Toolkit)和Swing 是 Java 提供的用于创建图形用户界面(GUI)的类库。 AWT:AWT 是 Java 最早提供的 GUI 类库,它基于本地平台的窗口系统,使用操作系统的原生组件进行…

git 中分支的概念及使用

git 中分支的概念及使用 分支模型是 Git 中的 “必杀技特性”, Git 处理分支的方式非常轻量,创建新分支这一操作几乎能在瞬间完成,并且在不同分支之间的切换操作也是一样便捷。 理解和精通这一特性,我们便会意识到 Git 是如此的强…

使用mamba替换conda和anaconda配置环境安装软件

使用mamba替换miniconda和anaconda,原因是速度更快,无论是创建新环境还是激活环境 conda、mamba、anaconda都是蟒蛇的意思… 下载mambaforge wget https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-Linux-x86_64.sh ba…

浅谈项目周报的核心要点

相信很多朋友都写过周报,无论什么岗位,而其中项目周报对于项目管理人员极其重要,项目周报是一种重要的沟通工具,用于向相关人员汇报项目的进展情况、存在的问题和下一周的工作计划。以下是一些关于如何编写项目周报的核心要点&…

SpringBoot 入门 SpringBoot 与其他项目整合 集成 Druid 数据库连接池 集成 Log 日志 配置修改

目录 1.SpringBoot简介 1.1.什么是SpringBoot 1.2.特点 2.SpringBoot快速入门 2.1.创建SpringBoot项目 2.2.项目目录介绍 2.3.配置修改 2.4.启动SpringBoot 3.SpringBoot与其他项目整合 3.1.整合JDBC 3.2.整合Druid数据库连接池 3.3.整合MyBatis 3.4.整合Log日志 …

【Kafka-3.x-教程】-【六】Kafka 外部系统集成 【Flume、Flink、SpringBoot、Spark】

【Kafka-3.x-教程】专栏: 【Kafka-3.x-教程】-【一】Kafka 概述、Kafka 快速入门 【Kafka-3.x-教程】-【二】Kafka-生产者-Producer 【Kafka-3.x-教程】-【三】Kafka-Broker、Kafka-Kraft 【Kafka-3.x-教程】-【四】Kafka-消费者-Consumer 【Kafka-3.x-教程】-【五…