【基础篇】Docker 镜像管理 THREE

news2024/9/9 5:29:21

嘿,小伙伴们!我是小竹笋,一名热爱创作的工程师。在上一篇文章中,我们探讨了 Docker 的架构与关键组件。今天,让我们一起深入了解一下 Docker 镜像管理的相关知识吧!

📦 创建和管理镜像

镜像是 Docker 的核心概念之一,它们就像是 Docker 容器的蓝图。有了镜像,你就可以轻松地创建和运行容器。下面我们来看看如何创建和管理 Docker 镜像。

1. 创建镜像: 你可以基于现有的镜像创建新的镜像,也可以使用 Dockerfile 自定义构建镜像。

        • 基于现有镜像: 使用 docker commit 命令将正在运行的容器保存为新镜像。

• 使用 Dockerfile: 编写一个 Dockerfile 文件,使用 Docker 的构建工具来创建镜像。

2. 查看镜像: 使用 docker images 或 docker image ls 命令来列出所有本地镜像。

3. 删除镜像: 如果不再需要某个镜像,可以通过 docker rmi <image-id> 命令将其删除。如果镜像正在被容器使用,你可能还需要先停止并删除相关容器。

📝 Dockerfile 的基本指令

Dockerfile 是一个文本文件,包含了创建 Docker 镜像所需的指令。让我们来看一看一些常用的 Dockerfile 指令:

  • FROM: 指定基础镜像。

    • 示例: FROM ubuntu:20.04

  • LABEL: 添加元数据到镜像。

    • 示例: LABEL maintainer="xiaozhunen@example.com"

  • COPY: 复制文件或目录到镜像中。

    • 示例: COPY ./app /usr/src/app

  • ADD: 类似于 COPY,但还可以处理远程 URL 和自动解压 tar 文件。

    • 示例: ADD https://example.com/package.tar.gz /usr/local/bin/

  • RUN: 在镜像构建过程中运行命令。

    • 示例: RUN apt-get update && apt-get install -y nginx

  • CMD: 定义容器启动时执行的默认命令。

    • 示例: CMD ["nginx", "-g", "daemon off;"]

  • EXPOSE: 暴露端口。

    • 示例: EXPOSE 80

📋 镜像分层与缓存机制

Docker 镜像是分层的,这意味着每一个 Dockerfile 的指令都会生成一个新的层。这样的设计有几个好处:

  • 可重用性: 不同的 Dockerfile 可以共享相同的层,从而减少磁盘空间的占用。

  • 快速构建: Docker 会缓存之前构建过的层,如果相同层再次构建,则可以直接使用缓存。这使得构建过程更快捷。

为了更好地利用缓存机制,你需要了解几个要点:

  • 缓存失效: 当 Dockerfile 中的某条指令变化时,该指令及其之后的所有指令对应的层都需要重新构建。

  • 最佳实践: 将不会频繁改变的部分放在前面,例如基础镜像和依赖安装,而经常改变的部分(如源代码)放在后面。

📚 Docker Hub 及私有 Registry 使用
  • Docker Hub: Docker Hub 是一个公开的镜像仓库,任何人都可以上传和下载镜像。你可以把它看作是 Docker 镜像的公共图书馆。

    • 注册账号: 访问 Docker Hub 并注册账号。

    • 上传镜像: 使用 docker push 命令将本地镜像推送到 Docker Hub。

    • 下载镜像: 使用 docker pull 命令从 Docker Hub 下载镜像。

  • Private Registry: 私有 Registry 则是企业的内部镜像仓库,用于安全地存储和分发镜像。你可以搭建自己的私有 Registry,例如使用 Docker 的官方解决方案 Docker Registry。

    • 搭建私有 Registry: 可以使用 Docker Registry 官方镜像来部署。

    • 认证与权限: 私有 Registry 通常需要认证和授权机制,确保只有授权用户可以访问特定镜像。

🛠️ 实战演练:创建一个简单的 Dockerfile
# 使用官方的基础镜像作为起点
FROM python:3.8-slim

# 添加标签信息
LABEL maintainer="xiaozhunen@example.com"

# 设置工作目录
WORKDIR /app

# 复制当前目录下的文件到容器的 /app 目录
COPY . /app

# 安装必要的软件包
RUN pip install --no-cache-dir -r requirements.txt

# 暴露 HTTP 端口
EXPOSE 8000

# 指定容器启动时运行的命令
CMD ["python", "app.py"]
  • FROM: 指定基础镜像。

  • LABEL: 添加维护者信息。

  • WORKDIR: 设定工作目录。

  • COPY: 复制文件到容器。

  • RUN: 执行命令,这里安装了 Python 包。

  • EXPOSE: 暴露端口。

  • CMD: 定义容器启动时执行的命令。

下期预告:

【基础篇】Docker 容器操作 FOUR

  • 运行、停止和删除容器

  • 容器网络配置

  • 数据持久化与数据卷

  • 日志管理和健康检查


参考资料:

  • Docker 官方网站:

  • https://www.docker.com/

  • Docker 官方文档 GitHub 仓库:

  • https://github.com/docker/docker.github.io

  • Docker 中文社区翻译项目:

  • https://github.com/docker-cn/docker-cn


📢 读者互动: 你是否已经在工作中使用了 Docker?欢迎在评论区分享你的使用体验或遇到的问题!

如果你觉得这篇文章对你有所帮助,请给我点个赞或者转发给你的朋友吧!👍


推荐阅读:

  • • Kubernetes 中文官网:

  •          https://kubernetes.p2hp.com/#google_vignette           


往期回顾:

  •  【基础篇】Docker 概览 ONE

  • 【基础篇】Docker 架构与组件 TWO

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

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

相关文章

Qt程序移植至Arm开发板

环境准备&#xff1a; 系统调试工具SecureCRT SecureCRT 是一款支持 SSH 协议的终端仿真软件&#xff0c;可通过串口或网口对评估板系统信息进行查看、对评估板系统进行调试等。 SecureCRT的安装破解 [详细过程2024]-CSDN博客https://blog.csdn.net/2301_76659937/article/det…

2-50 基于matlab的遗传模拟退火算法的聚类算法

基于matlab的遗传模拟退火算法的聚类算法&#xff0c;以模糊K-均值聚类算法为基础&#xff0c;对各样本的聚类中心进行优化&#xff0c;输出聚类可视化结果。聚类类别数可自由输入。程序已调通&#xff0c;可直接运行。 2-50 遗传模拟退火算法的聚类算法 - 小红书 (xiaohongshu…

【源码阅读】Redisson lock源码

Redisson 加锁非常简单&#xff0c;还支持 redis 单实例、redis 哨兵、redis cluster、redis master-slave 等各种部署架构 RLock lock redisson.getLock("cyk-test"); lock.lock(); lock.unlock(); 底层原理 加锁机制 废话不多说&#xff0c;直接看源码&#xf…

Go语言----flag包(导入、配置、以及常用方法Parse()、Parsed()、NArg())

在 Go语言中有很多种方法来处理命令行参数。如果我们只是想简单的获取命令行的参数&#xff0c;可以像Go语言–延迟调用defer、获取命令行参数、局部变量以及全局变量中介绍的不使用任何库&#xff0c;直接使用 os.Args&#xff1b; d但是 Golang 的标准库提供了 flag 包来处理…

机械拆装-基于Unity-本地数据持久化

目录 1. 数据结构简介&#xff1a;数据的集合 1.1 线性数据结构 1.2 非线性数据结构 2. 对数据集合的操作&#xff1a; 3. 数据持久化 3.1 数据的序列化存储 3.2 JSON文件硬盘存储 3.2.1 Json文件允许存储的数据类型 3.2.2 Json文件的语法格式 3.2.3 Json文件的读取 3.2.4 …

Echarts toolbox相关配置 dataZoom缩放

前言:最近开发遇到一个echarts相关问题,需要实现用户鼠标滚动实现图表缩放,或者实现选中某一段区域进行缩放,放大效果; 1.第一个需求就是区域缩放按钮要隐藏掉,用户鼠标放在图表内就默认实现选择效果,并且区域缩放还原按钮不能隐藏,需要在初始化配置这三个属性. // 假设你已经…

孙宇晨建议中国重新考虑“比特币政策”!中美竞争将使加密货币行业受益?美国对“中国崛起”感到焦虑!

近日&#xff0c;前美国总统特朗普发表了一番振奋人心的比特币演讲&#xff0c;令加密货币社群反响热烈。而Tron区块链创始人孙宇晨则建议中国重新考虑其对于比特币的政策立场&#xff0c;并指出中美两国在加密货币领域的竞争&#xff0c;将使整个行业受益。这再次引发了人们对…

未来社交:Facebook如何定义虚拟现实的新时代?

随着科技的飞速发展&#xff0c;虚拟现实&#xff08;VR&#xff09;逐渐从科幻小说中的幻想变成了现实生活中的前沿技术。在这一领域&#xff0c;Facebook&#xff08;现已更名为Meta&#xff09;扮演了重要角色&#xff0c;通过不断的创新和投资&#xff0c;致力于打造一个全…

花几千上万学习Java,真没必要!(三十六)

1、File类&#xff1a; 测试代码1&#xff1a; package filetest.com; import java.io.File; import java.io.IOException; public class FileOperations { public static void main(String[] args) { // 创建新文件File file new File("example.txt"); tr…

18966 两两配对差值最小

这个问题可以通过排序和配对来解决。首先&#xff0c;我们将数组排序&#xff0c;然后我们将数组的第一个元素和最后一个元素配对&#xff0c;第二个元素和倒数第二个元素配对&#xff0c;以此类推。这样&#xff0c;我们可以得到n/2个和&#xff0c;然后我们找出这些和中的最大…

光伏可行性研究报告能否自动生成?

随着技术的不断进步和应用的广泛普及&#xff0c;光伏项目的规划与实施也面临着更加复杂多变的考量因素&#xff0c;其中&#xff0c;光伏可行性研究报告成为了项目前期不可或缺的重要内容。那么&#xff0c;面对这一需求&#xff0c;光伏可行性研究报告能否实现自动生成呢&…

Nat Med·UNI:开启计算病理学新篇章的自监督基础模型|顶刊精析·24-07-31

小罗碎碎念 本期推文主题 这一期推文是病理AI基础模型UNI的详细介绍&#xff0c;原文如下。下期推文会介绍如何使用这个模型&#xff0c;为了你能看懂下期的推文&#xff0c;强烈建议你好好看看今天这期推文。 看完这篇推文以后&#xff0c;你大概就能清楚这个模型对自己的数据…

搞懂数据结构与Java实现

文章链接&#xff1a;搞懂数据结构与Java实现 (qq.com) 代码链接&#xff1a; Java实现数组模拟循环队列代码 (qq.com) Java实现数组模拟栈代码 (qq.com) Java实现链表代码 (qq.com) Java实现哈希表代码 (qq.com) Java实现二叉树代码 (qq.com) Java实现图代码 (qq.com)

《计算机网络》(第8版)考研真题

第一章 一、选择题 1 在 TCP/IP 体系结构中,直接为 ICMP 提供服务的协议是( )。[2012 年统考] A .PPP B .IP C .UDP D .TCP 【答案】B 【解析】A 项:PPP 在 TCP/IP 体系结构中属于网络接口层协议(在 ISO/OSI 体系结构中属于数据链路层协议),所以 PPP 为网络层提供…

免费【2024】springboot 厨房达人美食分享平台

博主介绍&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

图片格式转换教程:百种格式随意转换,建议收藏使用!

图片格式转换方法有哪些&#xff1f;本文整理了几款好用且简单的格式转换工具&#xff0c;适用于处理各种图片格式转换的难题。 常见的图片格式转换有png转换为jpg、heic转jpg、webp转jpg等&#xff0c;特别是heic、webp、这两种图片格式&#xff0c;格式比较特殊&#xff0c;兼…

《最新出炉》系列入门篇-Python+Playwright自动化测试-57- 上传文件 - 番外篇

软件测试微信群&#xff1a;https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 1.简介 前边的三篇文章基本上对文件上传的知识介绍和讲解的差不多了&#xff0c;今天主要是来分享宏哥在文件上传的实际操作中发现的一个问题&#xff1a;input控件和非input控件的上…

打破技术壁垒,加速企业数字化转型:低代码平台如何降低开发门槛

科技飞速发展&#xff0c;企业数字化转型趋势不可逆转。数字化转型不仅能够优化内部运营流程&#xff0c;提升管理效率&#xff0c;还能通过数据驱动决策&#xff0c;增强市场竞争力。传统开发模式因技术门槛、周期长&#xff0c;限制了企业创新与响应速度。 低代码平台应运而生…

Android进阶之NDK开发,保姆级教程

目录 前言NDK下载CMake文件创建指定ABI架构编写CMake文件编写JNI方法Java调用CC调用Java 生成JNI头文件实现对应C方法编译so文件编写demo验证运行效果总结 前言 作为Android应用开发从业者来说&#xff0c;掌握NDK开发是必备技能之一&#xff0c;本文将从NDK环境下载&#xff…

Spring源码-xml配置文件如何加载解析默认标签变为BeanDefinition

1.创建Environment new StandardEnvironment() createEnvironment:346, AbstractApplicationContext (org.springframework.context.support) getEnvironment:332, AbstractApplicationContext (org.springframework.context.support) resolvePath:131, AbstractRefreshable…