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笔记-在容器中运行项目》

下一章:<>

相关推荐
狂爱代码的码农1 小时前
docker,k8s,docker compose三者的关系
docker
m0_748256141 小时前
使用 Docker 部署 RabbitMQ 的详细指南
docker·容器·rabbitmq
狂爱代码的码农3 小时前
docker的卷映射如何手动指定位置
docker·容器
Jamence3 小时前
docker启动报错code=exited, status=1/FAILURE——问题排查
docker·容器·eureka
声网4 小时前
a16z 最新 Voice AI 报告:语音将成为关键切入点,而非最终产品本身丨 Voice AI 学习笔记
人工智能·笔记·学习
梁萌4 小时前
02DevOps基础环境准备
docker·devops·ci·cd
云边有个稻草人5 小时前
DeepSeek与人工智能的结合:探索搜索技术的未来
人工智能·笔记·科技·算法·deepseek
小锋学长生活大爆炸5 小时前
【教程】docker升级镜像
java·docker·容器·镜像
大饼酥6 小时前
保姆级教程Docker部署KRaft模式的Kafka官方镜像
docker·容器·kafka