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,就是为了在项目发布到生产环境时,不用再去安装项目运行的环境,直接丢给…...
安卓/ios脚本开发按键精灵经验小分享
1. 程序的切换 我们经常碰到这样的需求:打开最近的应用列表,选取我们想要的程序。但是每个手机为了自己的风格,样式都有区别,甚至连列表的滑动方向都不一样,我们很难通过模拟操作来识别点击,那么我们做的只…...
(动态规划 leetcode377)组合求和IV
确立状态转移方程需要深入理解问题,合理定义子问题,找到边界条件(比如dp[0]),分析状态之间的转移关系(dp和dp之间的关系),并进行验证。 递归是自顶向下,而dp是自下而上 这里是i作为目标值&…...
备赛蓝桥杯之第十五届职业院校组省赛第四题:多表单校验
提示:本篇文章仅仅是作者自己目前在备赛蓝桥杯中,自己学习与刷题的学习笔记,写的不好,欢迎大家批评与建议 由于个别题目代码量与题目量偏大,请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题࿰…...
完全离线部署deepseek并建立本地知识库应用电子数据取证领域
点击上方蓝字“小谢取证”一起玩耍 之前小谢推出一篇部署本地大模型教程,但需要网络环境 AI机器人本地免费部署(部署Llama 3.1详细教程) 还是比较受到读者的欢迎,但应读者要求:需要这个模型能够训练,能够…...
C语言-内存泄漏
1、内存泄漏 申请的空间没有释放 2、内存泄漏的原因 未释放内存:程序完成使用动态分配的内存后,忘记调用free()释放。 引用丢失:在分配内存后,指针被修改或丢失,导致无法访问到原始内存块。 多次分配:在分…...
ctf网络安全题库 ctf网络安全大赛答案
此题解仅为部分题解,包括: 【RE】:①Reverse_Checkin ②SimplePE ③EzGame 【Web】①f12 ②ezrunner 【Crypto】①MD5 ②password ③看我回旋踢 ④摩丝 【Misc】①爆爆爆爆 ②凯撒大帝的三个秘密 ③你才是职业选手 一、 Re ① Reverse Chec…...
深度分析:网站快速收录与网站内容多样性的关系
本文转自:百万收录网 原文链接:https://www.baiwanshoulu.com/87.html 网站快速收录与网站内容多样性之间存在着密切的关系。以下是对这一关系的深度分析: 一、网站内容多样性对快速收录的影响 提升搜索引擎抓取效率: 多样化的…...
SolidWorks教程P2.2【草图 | 第二节】——草图几何关系与编辑
草图几何关系包括:重合、中点、相切、平行、相等、共线、对称 草图编辑功能包括:裁剪实体、转换实体引用、等距实体 目录 1.草图几何关系 2.裁剪实体 3.转换实体引用 4.等距实体 补充知识:智能尺寸 1.草图几何关系 在之前的草图介绍里…...
数据库系统概念第六版记录 三
外码约束(Foreign Key Constraint) 外码(Foreign Key, FK)是关系数据库中的一个约束,它用于保证表之间的引用完整性。外码的值必须: 要么存在于被引用表的主键列中,要么为空(NULL&…...
使用 Axios 进行高效的数据交互
一、前言 1. 项目背景与目标 Axios 的重要性: Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 Node.js,简化了与服务器的通信。Axios 提供了丰富的功能,如拦截器、并发请求管理、取消请求等。2. 环境搭建 开发工具准备: 推荐使用 VSCode 或 WebStorm。安装必要的…...
MySQL视图索引操作
创建学生表; mysql> create table Student(-> Sno int primary key auto_increment,-> Sname varchar(30) not null unique,-> Ssex char(2) check (Ssex男 or Ssex女) not null,-> Sage int not null,-> Sdept varchar(10) default 计算机 not …...
20个DeepSeek平替网站,解决DeepSeek无法使用!
DeepSeek因为访问量过大以及遭受网络攻击,官网和APP这几天时好时坏,API也没法用。目前360、华为在协助防御境外攻击,DeepSeek官网「晚上」使用情况已经比之前好多了。 得益于各大平台都接入了DeepSeek-R1,如果着急上手体验DeepSe…...
HIVE如何注册UDF函数
如果注册UDF函数的时候报了上面的错误,说明hdfs上传的路径不正确, 一定要用下面的命令 hadoop fs -put /tmp/hive/111.jar /user/hive/warehouse 一定要上传到上面路径,这样在创建函数时,引用下面的地址就可以创建成功...
硬件电路基础
目录 1. 电学基础 1.1 原子 1.2 电压 1.3 电流 1.电流方向: 正极->负极,正电荷定向移动方向为电流方向,与电子定向移动方向相反。 2.电荷(这里表示负电荷)运动方向: 与电流方向相反 1.4 测电压的时候 2. 地线…...
DeepSeek 模型发展脉络全解析
目录 一、DeepSeek Coder:代码智能领域的开拓者二、DeepSeek LLM:进军通用人工智能的号角三、DeepSeekMoE四、DeepSeek-V2:混合专家架构的新突破五、DeepSeekMath六、DeepSeek-Coder V2七、DeepSeek-VL2八、DeepSeek-V3:技术创新引…...
为多个GitHub账户配置SSH密钥
背景 当需要同时使用多个GitHub账户(例如工作和个人账户)时,默认的SSH配置可能导致冲突。本文介绍如何通过生成不同的SSH密钥对并配置SSH客户端来管理多个账户。 操作步骤 生成SSH密钥对 为每个GitHub账户生成独立的密钥对,并指…...
蓝耘智算平台使用DeepSeek教程
目录 一.平台架构与技术特点 二、DeepSeek R1模型介绍与优势 DeepSeek R1 模型简介 DeepSeek R1 模型优势 三.蓝耘智算平台使用DeepSeek教程 展望未来 耘元生代智算云是蓝耘科技推出的一款智算云平台有着以下特点: 一.平台架构与技术特点 基于 Kubernetes 原…...
脚本一键生成管理下游k8s集群的kubeconfig
一、场景 1.1 需要管理下游k8s集群的场景。 1.2 不希望使用默认的cluster-admin权限的config. 二、脚本 **重点参数: 2.1 配置变量。 1、有单独namespace的权限和集群只读权限。 2、自签名的CA证书位置要正确。 2.2 如果配置错误,需要重新…...
发布:大彩科技DN系列2.8寸高性价比串口屏发布!
一、产品介绍 该产品是一款2.8寸的工业组态串口屏,采用2.8寸液晶屏,分辨率为240*320,支持电阻触摸、电容触摸、无触摸。可播放动画,带蜂鸣器,默认为RS232通讯电平,用户短接屏幕PCB上J5短接点即可切换为TTL电…...
简述mysql 主从复制原理及其工作过程,配置一主两从并验证
MySQL 主从复制原理及其工作过程 MySQL 主从复制(Master-Slave Replication)是一种数据同步技术,其中一个 MySQL 实例(主库)将其数据变更(插入、更新、删除)通过二进制日志(Binary …...
华北平原shp格式范围
华北平原是中国东部的重要地理区域,以下是对其的简要介绍: 此数据为付费数据,如有需求,请联系本人。 1. 地理位置与范围 位置:位于中国东部,西起太行山脉和伏牛山,东至黄海、渤海,北…...
Unity 快速入门 1 - 界面操作
本项目将快速介绍 Unity 6的基本操作和功能,下载附件的项目,解压到硬盘,例如 D:\Unity Projects\, 注意整个文件路径中只有英文、空格或数字,不要有中文或其他特殊符合。 1. 打开Unity Hub,点击右上角的 O…...
网站改HTTPS方法
默认的网站建设好后打开的样子那看起来像是钓鱼网站,现在的浏览器特别只能,就是你新买来的电脑默认的浏览器同样也会出现这样“不安全”提示。 传输协议启动了向全球用户安全传输网页内容的流程。然而,随着HTTPS的推出,传输协议通…...
C#+halcon机器视觉九点标定算法
在机器视觉中,九点标定(也称为九点标定法)是一种常用的方法,用于将图像坐标系与物理坐标系进行映射。通过标定,可以将图像中的像素坐标转换为实际物理坐标,或者反之。下面是一个使用C#和Halcon进行九点标定…...
采用idea中的HTTP Client插件测试
1.安装插件 采用idea中的HTTP Client插件进行接口测试,好处是不用打开post/swagger等多个软件,并且可以保存测试时的参数,方便后续继续使用. 高版本(2020版本以上)的idea一般都自带这个插件,如果没有也可以单独安装. 2.使用 插件安装完成(或者如果idea自带插件),会在每个Con…...
记录 | WPF基础学习Style局部和全局调用
目录 前言一、Style1.1 例子1.2 为样式起名字1.3 BasedOn 继承上一个样式 二、外部StyleStep1 创建资源字典BaseButtonStyle.xamlStep2 在资源字典中写入StyleStep3 App.xaml中写引用路径【全局】Step4 调用三、代码提供四、x:Key和x:Name区别 更新时间 前言 参考文章ÿ…...
npm-npm ERR! missing script: serve
1.前言 vue运行项目时报错 npm ERR! missing script: serve 2.解决 在使用npm(Node Package Manager)时遇到“npm ERR! missing script: serve”的错误通常意味着在项目的package.json文件中没有定义名为serve的脚本。或者是未找到package.json文件。…...
重新刷题求职2-DAY6-哈希表
1.有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的 字母异位词 示例 1: 输入: s "anagram", t "nagaram" 输出: true示例 2: 输入: s "rat", t "car" 输出: false提示: 1 < s.leng…...
为什么在Rust中要用Struct和Enum组织数据?
为什么在Rust中要用Struct和Enum组织数据? Rust是一门注重内存安全和高效的系统编程语言,其类型系统的设计哲学强调明确性和安全性。struct(结构体)和enum(枚举)是Rust中组织数据的核心工具,它…...
