Windows Docker笔记-制作、加载镜像
引言
在文章《Windows Docker笔记-在容器中运行项目》中,已经在容器中运行了项目。而且在这个容器中,已经调试好了项目运行的环境。
使用docker,就是为了在项目发布到生产环境时,不用再去安装项目运行的环境,直接丢给现场这个容器中的东西运行就可以了。因为这个容器中已经有了项目运行所有依赖的东西。
那应该怎么操作呢?
首先,容器都是由镜像创建出来的,而镜像可以被拉取使用,可以知道,要想让生产环境直接使用这个OK的容器,就需要将这个容器制作成镜像,然后发布到生产环境,在生产环境中使用docker加载镜像后,用这个镜像创建容器运行,这样就可以得到一模一样的容器。
将容器制作为镜像
在 Docker 中,将一个运行中的容器转换为一个新的镜像,可以通过 docker commit 命令完成。这个过程会将容器的当前状态(包括文件系统和运行时的更改)保存为一个新的镜像,供后续使用。
语法:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
- CONTAINER:容器的 ID 或名称。
- REPOSITORY:目标镜像的仓库名称( 镜像名称或仓库名称必须为小写字母 \color{red}{镜像名称或仓库名称必须为小写字母} 镜像名称或仓库名称必须为小写字母)。
- TAG:目标镜像的标签(可选,默认为 latest)。
命令:docker commit myUbuntu myimage:1.0 # 将容器myUbuntu提交为镜像,镜像名称为myimage,版本设为1.0.
D:\本周未完成工作\docker>docker commit myUbuntu myimage:1.0
sha256:afc574de76d32f7d737eac600c94c43001b71cf72e00be5dbaac528b4574e7c8D:\本周未完成工作\docker>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myimage 1.0 afc574de76d3 16 seconds ago 471MB
ubuntu latest a04dc4851cbc 11 days ago 78.1MBD:\本周未完成工作\docker>
上面可以看到已经创建了一个镜像myimage,版本是1.0,大小为471M,因为安装了一些运行环境,所以会变大。
将镜像保存到本地磁盘
创建镜像后,还得将镜像保存为本地的文件,才能发送给生产环境的服务器。
在 Docker 中,如果你想将一个镜像保存到本地文件系统中,可以使用 docker save 命令。这会将镜像保存为一个 .tar 文件,你可以将其存储在本地磁盘上,或者用于在不同机器之间传输镜像。
语法:docker save [OPTIONS] IMAGE [IMAGE…]
- IMAGE:要保存的镜像名称或 ID。
- [OPTIONS]:可选参数,例如指定输出文件名。
案例:
docker save myimage:1.0 > myimage1.0.tar
D:\本周未完成工作\docker>docker save myimage:1.0 > myimage1.0.tarD:\本周未完成工作\docker>dir驱动器 D 中的卷是 Data卷的序列号是 F6F0-A014D:\本周未完成工作\docker 的目录2025/02/07 15:42 <DIR> .
2025/02/07 15:39 <DIR> ..
2025/02/07 10:54 16,584 main
2025/02/07 15:32 479,575,552 myimage1.0.tar
2025/01/20 17:34 75,203,584 ubuntu.tar3 个文件 554,795,720 字节2 个目录 382,237,663,232 可用字节D:\本周未完成工作\docker>
可以看到本地当前目录下已经有了myimage1.0.tar镜像文件。
这里先将创建的镜像和容器删除,方便接下来的演示。 \color{red}{这里先将创建的镜像和容器删除,方便接下来的演示。} 这里先将创建的镜像和容器删除,方便接下来的演示。
删除容器
在 Docker 中,删除容器是一个常见的操作,尤其是在开发和测试环境中。Docker 提供了多种方式来删除容器,包括删除单个容器、多个容器,甚至是所有容器。
-
- 删除单个容器
- 语法:docker rm [OPTIONS] CONTAINER
- CONTAINER:容器的 ID 或名称。
- 案例:docker rm myUbuntu # 删除名为myUbuntu的容器
-
- 如果容器正在运行,你需要先停止它,或者使用 -f 选项强制删除
- 案例:docker rm -f myUbuntu # 强制删除正在运行的容器myUbuntu
D:\本周未完成工作\docker>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
da3b54c08bd5 ubuntu:latest "/bin/bash" 24 hours ago Up 6 hours myUbuntuD:\本周未完成工作\docker>docker rm -f myUbuntu
myUbuntuD:\本周未完成工作\docker>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESD:\本周未完成工作\docker>
容器已经全部清理干净。
删除镜像
在 Docker 中,删除镜像是一个常见的操作,尤其是在清理不再需要的镜像或节省磁盘空间时。Docker 提供了 docker rmi 和 docker image rm 命令来删除镜像。
-
- 删除单个镜像
- 语法:docker rmi [OPTIONS] IMAGE [IMAGE…]
- IMAGE:镜像的名称或 ID
- 语法:docker image rm [OPTIONS] IMAGE [IMAGE…]
- IMAGE:镜像的名称或 ID
- 案例:
- docker rmi myimage:1.0
- docker image rm myimage:1.0
-
- 强制删除镜像
如果镜像正在被一个或多个容器使用,Docker 会阻止删除该镜像。你可以使用 -f 选项强制删除镜像, 但这会同时删除所有依赖该镜像的容器 \color{red}{但这会同时删除所有依赖该镜像的容器} 但这会同时删除所有依赖该镜像的容器
- 案例:docker rmi -f myimage:1.0
- 强制删除镜像
D:\本周未完成工作\docker>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myimage 1.0 afc574de76d3 56 minutes ago 471MB
ubuntu latest a04dc4851cbc 11 days ago 78.1MBD:\本周未完成工作\docker>docker rmi myimage:1.0
Untagged: myimage:1.0
Deleted: sha256:afc574de76d32f7d737eac600c94c43001b71cf72e00be5dbaac528b4574e7c8
Deleted: sha256:9eef925daae57b9aa72b8347d2e48693018ade421a90d489f29193149e387023D:\本周未完成工作\docker>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest a04dc4851cbc 11 days ago 78.1MBD:\本周未完成工作\docker>
可以看到刚才创建的镜像已经删除了。
docker加载本地镜像文件
如果你想在另一台机器上加载这个 .tar 文件,可以使用 docker load 命令。
命令:docker load < myimage1.0.tar # myimage1.0.tar是刚刚保存到本地的镜像文件
命令:docker load --input myimage1.0.tar # 或者这种也可以
D:\本周未完成工作\docker>docker load --input myimage1.0.tar
f55328183ab2: Loading layer [==================================================>] 398.9MB/398.9MB
Loaded image: myimage:1.0D:\本周未完成工作\docker>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myimage 1.0 afc574de76d3 About an hour ago 471MB
ubuntu latest a04dc4851cbc 11 days ago 78.1MBD:\本周未完成工作\docker>
可以看到已经成功加载了本地磁盘的镜像文件到docker中。
创建容器,运行项目
有了镜像,就可以创建容器并运行了,相关命令可以参考文章《Windows Docker笔记-Docker容器操作》和《Windows Docker笔记-在容器中运行项目》。
D:\本周未完成工作\docker>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myimage 1.0 afc574de76d3 About an hour ago 471MB
ubuntu latest a04dc4851cbc 11 days ago 78.1MBD:\本周未完成工作\docker>docker run -it --name mytest afc574de76d3
root@1ef0d1e4425a:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@1ef0d1e4425a:/# cd /home/test/
root@1ef0d1e4425a:/home/test# ls
main
root@1ef0d1e4425a:/home/test# ./main
2 + 3 = 5
root@1ef0d1e4425a:/home/test# exit
exitD:\本周未完成工作\docker>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1ef0d1e4425a afc574de76d3 "/bin/bash" 33 seconds ago Exited (0) 10 seconds ago mytestD:\本周未完成工作\docker>
上述过程,首先使用镜像myimage创建了一个名为mytest的容器,之后进入容器内后,成功运行了项目,退出容器后,查看容器信息,可以看到容器已经存在,并且停止了。
这样就成功将现有的项目发布到生产环境,而不需要再次配置运行环境就可以运行项目。
相关文章:
Windows Docker笔记-制作、加载镜像
引言 在文章《Windows Docker笔记-在容器中运行项目》中,已经在容器中运行了项目。而且在这个容器中,已经调试好了项目运行的环境。 使用docker,就是为了在项目发布到生产环境时,不用再去安装项目运行的环境,直接丢给…...
leetcode_26删除有序数组中的重复项
1. 题意 给定一个重复数组,删除其中的重复项目。 2. 题解 双指针 一个指针指向有序不重复数组的最后一个数,另外一个数遍历整个数组,若两个指针对应用的数不相同,有序数组的指针右移,将数填入。 代码一 class Sol…...

速递丨DeepSeek刚刚成立香港子公司,或因考虑香港上市和招募全球AI人才
图片来源:DeepSeek 根据彭博社和财联社报道,DeepSeek 2月5日在香港成立了两家公司——DeepSeek Limited 和 DeepSeek (HK) Limited。 香港中文大学莊太量教授表示,DeepSeek进军香港将推动该市的金融科技发展。如果DeepSeek考虑在香港上市&a…...
笔灵ai写作技术浅析(六):智能改写与续写
笔灵AI写作中的智能改写和续写技术是其核心功能之一,旨在帮助用户生成高质量、多样化的文本内容。 一、智能改写技术 1. 基本原理 智能改写的目标是在保持原文语义不变的前提下,对文本进行重新表述,生成语法正确、语义连贯且风格多样的新文本。其核心思想是通过语义理解和…...

【在线优化】【有源程序】基于遗传算法(GA)和粒子群优化(PSO)算法的MPPT控制策略
目录 一、背景 二、源程序及结果 2.1 simulink仿真程序 2.2 GA模块源程序 2.3 PSO模块源程序 三、程序运行结果 3.1 基于GA优化的MPPT 3.2 基于PSO优化的MPPT 一、背景 MPPT策略能够显著提高光伏、风电等发电效率,节省大量成本。该策略的经典算法是…...
使用 Three.js 实现热力渐变效果
大家好!我是 [数擎 AI],一位热爱探索新技术的前端开发者,在这里分享前端和 Web3D、AI 技术的干货与实战经验。如果你对技术有热情,欢迎关注我的文章,我们一起成长、进步! 开发领域:前端开发 | A…...
java-异常家族梳理(流程图)
前言: 使用流程图梳理异常,便于理解 梳理: Throwable ├── Error(严重错误,无需捕获) │ ├── OutOfMemoryError │ ├── StackOverflowError │ └── ... ├── Exception(可捕获处理) │ ├── RuntimeException(非检查异常/Unchecked) │ …...

开启蓝耘之旅:DeepSeek R1 模型在智算平台的起步教程
----------------------------------------------------------我的个人主页-------------------- 动动你的手指----------------------------------------点赞👍 收藏❤--------------------------------------------------------------- 引言 在深度学习的广袤领…...
[高等数学]不定积分的概念与性质
一、知识点 (一)原函数与不定积分的概念 定义1(原函数) 如果在区间 I I I 上,可导函数 F ( x ) F(x) F(x) 的导函数为 f ( x ) f(x) f(x),即对任一 x ∈ I x\in I x∈I,都有 F ′ ( x )…...
【算法】【高精度】acwing算法基础 793. 高精度乘法
题目 给定两个非负整数(不含前导 0) A 和 B,请你计算 AB 的值。 输入格式 共两行,第一行包含整数 A,第二行包含整数 B。 输出格式 共一行,包含 AB 的值。 数据范围 1≤A的长度≤100000, 0≤B≤10000 输入样…...
sqlite 查看表结构
在SQLite中,查看表结构通常有以下几种方法: 使用.schema命令 在SQLite的命令行界面中,你可以使用.schema命令加上表名来查看该表的结构。例如,如果你想查看名为your_table_name的表结构,你可以这样做: .s…...

测试中的第一性原理:回归本质的质量思维革命
在软件工程领域,测试活动常被惯性思维和经验主义所主导——测试用例库无限膨胀、自动化脚本维护成本居高不下、测试策略与业务目标渐行渐远。要突破这种困境,第一性原理(First Principles Thinking)提供了独特的解题视角ÿ…...
flink判断两个事件之间有没有超时(不使用CEP)
1.为啥不使用cep呢,cep的超时时间设置不好配置化,无法满足扩展要求 2.超时怎么界定。A事件发生后,过了N时间,还没有收到B事件,算超时。 代码如下: import com.alibaba.fastjson.JSONObject; import lombo…...

二级C语言题解:十进制转其他进制、非素数求和、重复数统计
目录 一、程序填空📝 --- 十进制转其他进制 题目📃 分析🧐 二、程序修改🛠️ --- 非素数求和 题目📃 分析🧐 三、程序设计💻 --- 重复数统计 题目📃 分析🧐 前言…...

打家劫舍3
今天和打家讲一下打家劫舍3 题目: 题目链接:337. 打家劫舍 III - 力扣(LeetCode) 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为root。 除了 root 之外,每栋房子有且只有一个“父“…...
练习题(2025.2.9)
题目背景 “咚咚咚……”“查水表!”原来是查水表来了,现在哪里找这么热心上门的查表员啊!小明感动得热泪盈眶,开起了门…… 题目描述 妈妈下班回家,街坊邻居说小明被一群陌生人强行押上了警车!妈妈丰富…...
【练习】PAT 乙 1074 宇宙无敌加法器
题目 地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的。而在PAT星人开挂的世界里,每个数字的每一位都是不同进制的,这种神奇的数字称为“PAT数”。每个PAT星人都必须熟记各位数字的进制表,例如“……0527”就表示最…...

网络防御高级02-综合实验
web页面: [FW]interface GigabitEthernet 0/0/0 [FW-GigabitEthernet0/0/0]service-manage all permit 需求一,接口配置: SW2: [Huawei]sysname SW2 1.创建vlan [sw2]vlan 10 [sw2]vlan 20 2.接口配置 [sw2]interface GigabitEther…...
UITableView的复用原理
UITableView复用的基本原理是Cell复用机制,它通过重用已经创建的Cell来减少内存开始并提高性能,避免频繁创建和销毁Cell。 复用的流程 1.队列管理 UITableView维护一个可复用队列(reuse queue),存储离屏的UITableVi…...
SQL条件分支中的大讲究
在SQL中,条件分支用于根据不同的条件执行不同的操作,适用于数据查询、数据更新以及存储过程等场景。合理使用SQL条件分支,可以优化数据操作流程,提高代码的可读性和可维护性。 目录 1. 逻辑判断的基本概念 2. CASE 语句…...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...

Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...

跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...