很多人学 Docker:

最容易懵的就是:

镜像 和 容器

因为:

这两个概念太抽象

但实际上:

你只要理解一个核心:

镜像是模板
容器是运行实例

整个 Docker:

瞬间就通了。


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

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

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


类比1:游戏

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

类比2:类和对象

如果你学过 C++/Java:

Docker 面向对象
Image
Container 对象

类比3:蛋糕模具

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

三、什么是镜像(Image)

镜像:

本质:

只读模板

里面包含:

程序
运行环境
依赖
配置

例如:

Redis镜像
MySQL镜像
Ubuntu镜像
Go镜像

四、镜像本身能运行吗

不能。

镜像:

只是:

模板

必须:

通过镜像创建容器

才能运行。


五、镜像里到底有什么

例如:

Redis 镜像。

里面已经包含:

Redis程序
Linux环境
Redis配置
启动命令

所以:

你不需要:

手动安装 Redis

六、什么是容器(Container)

容器:

是:

镜像运行后的实例

也就是:

真正运行中的程序

七、容器是活的

镜像:

静态
不会运行

容器:

动态
真正运行

例如:

docker run redis

Docker 会:

Redis镜像
↓
创建Redis容器
↓
启动Redis

八、真正运行的是容器

很多新人会误以为:

docker run redis
是在运行镜像

其实:

真正运行的是:

容器

镜像只是:

创建容器的模板

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

例如:

一个 Redis 镜像。

可以:

docker run redis
docker run redis
docker run redis

创建:

多个Redis容器

十、为什么镜像是只读的

镜像:

设计思想:

保持稳定

所以:

镜像不会改变

真正会变化的是:

容器

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

例如:

Redis 容器:

数据会增加
配置会变化
日志会变化

这些:

都属于:

容器层

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

例如:

docker rm myredis

删除的是:

Redis容器

但:

Redis镜像还在

所以:

下次启动:

非常快。


十三、删除镜像

docker rmi redis

才是真正删除:

Redis镜像

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

Docker 最核心流程:

Docker Hub
↓
下载镜像(Image)
↓
创建容器(Container)
↓
运行程序

十五、最经典命令解析


下载镜像

docker pull redis

作用:

下载 Redis 镜像

此时:

还没运行

创建运行容器

docker run redis

Docker:

基于 Redis 镜像
创建 Redis 容器
并启动

十六、查看镜像

docker images

输出:

REPOSITORY   TAG
redis        latest
mysql        latest

这些:

都是:

镜像

十七、查看容器

docker ps

输出:

CONTAINER ID   IMAGE
xxxxx          redis

这里:

IMAGE 表示:
这个容器基于哪个镜像

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

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

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

十九、为什么 Docker 启动快

虚拟机:

启动整个操作系统

Docker:

直接基于镜像创建容器

所以:

非常轻量
启动极快

二十、镜像分层(了解)

Docker 镜像:

底层:

其实:

分层存储

例如:

Ubuntu层
↓
Go层
↓
项目代码层

所以:

Docker:

非常节省空间

因为:

相同层:

会复用。


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

因为:

Go:

编译后只有一个二进制文件

非常容易:

做成镜像

所以:

Go + Docker

是绝配。


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

例如:

你的项目:

Gin项目
MySQL
Redis
Nginx

都会:

各自运行在不同容器

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

mysql容器
redis容器
gin容器
nginx容器

每个:

相互隔离

但:

可以通信

二十四、为什么 Docker 这么火

因为:

Docker 真正解决:

环境一致性问题

以前:

我电脑能跑
你电脑跑不了

现在:

同一个镜像
所有机器都能跑

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

镜像(Image)
=
程序 + 环境 + 配置 的模板

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

Docker 核心思想:

镜像负责“打包”
容器负责“运行”
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐