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

news/2025/2/8 6:09:56/

引言

在文章《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/news/1570256.html

相关文章

【免费】2011-2020年各省互联网接入端口数数据

2011-2020年各省互联网接入端口数数据 1、时间&#xff1a;2011-2020年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;地区名称、年份、互联网宽带接入端口数(万个) 4、范围&#xff1a;31省 5、指标说明&#xff1a;互联网接入端口数通常指的是用于连接和…

数据分析师使用Kutools for Excel 插件

数据分析师使用Kutools for Excel 插件 Kutools for Excel 是一款功能强大的 Excel 插件&#xff0c;旨在提高 Excel 用户的工作效率&#xff0c;简化复杂的操作。它提供了超过 300 个增强功能&#xff0c;帮助用户快速完成数据管理、格式化、排序、分析等任务&#xff0c;特别…

MySQL实战-解决方案

1. MySQL 主从集群同步延迟问题的解决方案 在主从复制架构中&#xff0c;主库执行写操作后&#xff0c;将更新事件写入 Binlog&#xff0c;从库通过 I/O 线程将 Binlog 数据同步到本地的 Relay Log&#xff0c;再由 SQL 线程解析并执行&#xff0c;从而保持数据一致性。然而&a…

【react】react+umi4

目录 环境信息 创建项目 环境信息 开发环境 Node:18 npm 10&#xff08;9也可以&#xff09; cnpm 如果需要安装环境或者切换node版本可以查看 node安装和配置 创建项目 官网也有相关的教程 umi.js 使用 npx create-umilatest在项目目录创建项目 npx creat…

【SQL server】关于SQL server彻底的卸载删除。

1.未彻底卸载删除SQL Server会出现的问题 如果没有彻底删除之前的SQL server&#xff0c;就可能会出现这个 当要安装新的实例的时候因为之前安装过sql server没有删除干净而导致下图问题&#xff0c;说实例名已经存在。 2.首先要先关闭服务 “开始R”可以快速进入运行&#…

MYSQL索引与视图

一、新建数据库 mysql> create database mydb15_indexstu; mysql> use mydb15_indexstu; 二、新建表 &#xff08;1&#xff09;学生表Student mysql> create table Student(-> Sno int primary key auto_increment,-> Sname varchar(30) not null unique,-…

【AcWing】蓝桥杯辅导课-二分与前缀和

目录 二分 数的范围 数的三次方跟 机器人跳跃问题 四平方和 分巧克力 前缀和 前缀和 子矩阵的和 K倍区间 激光炸弹 二分 数的范围 789. 数的范围 - AcWing题库 #include<iostream> using namespace std;const int N 1e5 10;int n, q, k, a[N];int main()…

(2024|CVPR,MLLM 幻觉)OPERA:通过过度信任惩罚和回顾分配缓解多模态大型语言模型中的幻觉

OPERA: Alleviating Hallucination in Multi-Modal Large Language Models via Over-Trust Penalty and Retrospection-Allocation 目录 1. 引言 2. 相关研究 2.1 多模态大语言模型 2.2 LLM 的幻觉与解决方案 2.3. 语言模型中的解码策略 3. 方法 3.1 MLLM 生成过程 3.2…