Windows Docker笔记-制作、加载镜像

ops/2025/2/8 11:54:39/

引言

在文章《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 提供了多种方式来删除容器,包括删除单个容器、多个容器,甚至是所有容器。

    1. 删除单个容器
    • 语法:docker rm [OPTIONS] CONTAINER
      • CONTAINER:容器的 ID 或名称。
    • 案例:docker rm myUbuntu # 删除名为myUbuntu的容器
    1. 如果容器正在运行,你需要先停止它,或者使用 -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 命令来删除镜像。

    1. 删除单个镜像
    • 语法:docker rmi [OPTIONS] IMAGE [IMAGE…]
      • IMAGE:镜像的名称或 ID
    • 语法:docker image rm [OPTIONS] IMAGE [IMAGE…]
      • IMAGE:镜像的名称或 ID
    • 案例:
    1. 强制删除镜像
      如果镜像正在被一个或多个容器使用,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_119">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笔记-在容器中运行项目》
下一章:


http://www.ppmy.cn/ops/156718.html

相关文章

深度分析:网站快速收录与网站内容多样性的关系

本文转自&#xff1a;百万收录网 原文链接&#xff1a;https://www.baiwanshoulu.com/87.html 网站快速收录与网站内容多样性之间存在着密切的关系。以下是对这一关系的深度分析&#xff1a; 一、网站内容多样性对快速收录的影响 提升搜索引擎抓取效率&#xff1a; 多样化的…

【STM32】AHT20温湿度模块

AHT20温度模块采用的是I2C硬件通信协议。本篇文章会根据时序图实现AHT20模块初始化&#xff0c;以及读取温湿度 AHT20温度模块对应电路图 得到设备地址&#xff0c;读地址的话设备地址为0x71,写的话为0x70 1.根据手册写aht20初始化代码 void aht20_init() { uint8_t rea…

WebSocket——netty实现websocket编码

一、前言&#xff1a;WebSocket 和 Netty 简介 在现代的互联网应用中&#xff0c;许多场景需要实时通信&#xff0c;比如在线聊天、实时通知、股票行情更新等。这些场景下&#xff0c;我们需要一种技术&#xff0c;让服务器能够主动向客户端推送消息。WebSocket 就是为了解决这…

支持向量机(一)

支持向量机是典型的二分类模型&#xff0c;以其模型简单、实现简单、效果卓越而著称。 一元支持向量机 我们通过一条中间线根据特征对样本实现分类&#xff0c;很明显&#xff1a;两个支持样本的差别越大&#xff0c;两个支持样本的分类效果就越好。 二元支持向量机 在实际生…

QT实现多线程的方法

目录 一、继承QThread类 1&#xff09;自定义线程类 2&#xff09;使用自定义的子线程类 3&#xff09;使用说明 二、利用QThread的消息循环 1&#xff09;自定义执行类 2&#xff09;启动子线程 3&#xff09;方法说明 三、使用线程池 四、方法比较 QT多线程编程常…

《DeepSeek R1:7b 写一个python程序调用摄像头获取视频并显示》

C:\Users\Administrator>ollama run deepseek-r1:7b hello Hello! How can I assist you today? &#x1f60a; 写一个python程序调用摄像头获取视频并显示 好&#xff0c;我需要帮用户写一个Python程序&#xff0c;它能够使用摄像头获取视频&#xff0c;并在屏幕上显示出…

CSS 伪类(Pseudo-classes)的详细介绍

CSS 伪类详解与示例 在日常的前端开发中&#xff0c;CSS 伪类可以帮助我们非常精准地选择元素或其特定状态&#xff0c;从而达到丰富页面表现的目的。本文将详细介绍以下伪类的使用&#xff1a; 表单相关伪类 :checked、:disabled、:enabled、:in-range、:invalid、:optional、…

Selenium记录RPA初阶 - 基本输入元件

防止自己遗忘&#xff0c;故作此为记录。 爬取网页基本元件并修改后爬取。 包含元件&#xff1a; elements: dict[str, str] {"username": None,"password": None,"email": None,"website": None,"date": None,"ti…