使用DockerFile构建镜像与镜像上传

目录

前言:为什么要使用Dockerfile ?

DockerFile构建镜像

1、构建基础对象

2、Dockerfile文件结构

3、构建Dockerfile文件镜像

二、镜像上传(阿里云)


前言:为什么要使用Dockerfile ?

        首先Dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像。在没使用Dockerfile之前构建镜像是这样的:一步一步操作

不使用Dockerfile的劣势:

  • 手动操作容易出错,难以保证一致性。
  • 构建过程不透明,不易维护和管理。
  • 需要手动执行多个步骤,容易遗漏或出现问题。

使用Dockerfile的好处:

  • 自动化构建,确保环境的一致性和可重复性。
  • 可以使用版本控制系统管理Dockerfile,跟踪构建过程的演化。
  • 通过简单的命令就能完成构建和运行。

DockerFile构建镜像

1、构建基础对象

        已知构建基础镜像的目的是为了在容器中提供一个运行环境,以便在其基础上构建和运行应用程序。而CentOSAlpine都是常见的基础操作系统镜像,用于构建Docker容器。它们有一些区别和各自的优点,主要涉及到镜像大小、软件包管理系统和适用场景等方面。

CentOS镜像:

  1. 镜像大小: CentOS镜像通常比Alpine镜像大,因为它包含了更多的系统库和工具。

  2. 软件包管理: CentOS使用yum(Yellowdog Updater, Modified)作为其软件包管理系统。它有广泛的软件仓库,可以方便地安装各种软件包。

  3. 系统库: CentOS提供了完整的系统库和工具,适合那些需要更多系统级功能和工具的场景。

  4. 适用场景: 适用于需要在容器中运行更庞大、复杂的应用程序,或者依赖于CentOS特定库的场景。例如,一些企业级应用可能更适合在CentOS环境中运行。

Alpine镜像:

  1. 镜像大小: Alpine镜像非常小巧,通常比CentOS小得多。这是因为Alpine使用了musl libc和BusyBox,精简了系统组件。

  2. 软件包管理: Alpine使用apk作为其软件包管理系统。虽然软件包数量相对较少,但它足够轻量且足够满足大多数基本需求。

  3. 系统库: Alpine精简了系统库,只包含最小必需的库,这有助于减小镜像大小。

  4. 适用场景: 适用于对镜像大小要求较高,或者在轻量级、敏捷的场景中运行应用程序。Alpine常被用作构建微服务、容器化应用和云原生应用的基础镜像。

总结各自优点:

  • CentOS:

    • 适合需要完整系统库和工具的应用场景。
    • 更广泛的软件包支持。
    • 适用于相对较大和复杂的应用程序。
  • Alpine:

    • 非常小巧的镜像大小。
    • 适用于对镜像大小要求较高的场景。
    • 适用于轻量级、敏捷的应用场景,如微服务和云原生应用。

        选择CentOS还是Alpine通常取决于具体的应用需求和容器使用场景。如果镜像大小是关键因素,而且应用可以在Alpine的轻量环境中运行,那么Alpine可能是更好的选择。如果应用需要更完整的系统环境和软件包支持,那么CentOS可能更合适。

2、Dockerfile文件结构

Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行

一般Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。

部分命令
基础镜像信息FROM
维护者信息MAINTAINER
镜像操作指令RUN、ENV、COPY、ADD、EXPOSE、WORKDIR、ONBUILD、USER、 VOLUME等
容器启动时执行指 令CMD、ENTRYPOINT

  1. 基础镜像信息:

            定义了构建过程中使用的基础镜像。基础镜像是构建新镜像的起点,包含了操作系统和基本的运行时环境。FROM指令是Dockerfile的第一条指令,必须出现在Dockerfile的最开始。
  2. 维护者信息:

            用于指定Docker镜像的维护者信息,即负责维护该镜像的人或团队。这个信息可以提供一些联系方式或者简要的说明。
  3. 镜像操作指令:

             这些指令用于在构建过程中对镜像进行操作。其中,ENV用于设置环境变量,COPY用于复制文件或目录到镜像中,ADD与COP作用差不多,它还会压缩包文件进行解压,WORKDIR设置工作目录,RUN用于在构建过程中执行命令,EXPOSE用于声明容器运行时需要暴露的端口,USER用于设置在容器中运行时使用的用户名或用户ID,ONBUILD用于在构建子镜像时执行一些命令,VOLUME用于声明容器中的挂载点,可以将宿主机上的目录或文件挂载到容器中,用于持久化存储数据。这样可以保证在容器删除后数据不会丢失。
  4. 容器启动时执行指令:

            定义了容器启动时执行的默认命令。该命令可以被用户指定的命令覆盖。CMD指令通常是最后一条指令,如果有多个CMD指令,只有最后一条会生效。

ENTRYPOINTCMD不同,ENTRYPOINT指定的命令不会被docker run命令行中的参数覆盖,而是作为容器的主要执行命令。 

        以上这些指令一起构成了Dockerfile,定义了构建镜像的过程和镜像的运行时行为。通过这些指令,可以灵活地配置和定制Docker镜像,以适应不同的应用场景。

3、构建Dockerfile文件镜像

准备需要上传的文件:

 1、构建Dockerfile:

#1.指定基础镜像,并且必须是第一条指令
FROM jeanblanchard/alpine-glibc 
#2.指明该镜像的作者和其电子邮件
MAINTAINER  "3315757094@qq.com"
#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /test
#4.复制需要运行的应用程序
COPY spring.jar /test
#5.一个复制命令,把jdk安装文件复制到镜像中,注意:jdk*.tar.gz使用的是相对路径
ADD jre-8u391-linux-x64.tar.gz /test
#6.配置环境变量
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
#7.容器启动时需要执行的命令
CMD  java -jar spring.jar 

2、配置好Dockerfiel文件后开始构建镜像 :

3、运行镜像:

测试:

二、镜像上传(阿里云)

上传镜像就是为了方便各位同事更好的搬砖,步骤如下:

1、注册/登录阿里云搜索容器镜像服务 

2、点击实例模块创建仓库

 ...

 ...

3、创建好后就会有操作指南(复制操作就行)

当然要上传镜像需要获取访问凭证进行登录:

 示例:

1. 登录

2.给本地的Docker镜像打标签,使其与阿里云容器镜像服务相关联

根据tag(版本)推送:

拉取:

docker pull registry.cn-hangzhou.aliyuncs.com/ycxw320/spring_test:v1 [镜像版本号]

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Element组件完整引入、按需引入、样式修改(全局、局部)、简单安装less以及npm命令证书过期等

目录 一、npm 安装二、完整引入三、按需引入四、样式修改1.按需加载的全局样式修改2. 局部样式修改1. 在 css 预处理器如 less scss 等直接使用::v-deep2. 只能用在原生 CSS 语法中:/deep/ 或者 >>> 五、 拓展:npm 安装less报错,提示证书过期六…

Java Web(二)--HTML

基本介绍 官网文档地址: HTML 教程 HTML(HyperText Mark-up Language)即超文本标签语言;HTML 文本是由 HTML 标签组成的文本,可以包括文字、图形、动画、声音、表格、链接等;HTML 的结构包括头部(Head&…

CWE、CVE

文章目录 前言一、CVE是什么?二、官网浏览主页词汇 三、CWE 前言 一、CVE是什么? 关于CVE是什么,前辈已经阐述得很详细通透,这里不再赘述或生产一些垃圾信息,CVE公共漏洞和暴露的学习 总结: 标识某个漏洞…

不就业,纯兴趣,应该自学C#还是JAVA?

不就业,纯兴趣,应该自学C#还是JAVA? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「JAVA的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家&#xff…

测试老司机聊聊测试设计都包含什么?

一、数据组合测试设计 数据组合测试设计(Combinatorial Test Design,CTD)是一种优化测试用例的方法,它通过系统地组合不同的测试数据输入,以确保全面覆盖各种可能的测试情况。这种方法主要应用于软件测试领域&#xff…

Aria2 WebUI控制台 任意文件读取漏洞复现(CVE-2023-39141)

0x01 产品简介 Aria2 WebUI控制台是用于下载文件的实用程序。它支持 HTTP(S)/FTP/SFTP/BitTorrent 和 Metalink 协议。aria2可以从多个来源/协议下载文件,并尝试利用您的最大下载带宽。它支持同时从HTTP(S)/FTP/SFTP和BitTorrent下载文件,而从HTTP(S)/FTP/SFTP下载的数据上…

【算法】选择最佳路线(超级源点)

题目 有一天,琪琪想乘坐公交车去拜访她的一位朋友。 由于琪琪非常容易晕车,所以她想尽快到达朋友家。 现在给定你一张城市交通路线图,上面包含城市的公交站台以及公交线路的具体分布。 已知城市中共包含 n 个车站(编号1~n&…

银行数据仓库体系实践(4)--数据抽取和加载

1、ETL和ELT ETL是Extract、Transfrom、Load即抽取、转换、加载三个英文单词首字母的集合: E:抽取,从源系统(Souce)获取数据; T:转换,将源系统获取的数据进行处理加工,比如数据格式转化、数据精…

原来岳云鹏背后的女人竟然是她?有她,岳云鹏红遍大江南北。

♥ 为方便您进行讨论和分享,同时也为能带给您不一样的参与感。请您在阅读本文之前,点击一下“关注”,非常感谢您的支持! 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 岳云鹏,一个出身于农村的普通孩子,曾经…

如何在容器内部进行抓包

//先获取POD 的容器ID号 //去pod容器所在节点进行解析id为pid号 //通过pid号进入这个容器的网络命名空间 docker inspect --format {{.State.Pid}} 05f38d2a61e29b5a9d24fc7a3906991ab92ecd58ff7e0eb4e339a4cc6b2c4fc4 //访问容器内部,Node01节点

第10次修改了可删除可持久保存的前端html备忘录

第10次修改了可删除可持久保存的前端html备忘录 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>…

JAVA的面试题四

1.电商行业特点 &#xff08;1&#xff09;分布式&#xff1a; ①垂直拆分:根据功能模块进行拆分 ②水平拆分:根据业务层级进行拆分 &#xff08;2&#xff09;高并发&#xff1a; 用户单位时间内访问服务器数量,是电商行业中面临的主要问题 &#xff08;3&#xff09;集群&…

备战2个月,面试被问麻了....

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

中小学班主任工作规定

作为一名长期扎根在中小学教育一线的教师&#xff0c;您是否曾经思考过&#xff1a;作为班主任&#xff0c;我们的工作有哪些明确的规定和要求&#xff1f; 众所周知&#xff0c;班主任工作是中小学教育的重要组成部分。那么&#xff0c;具体来说&#xff0c;班主任的工作有哪…

匈牙利算法 原理 python实现

例子 用男女配对问题来解释&#xff0c;背景是&#xff1a;你是一个红娘&#xff0c;需要对图中的男女进行配对&#xff0c;其中男女之间有线就表示他们之间有暧昧&#xff0c;可以牵红线。 算法流程 B1&#xff0c;他与G2有暧昧&#xff0c;那我们就先暂时把他与G2连接&#…

《WebKit 技术内幕》学习之五(2): HTML解释器和DOM 模型

2.HTML 解释器 2.1 解释过程 HTML 解释器的工作就是将网络或者本地磁盘获取的 HTML 网页和资源从字节流解释成 DOM 树结构。 这一过程中&#xff0c;WebKit 内部对网页内容在各个阶段的结构表示。 WebKit 中这一过程如下&#xff1a;首先是字节流&#xff0c;经过解码之…

大数据学习之Flink,Flink的安装部署

Flink部署 一、了解它的关键组件 客户端&#xff08;Client&#xff09; 作业管理器&#xff08;JobManager&#xff09; 任务管理器&#xff08;TaskManager&#xff09; 我们的代码&#xff0c;实际上是由客户端获取并做转换&#xff0c;之后提交给 JobManger 的。所以 …

计算机网络 第2章(物理层)

系列文章目录 计算机网络 第1章&#xff08;概述&#xff09; 计算机网络 第2章&#xff08;物理层&#xff09; 文章目录 系列文章目录1. 物理层的基本概念2. 物理层下面的传输媒体2.1 导引型传输媒体2.2 非导引型传输媒体 3. 传输方式3.1 串行传输和并行传输3.2 同步传输和异…

控制项目进展

优质博文 IT-BLOG-CN 假如一个项目准备工作做的非常周详&#xff0c;现在要做的就是监督项目的进展情况&#xff0c;理想状况下事情应当进展的很顺利&#xff0c;但实际上我们会发现项目永远不会完全按照经计划执行&#xff0c;我们必须进行项目控制。也就是我们需要不断进行调…

AI创作之旅:探索提示工程的奇妙世界

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 在当今信息爆炸的时代&#xff0c;人工智能的发…