【基础篇】Docker 镜像管理 THREE

嘿,小伙伴们!我是小竹笋,一名热爱创作的工程师。在上一篇文章中,我们探讨了 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://xiahunao.cn/news/3281665.html

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

相关文章

IEEE计算智能学会深圳分会线上讲座 22-01期: 金耀初教授的科研经验分享

IEEE计算智能学会深圳分会线上讲座 22-01期: 金耀初教授的科研经验分享_哔哩哔哩_bilibili 非限定性定语从句&#xff0c;使用逗号和which、动名词搭配使用&#xff0c; 尽量避免使用被动语态。 obviously- 使用clearly,apparently感觉上更好。 In this study/work 后面的交…

C/C++文件IO常用函数总结

文章目录 1. 文件描述符2. 文件IO常用函数2.1打开文件&#xff1a;open2.2 关闭文件&#xff1a;close2.3 读写操作&#xff1a;read/write2.4 关于光标的操作&#xff1a;lseek 1. 文件描述符 文件描述符的本质是一个大于等于0的整数&#xff0c;在使用open函数打开文件时&am…

pychar安装、pychon安装、pycharm超过试用期30激活

如果pycharm超过试用期&#xff0c;可以双击vbs脚本重新激活 百度网盘&#xff1a; 链接: https://pan.baidu.com/s/1B-XyLOy3wjVWbJwuvZOHOw?pwdmsb6 提取码: msb6

【学术会议征稿】第六届经济管理与模型工程国际学术会议(ICEMME 2024)

第六届经济管理与模型工程国际学术会议&#xff08;ICEMME 2024&#xff09; 2024 6th International Conference on Economic Management and Model Engineering 第六届经济管理与模型工程国际学术会议&#xff08;ICEMME 2024&#xff09;将于2024年11月22-24日在中国大连…

Bugku-web-Flask_FileUpload

Bugku-web-Flask_FileUpload 查看源代码&#xff0c;提示用python返回结果 在file.jpg中写python代码 import os os.system(ls / )上传后查看源代码&#xff0c;找到flag文件夹 修改代码 import os os.system(cat /flag )

STM32的外部中断实现按键控制led灯亮灭(HAL库)

一&#xff1a;stm32外部中断概述 1&#xff1a;stm32的外部中断线 STM32的每个IO都可以作为外部中断输入。 STM32的中断控制器支持19个外部中断/事件请求&#xff1a; 线0~15&#xff1a;对应外部IO口的输入中断。 线16&#xff1a;连接到PVD输出。 线17&#xff1a;连接到R…

鸿蒙应用框架开发【首选项】 本地数据与文件

首选项 简介 本示例使用ohos.data.preferences接口&#xff0c;展示了使用首选项持久化存储数据的功能。 效果预览 使用说明 1.点击顶部titleBar的右侧切换按钮&#xff0c;弹出主题菜单&#xff0c;选择任意主题则切换相应的主题界面&#xff1b; 2.退出应用再重新进入&a…

智能合约中approve函数详解

场景 这段时间很多小伙伴加我、都咨询到了一个类似的业务场景、 如下&#xff1a; 1、第一步业务里面调用授权函数approve 、给指定address2、第二步是由授权的address调用transferFrom转移给指定的接受地址。 案例DEMO如下&#xff08;这里test2肯定是会执行失败的&#xff…

相机标定(Camera Calibration)

什么是 相机标定&#xff08;Camera Calibration&#xff09;&#xff1f; 相机标定&#xff08;CameraCalibration&#xff09;是确定相机内部参数&#xff08;如焦距、光学中心、畸变系数等&#xff09;和外部参数&#xff08;如相机在世界坐标系中的位置和姿态&#xff09;的…

Jackson常用注解详解

Hi &#x1f44b;, Im shy 有人见尘埃&#xff0c;有人见星辰 Jackson常用注解详解 文章目录 Jackson常用注解详解0. 引入依赖1. JsonProperty2. JsonIgnore3. JsonFormat4. JsonInclude5. JsonCreator6. JsonValue7. JsonIgnoreProperties结论 Jackson是Java生态系统中广泛…

【Canvas与艺术】三环莫比乌斯圈

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>三环莫比乌斯圈</title><style type"text/css"&g…

插单现象对PMC造成的影响有哪些?

插单&#xff0c;即在生产制造过程中&#xff0c;客户或其他部门临时增加订单&#xff0c;这一行为如同战场上的突袭&#xff0c;让生产与物料控制&#xff08;PMC&#xff09;部门措手不及&#xff0c;面临着前所未有的压力和挑战。那么&#xff0c;插单现象究竟对PMC造成了哪…

【MATLAB源码-第239期】基于matlab的孔雀优化算法(POA)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 孔雀优化算法&#xff08;Peafowl Optimization Algorithm&#xff0c;简称POA&#xff09;以孔雀&#xff08;peafowl&#xff09;的求偶展示行为为灵感&#xff0c;通过模拟这一过程来解决复杂的优化问题。以下是对孔雀优化…

深度揭秘——TCP/IP协议

今天我们要深入探讨一个关键的网络基础知识——TCP/IP协议。无论你是刚接触网络技术的新手&#xff0c;还是希望加深理解的老手&#xff0c;本文都将为你提供全面且易懂的介绍。 TCP/IP协议是一组用于互联网的通信协议的集合&#xff0c;包含了传输控制协议&#xff08;TCP&am…

大数据信用报告查询会不会留下查询记录?怎么选择查询平台?

最近有不少网友都在咨询一个问题&#xff0c;那就是大数据信用报告查询会不会留下查询记录&#xff0c;会不会对自己的征信产生影响&#xff0c;下面本文就详细为大家介绍一下&#xff0c;希望对你了解大数据信用有帮助。 首先、大数据信用与人行征信是独立的 很多人只知道人行…

哪款加密软件好用点?迅软DSE加密软件如何?

在选择加密软件时&#xff0c;好用与否往往取决于多个因素&#xff0c;包括&#xff1a;软件的功能、稳定性、安全性、易用性、兼容性以及性价比等。 针对大家提到的迅软DSE加密软件&#xff0c;以下是一些详细的分析&#xff1a; 一、功能全面 迅软DSE加密系统集成了文件加密…

编译环境搭建(Linux)

0 Preface/Foreword 0.1 System requirement Airoha编译环境&#xff0c;对于Linux distro&#xff0c;建议使用Ubuntu 18.04 1 环境搭建 1.1 Create a working folder 在Linux中&#xff0c;创建一个文件夹&#xff0c;用来存放Airoha释放过来的开发工具链安装包。 博主当…

[数据集][目标检测]船上翻越栏杆危险行为检测数据集VOC+YOLO格式3678张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;3678 标注数量(xml文件个数)&#xff1a;3678 标注数量(txt文件个数)&#xff1a;3678 标注…

Linux中新添加的磁盘信息不显示-主动扫盘(刷新磁盘状态)

在Linux系统中&#xff0c;当你新添加了一个磁盘&#xff08;无论是通过物理添加还是虚拟化环境&#xff09;&#xff0c;你可能需要让系统识别这个新磁盘&#xff0c;并且可能需要更新或“刷新”磁盘的状态。这通常涉及到几个步骤&#xff0c;但没有一个直接的“刷新磁盘状态”…