当前位置: 首页 > article >正文

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:afc574de76d32f7d737eac600c94c43001b71cf72e00be5dbaac528b4574e7c8

D:\本周未完成工作\docker>docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
myimage      1.0       afc574de76d3   16 seconds ago   471MB
ubuntu       latest    a04dc4851cbc   11 days ago      78.1MB

D:\本周未完成工作\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.tar

D:\本周未完成工作\docker>dir
 驱动器 D 中的卷是 Data
 卷的序列号是 F6F0-A014

 D:\本周未完成工作\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.tar
               3 个文件    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             myUbuntu

D:\本周未完成工作\docker>docker rm -f myUbuntu
myUbuntu

D:\本周未完成工作\docker>docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

D:\本周未完成工作\docker>

容器已经全部清理干净。

删除镜像

在 Docker 中,删除镜像是一个常见的操作,尤其是在清理不再需要的镜像或节省磁盘空间时。Docker 提供了 docker rmi 和 docker image rm 命令来删除镜像。

    1. 删除单个镜像
    • 语法: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
    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.1MB

D:\本周未完成工作\docker>docker rmi myimage:1.0
Untagged: myimage:1.0
Deleted: sha256:afc574de76d32f7d737eac600c94c43001b71cf72e00be5dbaac528b4574e7c8
Deleted: sha256:9eef925daae57b9aa72b8347d2e48693018ade421a90d489f29193149e387023

D:\本周未完成工作\docker>docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
ubuntu       latest    a04dc4851cbc   11 days ago   78.1MB

D:\本周未完成工作\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.0

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.1MB

D:\本周未完成工作\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.1MB

D:\本周未完成工作\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
exit

D:\本周未完成工作\docker>docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED          STATUS                      PORTS     NAMES
1ef0d1e4425a   afc574de76d3   "/bin/bash"   33 seconds ago   Exited (0) 10 seconds ago             mytest

D:\本周未完成工作\docker>

上述过程,首先使用镜像myimage创建了一个名为mytest的容器,之后进入容器内后,成功运行了项目,退出容器后,查看容器信息,可以看到容器已经存在,并且停止了。

这样就成功将现有的项目发布到生产环境,而不需要再次配置运行环境就可以运行项目。


上一章:《Windows Docker笔记-在容器中运行项目》
下一章:


http://www.kler.cn/a/538752.html

相关文章:

  • 第1章 特征工程
  • 【AIGC魔童】DeepSeek v3提示词Prompt书写技巧
  • json转excel,在excel内导入json, json-to-excel插件
  • edu小程序挖掘严重支付逻辑漏洞
  • TypeScript 中的联合类型:灵活的类型系统
  • windows安装linux子系统【ubuntu】操作步骤
  • 前后端服务配置
  • 从运输到植保:DeepSeek大模型探索无人机智能作业技术详解
  • 【sqlite】python操作sqlite3(含测试)
  • Android 开发APP中参数配置与读取总结
  • Java语言的安全开发
  • DeepSeek 与 Transformer 架构的深度关联
  • springcloud中Seata-1.5.2的使用
  • deepseek v3网络结构源码分析笔记
  • 网络基础之IP
  • NUMA 配置对 Redis 使用的影响:提升性能的秘密武器
  • 【PyQt5 12】如何加载QT designer 设计的界面
  • docker /var/lib/docker/overlay2目录把磁盘空间占满问题
  • 【WebLogic】Linux图形化界面创建WebLogic应用域
  • 25/2/7 <机器人基础> 牛顿-欧拉递推公式,开闭环
  • 常用在线工具
  • 无人机方位感知器官磁力传感器!
  • 【数据结构】链表应用-链表重新排序
  • 【后端java】构建工具maven
  • 使用云效解决docker官方镜像拉取不到的问题
  • react 19 useOptimistic 竞争更新乐观值时阻塞