docker基础(八)之docker commit,docker tag,docker cp,docker diff

文章目录

  • 概述
  • docker commit
    • 语法
    • OPTIONS说明:
    • docker commit --help
    • 实例
    • 使用场景
  • docker tag
    • 语法
    • 示例
    • 使用场景
    • 为什么要这样做呢?
  • docker cp
    • 语法
    • OPTIONS说明:
    • docker cp --help
    • 示例
  • docker diff
    • 语法
    • 示例
    • 使用场景:

概述

用于学习和记录,以下内容来自chatgpt3.5,网络等,补充例子。
本文介绍了docker commit,docker tag,docker cp,docker diff的基础用法,及相关options的详细解释和例子。

docker系列其他文章:docker专栏

docker commit

docker commit :从容器创建一个新的镜像。

语法

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

OPTIONS说明:

  • -a :提交的镜像作者;
  • -c :使用Dockerfile指令来创建镜像;
  • -m :提交时的说明文字;
  • -p :在commit时,将容器暂停。
    PS: (因为docker commit是把容器当前状态提交为镜像快照,这个-p是提交快照的时候,把当前容器给暂停)

docker commit --help

在这里插入图片描述

实例

假设已经有一个正在运行的容器,其名称为my_container,想要将其保存为一个新的镜像。

首先,使用以下命令查找容器的ID或名称:

docker ps

在输出中,找到要创建镜像的容器的ID名称。假设它是my_container

运行以下命令来创建镜像:

docker commit my_container my_image:tag

在上述命令中,将my_container替换为要创建镜像的容器的ID或名称,my_image替换为想要为镜像设置的名称,tag是镜像的标签(可选)。

例如,要将容器my_container创建为名为my_image的镜像,可以运行以下命令:

docker commit my_container my_image

这将在本地Docker环境中创建一个新的镜像。

完成后,可以使用以下命令查看新创建的镜像列表:

docker images

在输出中,将看到刚刚创建的my_image镜像。

现在,已经成功地通过现有容器创建了一个新的镜像。

请注意,使用docker commit命令创建镜像时,将保存容器的当前状态作为快照。这包括容器中的文件、进程、网络设置等
但是,这种方式创建的镜像可能不够灵活和可重复 ,因为它们可能会包含不必要的或临时性的文件和状态。

如果需要更复杂和可重复的镜像构建过程,建议使用Dockerfile来定义镜像的构建步骤和配置。

使用场景

以下是一些docker commit命令的使用场景:

  • 自定义镜像:当对现有容器进行了一些定制化的修改,例如安装了特定软件包、调整了配置,希望将这些修改保存为一个新的镜像,这时就可以使用docker commit命令。
  • 实验和调试:在开发过程中,为了节省时间,可能会对容器进行一些实验性的修改或者调试。使用docker commit可以保存这些调试过程中的容器状态,方便后续查看或者分享
  • 创建快照镜像:当需要在特定时间点对容器的状态进行快照,以便稍后进行回滚或者比对容器状态时,可以使用docker commit命令。
  • 将容器状态保存为镜像:在CI/CD流程中,可能会遇到需要将特定步骤的容器状态保存为镜像的情况,通过docker commit可以方便地实现此目的。

总的来说,docker commit命令适用于需要将容器状态保存为新镜像以及定制化镜像的场景。这种方式可以帮助用户更轻松地管理和共享容器的特定状态。

docker tag

docker tag : 标记本地镜像,将其归入某一仓库。

语法

docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]

其中
SOURCE_IMAGE是要标记的源镜像的名称或ID。
TAG是可选的,用于指定镜像的标签。如果未指定标签,将使用默认的latest标签。
TARGET_IMAGE是目标镜像的名称或ID。

示例

  • 给现有的镜像添加标签:
docker tag my_image:latest my_image:1.0

这将为名为my_image的镜像添加一个名为1.0的标签。

  • 为镜像添加命名空间和标签:
docker tag my_image:latest my_registry/my_image:1.0

这将为名为my_image的镜像添加一个名为1.0的标签,并将其命名空间设置为my_registry。

  • 使用镜像ID进行标记:
docker tag 0123456789ab my_image:1.0

这将使用ID为0123456789ab的镜像添加一个名为1.0的标签。

  • 标记远程镜像:
docker tag my_image:latest my_registry/my_image:1.0

这将为名为my_image的本地镜像添加一个名为1.0的标签,并将其命名空间设置为my_registry,从而创建一个带有标签的远程镜像。

请注意,docker tag命令只是为镜像添加了一个新的标签,而不会创建新的镜像。标签只是对现有镜像的引用,可以更方便地引用和管理镜像。

使用场景

docker tag命令的使用场景包括:

  • 标记镜像版本:通过给镜像添加标签,可以方便地标识和管理不同版本的镜像。例如,可以为每个镜像版本添加一个唯一的标签,如1.0、2.0等。

  • 创建镜像别名:使用docker tag命令,可以为同一个镜像创建多个标签,从而创建镜像的别名。这样,可以使用不同的标签来引用同一个镜像,使得镜像在不同环境或用途中更易于识别和使用。

  • 上传镜像到私有仓库:如果使用的是私有的Docker镜像仓库,可以使用docker tag命令为镜像添加仓库的命名空间,并指定标签,然后使用docker push命令将镜像推送到私有仓库中。

  • 管理分支和发布:在开发过程中,可以使用docker tag命令为不同的代码分支创建不同的镜像标签。这样,可以轻松地在不同的环境中部署和测试不同的代码分支。

  • 复制镜像到其他环境:通过使用docker tag命令,可以为现有的镜像创建一个新的标签,并将其传输到其他环境中。这样,可以在不同的机器或服务器之间复制和使用相同的镜像。

总之,docker tag命令提供了一种方便的方式来管理和引用Docker镜像,使得在不同环境和用途中更加灵活和可控。

为什么要这样做呢?

在同一时间点给同一个镜像打多个标签通常是为了将同一版本的镜像在不同的场景中使用不同的标签。 这样可以使得镜像在不同环境中可以被更方便地调用和识别。

例如,假设我们有一个版本为1.0的镜像,我们可以给它打上以下标签:

docker build -t myapp:1.0 -t username/myapp:1.0 -t myapp:latest -t username/myapp:latest .

"myapp:1.0":用于在稳定的生产环境中使用;
"username/myapp:1.0":用于推送到远程仓库;
"myapp:latest":代表最新版本,在开发环境中可以使用;
"username/myapp:latest":代表最新版本,也用于推送到远程仓库。

这样做可以实现在单个构建过程中定义多个标签,并且确保它们都指向同一个镜像。这样做有助于提高镜像的灵活性、可维护性和适用性。

docker cp

docker cp :用于容器与主机之间的数据拷贝。

语法

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH

CONTAINER是要复制文件的容器名称或ID。
SRC_PATH是源文件或目录的路径。
DEST_PATH是目标文件或目录的路径。

docker cp命令用于在本地文件系统和运行中的Docker容器之间复制文件或目录。

OPTIONS说明:

-a, --archive:将文件或目录以归档模式复制,保留所有元数据和权限。
-L, --follow-link:跟随符号链接进行复制。

docker cp --help

在这里插入图片描述

示例

以下是一些示例:

  • 从容器复制文件到本地文件系统:
docker cp my_container:/app/logs/app.log /tmp/app.log

这将从名为my_container的容器中复制/app/logs/app.log文件到本地文件系统的/tmp/app.log路径。

  • 从容器复制整个目录到本地文件系统:
docker cp my_container:/app/logs/ /tmp/logs/

这将从名为my_container的容器中复制/app/logs/目录及其内容到本地文件系统的/tmp/logs/路径。

  • 将本地文件复制到容器:
docker cp /tmp/app.log my_container:/app/logs/app.log

这将从本地文件系统的/tmp/app.log文件复制到名为my_container的容器中的/app/logs/app.log路径。

  • 将本地目录复制到容器:
docker cp /tmp/logs/ my_container:/app/logs/

这将从本地文件系统的/tmp/logs/目录及其内容复制到名为my_container的容器中的/app/logs/路径。

  • -L 选项的使用
    当容器内有一个符号链接指向的目标文件时,我们可以通过以下示例来演示 -L 选项的使用:

假设容器内有一个符号链接 /app/link.txt,它指向文件 /app/data.txt。我们将使用 docker cp 命令将链接指向的目标文件复制到主机上的 /tmp 目录。

docker cp -L mycontainer:/app/link.txt /tmp

上述命令将复制容器内的 /app/link.txt 符号链接指向的文件 /app/data.txt 到主机上的 /tmp 目录。

请注意:

  • 如果不使用 -L 选项,只会复制符号链接本身,而不会跟随链接指向的目标文件。因此,如果不加 -L
    选项,上述命令将在主机上创建一个名为 link.txt 的文件,而不是复制链接指向的目标文件。

  • docker cp命令需要指定容器的名称或ID,并且必须在容器运行时才能复制文件**。此外,目标路径必须是容器内的绝对路径。

docker diff

docker diff命令用于查看容器内部文件系统的变化。它将显示容器中添加、修改或删除的文件和目录。

语法

docker diff [OPTIONS] CONTAINER

CONTAINER是要检查文件系统变化的容器名称或ID。

示例

  • 查看容器内部文件的变化:
docker diff my_container

这将显示名为my_container的容器中文件系统的变化列表。添加的文件和目录以A标记,修改的文件以C标记,删除的文件以D标记。

  • 监控容器内部文件的变化:

docker diff命令可以与其他命令结合使用,以监控容器内部文件系统的变化。例如,可以使用watch命令定期运行docker diff来实时监测文件的变化。

watch -n 1 "docker diff my_container"

这将每秒钟运行一次docker diff命令,并显示容器中文件系统的变化。

使用场景:

  • 调试容器:当遇到容器中文件系统相关的问题时,可以使用docker diff命令来查看文件的变化,以确定是否有意外的修改或删除操作。

  • 监测容器的行为:通过定期运行docker diff命令,可以监测容器内部文件系统的变化,以确保容器的行为符合预期。

  • 容器安全审计:使用docker diff命令可以检查容器中的文件变化,以进行安全审计。可以查看容器中添加或修改的文件,以确保没有未经授权的更改。

请注意,docker diff命令只能查看容器内部文件系统的变化,而不能对容器外部的文件系统进行操作。

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

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

相关文章

Java学习day1

打开命令提示符(cmd)窗口: 按下winR键,输入cmd 按回车或点击确定,打开cmd窗口 常用cmd命令 盘符名称冒号(D:):盘符切换,示例表示由C盘切换到D盘 dir:查看当前路径下的内…

第十节HarmonyOS 常用容器组件2-Counter

1、描述 计数器组件,提供相应的增加或者减少的计数操作。 说明: 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 2、子组件 可以包含子组件。 3、接口 Counter() 从API version 9开始…

9.串口通信

串口基本认识 串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方 式的扩展接口。串行接口(Serial Interface)是指数据一位一位地顺序传送。其特点是通信线路简 单&#x…

Redis五种数据结构,以及所对应在大厂中的实战应用

Redis五种数据结构,以及所对应在大厂中的实战 String应用场景(单值缓存、对象缓存、分布式锁、计数器、存储session集群共享、分布式全局序列号) Hash应用场景对象缓存、电商购物车、购物车操作优点:1. 同类别归类存储 2. 消耗更小…

day11【网络编程】-综合案例

day11【网络编程】 第三章 综合案例 3.1 文件上传案例 文件上传分析图解 【客户端】输入流,从硬盘读取文件数据到程序中。【客户端】输出流,写出文件数据到服务端。【服务端】输入流,读取文件数据到服务端程序。【服务端】输出流&#xf…

java 泛型(中)

本篇文章主要说明的是泛型类、泛型接口、泛型方法等。 在学习之前&#xff0c;希望能对泛型有个大概了解&#xff0c;可参考链接 java 泛型&#xff08;上&#xff09;-CSDN博客 1、泛型类 &#xff08;1&#xff09;格式&#xff1a;修饰符 class 类名<类型>{} &…

CI/CD环境搭建

服务简介 Gitlab 官网&#xff1a;https://about.gitlab.com/ GitLab 是一个用于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xff0c;并在此基础上搭建起来的Web服务。安装方法是参考GitLab在GitHub上的Wiki页面。Gitlab是被广泛使用的基于git的开源代码管…

2024阿里云服务器99计划优惠活动_开年采购季优惠价格表

2024阿里云开年采购活动3月优惠&#xff0c;99计划云服务器99元一年、免费领取上云扶持优惠券&#xff0c;不只是云服务器、云数据库、存储、云电脑、域名等均有活动&#xff0c;阿里云服务器网aliyunfuwuqi.com整理阿里云开年采购上云无忧活动入口、优惠价格表和优惠券领取详细…

unbantu Apache的基本配置与配置静态资源访问

目录 前言: 1.Apache介绍 2.安装Apache 3. 测试Apache服务是否启动成功 3.1配置Servername 3.2重启服务 4.配置Apache主页面 5. 配置静态的资源 6.为静态资源设置访问权限(基于源地址) 致谢: 前言: 此博客是基于unbantu的Apache服务的详细解析&#xff0c;在这片博…

QPainter绘图和QChart图表和QCustomplot绘曲线图

一&#xff0c;QPainter绘图 Qt里的所有绘图&#xff0c;比如一个按钮和一个Label的显示&#xff0c;都有绘图系统来执行。绘图系统基于 QPainter、QPaintDevice和QPainEngine类。QPainter是可以直接用来操作绘图的类&#xff0c;而 QPaintDevice和QPainEngine都比QPainter更底…

TCP | TCP协议格式 | 三次握手

1.TCP协议 为什么需要 TCP 协议 &#xff1f;TCP 工作在哪一层&#xff1f; IP网络层是不可靠的&#xff0c;TCP工作在传输层&#xff0c;保证数据传输的可靠性。 TCP全称为 “传输控制协议&#xff08;Transmission Control Protocol”&#xff09;。 TCP 是面向连接的、可靠…

DBO优化高斯回归预测(matlab代码)

DBO-高斯回归预测matlab代码 蜣螂优化算法(Dung Beetle Optimizer, DBO)是一种新型的群智能优化算法&#xff0c;在2022年底提出&#xff0c;主要是受蜣螂的的滚球、跳舞、觅食、偷窃和繁殖行为的启发。 数据为Excel股票预测数据。 数据集划分为训练集、验证集、测试集,比例…

GESP图形化编程四级认证真题 2024年3月

GESP 图形化四级试卷 &#xff08;满分&#xff1a;100 分 考试时间&#xff1a;120 分钟&#xff09; 一、单选题&#xff08;共 10 题&#xff0c;每题 2 分&#xff0c;共 30 分&#xff09; 1、小杨的父母最近刚刚给他买了一块华为手表&#xff0c;他说手表…

PyTorch深度学习:遥感影像地物分类的高效工具

我国高分辨率对地观测系统重大专项已全面启动&#xff0c;高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成&#xff0c;将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB&#xff0c;遥感大数据时…

JMeter 环境安装及配置

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

图像分类从零开始(1)

尽我所能&#xff0c;总结留给后面的师弟们&#xff01; 1.目标 搭建一个完整的系统&#xff0c;包括图像数据集预处理&#xff0c;训练模型&#xff0c;分类器&#xff0c;优化器&#xff0c;以及结果数据处理。 2.理论 3.实例&#xff08;猫狗分类&#xff09; Gitee代码…

day-24 跳跃游戏 III

思路&#xff1a;dfs方法&#xff0c;从开始节点开始进行深度优先遍历&#xff0c;利用一个数组vis[]记录该位置是否被访问过&#xff0c;如果遍历到一个已经访问的位置&#xff0c;返回false 如果遍历到某位置的值为0&#xff0c;返回true code: class Solution {public boo…

Vulnhub - Raven2

希望和各位大佬一起学习&#xff0c;如果文章内容有错请多多指正&#xff0c;谢谢&#xff01; 个人博客链接&#xff1a;CH4SER的个人BLOG – Welcome To Ch4sers Blog Raven2 靶机下载地址&#xff1a;https://www.vulnhub.com/entry/raven-2,269/ 0x01 信息收集 Nmap扫描…

力扣算法题之好数对的数目

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

性能测试的几个重要指标的说明!

在做性能测试过程中有一件很重要的事情需要去完成&#xff0c;那就是分析性能指标数据&#xff0c;可以这样说做性能测试的整个过程都跟指标数据息息相关&#xff0c;下面来说一下常见的一些性能指标数据&#xff1a; 1.吞吐量 2.并发数 3.思考时间 4.响应时间 5.点击数 …