Docker 里面的镜像(Image)和容器(Container)到底是什么

很多人学 Docker:

最容易懵的就是:

txt 复制代码
镜像 和 容器

因为:

txt 复制代码
这两个概念太抽象

但实际上:

你只要理解一个核心:

txt 复制代码
镜像是模板
容器是运行实例

整个 Docker:

瞬间就通了。


一、先记住一句话(最重要)

txt 复制代码
镜像(Image) = 安装包/模板
容器(Container) = 运行中的程序

二、最经典类比(必须理解)


类比1:游戏

Docker 游戏类比
镜像 游戏安装包
容器 正在运行的游戏

类比2:类和对象

如果你学过 C++/Java:

Docker 面向对象
Image
Container 对象

类比3:蛋糕模具

Docker 蛋糕
Image 蛋糕模具
Container 做出来的蛋糕

三、什么是镜像(Image)

镜像:

本质:

txt 复制代码
只读模板

里面包含:

txt 复制代码
程序
运行环境
依赖
配置

例如:

txt 复制代码
Redis镜像
MySQL镜像
Ubuntu镜像
Go镜像

四、镜像本身能运行吗

不能。

镜像:

只是:

txt 复制代码
模板

必须:

txt 复制代码
通过镜像创建容器

才能运行。


五、镜像里到底有什么

例如:

Redis 镜像。

里面已经包含:

txt 复制代码
Redis程序
Linux环境
Redis配置
启动命令

所以:

你不需要:

txt 复制代码
手动安装 Redis

六、什么是容器(Container)

容器:

是:

txt 复制代码
镜像运行后的实例

也就是:

txt 复制代码
真正运行中的程序

七、容器是活的

镜像:

txt 复制代码
静态
不会运行

容器:

txt 复制代码
动态
真正运行

例如:

bash 复制代码
docker run redis

Docker 会:

txt 复制代码
Redis镜像
↓
创建Redis容器
↓
启动Redis

八、真正运行的是容器

很多新人会误以为:

txt 复制代码
docker run redis
是在运行镜像

其实:

真正运行的是:

txt 复制代码
容器

镜像只是:

txt 复制代码
创建容器的模板

九、一个镜像可以创建多个容器

例如:

一个 Redis 镜像。

可以:

bash 复制代码
docker run redis
docker run redis
docker run redis

创建:

txt 复制代码
多个Redis容器

十、为什么镜像是只读的

镜像:

设计思想:

txt 复制代码
保持稳定

所以:

txt 复制代码
镜像不会改变

真正会变化的是:

txt 复制代码
容器

十一、容器里面的数据会变化

例如:

Redis 容器:

txt 复制代码
数据会增加
配置会变化
日志会变化

这些:

都属于:

txt 复制代码
容器层

十二、删除容器不会删除镜像

例如:

bash 复制代码
docker rm myredis

删除的是:

txt 复制代码
Redis容器

但:

txt 复制代码
Redis镜像还在

所以:

下次启动:

非常快。


十三、删除镜像

bash 复制代码
docker rmi redis

才是真正删除:

txt 复制代码
Redis镜像

十四、Docker 工作流程(必须掌握)

Docker 最核心流程:

txt 复制代码
Docker Hub
↓
下载镜像(Image)
↓
创建容器(Container)
↓
运行程序

十五、最经典命令解析


下载镜像

bash 复制代码
docker pull redis

作用:

txt 复制代码
下载 Redis 镜像

此时:

txt 复制代码
还没运行

创建运行容器

bash 复制代码
docker run redis

Docker:

txt 复制代码
基于 Redis 镜像
创建 Redis 容器
并启动

十六、查看镜像

bash 复制代码
docker images

输出:

txt 复制代码
REPOSITORY   TAG
redis        latest
mysql        latest

这些:

都是:

txt 复制代码
镜像

十七、查看容器

bash 复制代码
docker ps

输出:

txt 复制代码
CONTAINER ID   IMAGE
xxxxx          redis

这里:

txt 复制代码
IMAGE 表示:
这个容器基于哪个镜像

十八、镜像和容器关系图(重点)

txt 复制代码
Redis镜像
↓
创建
↓
Redis容器1(运行中)

Redis镜像
↓
创建
↓
Redis容器2(运行中)

十九、为什么 Docker 启动快

虚拟机:

txt 复制代码
启动整个操作系统

Docker:

txt 复制代码
直接基于镜像创建容器

所以:

txt 复制代码
非常轻量
启动极快

二十、镜像分层(了解)

Docker 镜像:

底层:

其实:

txt 复制代码
分层存储

例如:

txt 复制代码
Ubuntu层
↓
Go层
↓
项目代码层

所以:

Docker:

txt 复制代码
非常节省空间

因为:

相同层:

会复用。


二十一、为什么 Go 特别适合 Docker

因为:

Go:

txt 复制代码
编译后只有一个二进制文件

非常容易:

txt 复制代码
做成镜像

所以:

txt 复制代码
Go + Docker

是绝配。


二十二、真实开发里怎么用

例如:

你的项目:

txt 复制代码
Gin项目
MySQL
Redis
Nginx

都会:

txt 复制代码
各自运行在不同容器

二十三、整个项目可能是这样

txt 复制代码
mysql容器
redis容器
gin容器
nginx容器

每个:

txt 复制代码
相互隔离

但:

txt 复制代码
可以通信

二十四、为什么 Docker 这么火

因为:

Docker 真正解决:

txt 复制代码
环境一致性问题

以前:

txt 复制代码
我电脑能跑
你电脑跑不了

现在:

txt 复制代码
同一个镜像
所有机器都能跑

二十五、最后一句总结(必须记住)

txt 复制代码
镜像(Image)
=
程序 + 环境 + 配置 的模板

容器(Container)
=
镜像运行后的实例
=
真正运行中的程序

Docker 核心思想:

txt 复制代码
镜像负责"打包"
容器负责"运行"
相关推荐
杨浦老苏1 小时前
家庭实验室监控仪表盘HomeLab-Monitor
运维·docker·监控·群晖
回忆2012初秋2 小时前
【Nginx】原理、配置与运维实战(2)
运维·nginx·策略模式
Urbano3 小时前
工装外套全制作流程、工序痛点及自动化设备升级方案
运维·自动化
映翰通朱工3 小时前
工业4G网关无公网IP远程运维实战(内网终端异地访问方案)
运维·服务器·网络·安全·智能路由器
洪晓露3 小时前
将 rke2 集群证书延长至 10 年
运维·服务器·数据库
谢平康3 小时前
解决用 rm 报bash: /usr/bin/rm: Argument list too long错
linux·运维·运维开发
IP老炮不瞎唠4 小时前
Python 价格监控如何实现?思路与实用方法分享
运维·服务器·网络
GIS数据转换器4 小时前
城市排水生命线安全运行监测平台深度解析
java·运维·人工智能·python·安全·数据挖掘·无人机
Tokai_Teio_14 小时前
第四届黄河流域 misc
运维·服务器
开发者联盟league5 小时前
使用k8s安装Sonarqube
云原生·容器·kubernetes