【Docker入门】Docker Image(Docker 镜像)

🚀 欢迎来到我的CSDN博客:Optimistic _ chen

一名热爱技术与分享的全栈开发者,在这里记录成长,专注分享编程技术与实战经验,助力你的技术成长之路,与你共同进步!


🚀我的专栏推荐

专栏 内容特色 适合人群
🔥C语言从入门到精通 系统讲解基础语法、指针、内存管理、项目实战 零基础新手、考研党、复习
🔥Java基础语法 系统解释了基础语法、类与对象、继承 Java初学者
🔥Java核心技术 面向对象、集合框架、多线程、网络编程、新特性解析 有一定语法基础的开发者
🔥Java EE 进阶实战 Servlet、JSP、SpringBoot、MyBatis、项目案例拆解 想快速入门Java Web开发的同学
🔥Java数据结构与算法 图解数据结构、LeetCode刷题解析、大厂面试算法题 面试备战、算法爱好者、计算机专业学生
🔥Redis系列 从数据类型到核心特性解析 项目必备

🚀我的承诺:

✅ 文章配套代码:每篇技术文章都提供完整的可运行代码示例

✅ 持续更新:专栏内容定期更新,紧跟技术趋势

✅ 答疑交流:欢迎在文章评论区留言讨论,我会及时回复(支持互粉)


🚀 关注我,解锁更多技术干货!
⏳ 每天进步一点点,未来惊艳所有人!✍️ 持续更新中,记得⭐收藏关注⭐不迷路 ✨

📌 标签:#技术博客#编程学习#Java#C语言#算法#程序员

文章目录

  • [Docker 镜像是什么](#Docker 镜像是什么)
  • 镜像命令
    • [docker images 和 docker image inspect](#docker images 和 docker image inspect)
    • [docker tag](#docker tag)
    • [docker rmi](#docker rmi)
    • [docker save](#docker save)
    • [docker load](#docker load)
    • [docker history](#docker history)
    • [docker image prune](#docker image prune)
  • 离线迁移镜像
  • 完结撒花!🎉

Docker 镜像是什么

  • Docker Image本质上是一个read-only只读文件 ,这个文件包含了文件系统、源码、库文件、依赖、工具 等一些运行application所必须的文件。
  • 我们把Docker Image理解成一个模板,利用这些模板实例化出来很多容器,类比于Java中的类与对象,我们根据一个类可以new很多实例化对象。

Image(镜像)里面是一层层文件系统Union FS(联合文件系统)可以将几层目录挂载到一起,形成一个虚拟文件系统 。每一层文件系统我们叫做一层layer,联合文件系统可以对每一层文件系统设置三种权限,只读(read only)、读写(readwrite)和写出(whiteout-able)但是,docker镜像中每一层文件系统都是只读的。

建立镜像的时候,从一个最基本的操作系统开始,每个构建的操作都相当于加一层修改,增加一层文件系统。当你使用的时候,你只会看到一个完全的整体,不知道里面有几层。

镜像解决的问题

|-----------------------------------------------------------------------|
| 如同装修房屋的过程:从毛坯开始,依次安装水电管线、铺设地暖,最后选择地板或地毯。每位业主的装修需求各异,正如我们对容器镜像层的定制化选择。 |

部署应用时,面临云端和本地环境不一致的问题,需要程序员配置和修改,非常费劲。然而,Docker镜像就很好的解决了这个问题,Docker镜像就像一个压缩包,它把一个镜像制作成一个完整的操作系统所有文件和对应的目录结构,这样的压缩包和你本地环境用的操作系统一模一样。

Docker最大的贡献是定义了容器镜像的分层的存储格式,docker镜像技术的基础是联合文件系统,其文件系统是分层的,既可以充分利用共享层,又可以减少存储空间占用。

镜像命令

docker images 和 docker image inspect

功能:列出本地镜像

powershell 复制代码
docker images [options] [repository[:Tag]]
  • -a: 列出本地所有镜像

  • --digests:显示镜像的摘要信息(即镜像内容的sha256哈希值)

  • -f:显示满足条件的镜像(-f 有很多选项,这里不一一列举)

    *--format:指定返回值的模板

  • --no-trunc:显示完整的镜像信息(不截断ID)

  • -q:只显示镜像ID

docker image inspect功能:查看镜像的详细信息(支持ID查看)

powershell 复制代码
docker image inspect [options] image [image...]

docker tag

功能:标记本地镜像,将其归入某一仓库(把旧的镜像:tag修改为新的镜像:tag)

powershell 复制代码
docker tag source_image[:tag] target_image[:tag]

docker rmi

功能:删除镜像

powershell 复制代码
docker rmi [options] image [image ...]
  • -f:强制删除
  • -no-prune:不移除该镜像的过程镜像,默认移除

docker save

功能:将指定镜像保存成 tar 归档文件

powershell 复制代码
docker save [options] image [imgae ...]
  • -o:输出到的文件

docker load

功能:导入使用docker svae 命令导出的镜像

powershell 复制代码
docker load [options]
  • --input(-i):指定导入文件,代替stdin
  • --quiet(-q):精简输出信息(默认)

docker history

功能:显示镜像历史(每一层)

powershell 复制代码
docker history [options] image
  • -H(--human):大小和日期采用人容易读的格式展现
  • --no-trunc:显示全部信息,不要隔断
  • -q(--quiet):只显示镜像ID信息

docker image prune

功能:删除不使用的镜像

powershell 复制代码
docker image prunc [options]
  • -a(--all):删除全部不适用的镜像
  • --filter filter:指定过滤对象
  • -f(--force):不提示是否删除

离线迁移镜像

因为要求离线,所以我们不能去网站上直接去pull镜像,只能通过从自己仓库中pull下来一个镜像

powershell 复制代码
# 先登录仓库
docker login --username=小张不嚣涨 crpi-2aypcteu5jaqco4g.cn-hangzhou.personal.cr.aliyuncs.com

# 拉取镜像
docker pull crpi-2aypcteu5jaqco4g.cn-hangzhou.personal.cr.aliyuncs.com/optimistic/optimistic1:v1.0

然后将镜像保存为tar文件

powershell 复制代码
# 确定拉取成功
docker images

# 保存为tar文件
docker save -o mynginx2.tar crpi-2aypcteu5jaqco4g.cn-hangzhou.personal.cr.aliyuncs.com/optimistic/optimistic1:v1.0

接下来检查离线服务器上是否安装了docker,创建目录,通过scp命令拷贝tar文件(通过SSH协议完成两个服务器之间的通信)

powershell 复制代码
docker -v
mkdir -p /data/test
# 通过scp把mynginx2.tar拷贝到对端服务器root用户的要求目录下
scp mynginx2.tar root@对端服务器IP:/data/test

然后在目标服务器上加载tar包,完成启动

powershell 复制代码
docker load -i mynginx2.tar
docker images

#把该镜像交互式启动为一个容器
docker run -it crpi-2aypcteu5jaqco4g.cn-hangzhou.personal.cr.aliyuncs.com/optimistic/optimistic1:v1.0 sh

现在就完成了离线迁移镜像的过程,并且不被操作系统影响。

完结撒花!🎉

如果这篇博客对你有帮助,不妨点个赞支持一下吧!👍
你的鼓励是我创作的最大动力~

想获取更多干货? 欢迎关注我的专栏 → optimistic_chen

📌 收藏本文,下次需要时不迷路!

我们下期再见!💫 持续更新中......


悄悄说:点击主页有更多精彩内容哦~ 😊

相关推荐
骇客野人6 分钟前
通过脚本推送Docker镜像
java·docker·容器
蜡笔小炘8 分钟前
LVS -- 持久链接(Persistent Connection)实现会话粘滞
运维·服务器
生活很暖很治愈27 分钟前
Linux——孤儿进程&进程调度&大O(1)调度
linux·服务器·ubuntu
liux352839 分钟前
基于kubeadm部署Kubernetes 1.26.4 集群指南
云原生·容器·kubernetes
HalvmånEver44 分钟前
Linux:线程同步
linux·运维·服务器·线程·同步
Zach_yuan1 小时前
自定义协议:实现网络计算器
linux·服务器·开发语言·网络
岁杪杪1 小时前
关于运维:LINUX 零基础
运维·服务器·php
Zfox_1 小时前
CANN GE 深度解析:图编译器与执行引擎的后端优化策略、OM 文件结构与 Stream 调度机制
容器·节点小宝
wdfk_prog1 小时前
[Linux]学习笔记系列 -- [drivers][I2C]I2C
linux·笔记·学习
VekiSon1 小时前
Linux内核驱动——杂项设备驱动与内核模块编译
linux·c语言·arm开发·嵌入式硬件